diff --git a/app/playlist/playlist.go b/app/playlist/playlist.go index ea67516..9abac7c 100644 --- a/app/playlist/playlist.go +++ b/app/playlist/playlist.go @@ -106,17 +106,28 @@ func parseAttributes(line string) map[string]string { return result } -// parseName парсит название канала из строки тега #EXTINF -func parseName(line string) string { - //TODO https://git.axenov.dev/IPTV/iptvc/issues/7 - parts := strings.Split(line, ",") - if len(parts) == 2 { - return strings.Trim(parts[1], " ") - } - +// parseTitle парсит название канала из строки тега #EXTINF +func parseTitle(line string) string { + // сначала пытаемся по-доброму: в строке есть тег, могут быть атрибуты, + // есть запятая-разделитель, после неё -- название канала (с запятыми или без) regex := regexp.MustCompile(`['"]?\s*,\s*(.+)`) regexMatches := regex.FindAllStringSubmatch(line, -1) - return regexMatches[0][1] + if len(regexMatches) > 0 && len(regexMatches[0]) >= 2 { + return strings.TrimSpace(regexMatches[0][1]) + } + + // теперь пытаемся хоть как-то: в строке есть тег, могут быть атрибуты, + // НЕТ запятой-разделителя и название канала (с запятыми или без) + lastQuotePos := strings.LastIndexAny(line, `,"'`) + if lastQuotePos != -1 && lastQuotePos < len(line)-1 { + afterLastQuote := line[lastQuotePos+1:] + name := strings.TrimSpace(afterLastQuote) + if name != "" { + return name + } + } + + return line // ну штош } // Download загружает плейлист по URL-адресу @@ -170,7 +181,7 @@ func (pls *Playlist) Parse() Playlist { if strings.HasPrefix(line, "#EXTINF") { isChannel = true tmpChannel.Attributes = parseAttributes(line) - tmpChannel.Title = parseName(line) + tmpChannel.Title = parseTitle(line) if tmpChannel.Title == "" { if tvgid, ok := tmpChannel.Attributes["tvg-id"]; ok {