From c9486c54b22ae1d534826437ffd17df00d083280 Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Tue, 18 Nov 2025 23:49:28 +0800 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20=D0=BD=D0=B0=D0=B7?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B9=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20(#7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/playlist/playlist.go | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) 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 {