@@ -106,17 +106,28 @@ func parseAttributes(line string) map[string]string {
return result
return result
}
}
// parseNam e парсит название канала из строки тега #EXTINF
// parseTitl e парсит название канала из строки тега #EXTINF
func parseNam e ( line string ) string {
func parseTitl e ( 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 ] , " " )
}
regex := regexp . MustCompile ( ` ['"]?\s*,\s*(.+) ` )
regex := regexp . MustCompile ( ` ['"]?\s*,\s*(.+) ` )
regexMatches := regex . FindAllStringSubmatch ( line , - 1 )
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-адресу
// Download загружает плейлист по URL-адресу
@@ -170,7 +181,7 @@ func (pls *Playlist) Parse() Playlist {
if strings . HasPrefix ( line , "#EXTINF" ) {
if strings . HasPrefix ( line , "#EXTINF" ) {
isChannel = true
isChannel = true
tmpChannel . Attributes = parseAttributes ( line )
tmpChannel . Attributes = parseAttributes ( line )
tmpChannel . Title = parseNam e ( line )
tmpChannel . Title = parseTitl e ( line )
if tmpChannel . Title == "" {
if tmpChannel . Title == "" {
if tvgid , ok := tmpChannel . Attributes [ "tvg-id" ] ; ok {
if tvgid , ok := tmpChannel . Attributes [ "tvg-id" ] ; ok {