@@ -41,7 +41,7 @@ class MainViewModel : ViewModel() {
4141 private var timeFormat = if (SP .displaySeconds) " HH:mm:ss" else " HH:mm"
4242
4343 private lateinit var appDirectory: File
44- var listModel: List <TVModel > = listOf ()
44+ var listModel: List <TVModel > = emptyList ()
4545 val groupModel = TVGroupModel ()
4646 private var cacheFile: File ? = null
4747 private var cacheChannels = " "
@@ -396,10 +396,9 @@ class MainViewModel : ViewModel() {
396396 ' [' -> {
397397 try {
398398 list = gson.fromJson(string, typeTvList)
399- Log .i(TAG , " 导入频道 ${list.size} " )
399+ Log .i(TAG , " 导入频道 ${list.size} $list " )
400400 } catch (e: Exception ) {
401- Log .i(TAG , " parse error $string " )
402- Log .i(TAG , e.message, e)
401+ Log .e(TAG , " str2Channels" , e)
403402 return false
404403 }
405404 }
@@ -413,41 +412,55 @@ class MainViewModel : ViewModel() {
413412
414413 val l = mutableListOf<TV >()
415414 val tvMap = mutableMapOf<String , List <TV >>()
416- for ((index, line) in lines.withIndex()) {
415+
416+ var tv = TV ()
417+ for (line in lines) {
417418 val trimmedLine = line.trim()
419+ if (trimmedLine.isEmpty()) {
420+ continue
421+ }
418422 if (trimmedLine.startsWith(" #EXTM3U" )) {
419423 epgUrl = epgRegex.find(trimmedLine)?.groupValues?.get(1 )?.trim()
420424 } else if (trimmedLine.startsWith(" #EXTINF" )) {
425+ Log .i(TAG , " TV $tv " )
426+ val key = tv.group + tv.name
427+ if (key.isNotEmpty()) {
428+ tvMap[key] =
429+ if (! tvMap.containsKey(key)) listOf (tv) else tvMap[key]!! + tv
430+ }
431+ tv = TV ()
421432 val info = trimmedLine.split(" ," )
422- val title = info.last().trim()
433+ tv. title = info.last().trim()
423434 var name = nameRegex.find(info.first())?.groupValues?.get(1 )?.trim()
424- name = name ? : title
425- var group = groupRegex.find(info.first())?.groupValues?.get(1 )?.trim()
426- group = group ? : " "
427- val logo = logRegex.find(info.first())?.groupValues?.get(1 )?.trim()
428- val uris =
429- if (index + 1 < lines.size) listOf (lines[index + 1 ].trim()) else emptyList()
430- val tv = TV (
431- - 1 ,
432- name,
433- title,
434- " " ,
435- logo ? : " " ,
436- " " ,
437- uris,
438- 0 ,
439- mapOf (),
440- group,
441- SourceType .UNKNOWN ,
442- listOf (),
443- )
444-
445- if (! tvMap.containsKey(group + name)) {
446- tvMap[group + name] = listOf ()
435+ tv.name = if (name.isNullOrEmpty()) tv.title else name
436+ tv.logo = logRegex.find(info.first())?.groupValues?.get(1 )?.trim() ? : " "
437+ tv.group = groupRegex.find(info.first())?.groupValues?.get(1 )?.trim() ? : " "
438+ } else if (trimmedLine.startsWith(" #EXTVLCOPT:http-" )) {
439+ val keyValue =
440+ trimmedLine.substringAfter(" #EXTVLCOPT:http-" ).split(" =" , limit = 2 )
441+ if (keyValue.size == 2 ) {
442+ tv.headers = if (tv.headers == null ) {
443+ mapOf<String , String >(keyValue[0 ] to keyValue[1 ])
444+ } else {
445+ tv.headers!! .toMutableMap().apply {
446+ this [keyValue[0 ]] = keyValue[1 ]
447+ }
448+ }
449+ }
450+ } else if (! trimmedLine.startsWith(" #" )) {
451+ tv.uris = if (tv.uris.isEmpty()) {
452+ listOf (trimmedLine)
453+ } else {
454+ tv.uris.toMutableList().apply {
455+ this .add(trimmedLine)
456+ }
447457 }
448- tvMap[group + name] = tvMap[group + name]!! + tv
449458 }
450459 }
460+ val key = tv.group + tv.name
461+ if (key.isNotEmpty()) {
462+ tvMap[key] = if (! tvMap.containsKey(key)) listOf (tv) else tvMap[key]!! + tv
463+ }
451464 for ((_, tv) in tvMap) {
452465 val uris = tv.map { t -> t.uris }.flatten()
453466 val t0 = tv[0 ]
@@ -460,15 +473,15 @@ class MainViewModel : ViewModel() {
460473 " " ,
461474 uris,
462475 0 ,
463- mapOf () ,
476+ t0.headers ,
464477 t0.group,
465478 SourceType .UNKNOWN ,
466- listOf (),
479+ emptyList (),
467480 )
468481 l.add(t1)
469482 }
470483 list = l
471- Log .i(TAG , " 导入频道 ${list.size} " )
484+ Log .i(TAG , " 导入频道 ${list.size} $list " )
472485 }
473486
474487 else -> {
@@ -489,11 +502,11 @@ class MainViewModel : ViewModel() {
489502 val title = arr.first().trim()
490503 val uris = arr.drop(1 )
491504
492- if ( ! tvMap.containsKey( group + title)) {
493- tvMap[group + title] = listOf ()
494- tvMap[group + title ] = tvMap[ group + title] !! + group
505+ val key = group + title
506+ if ( ! tvMap.containsKey(key)) {
507+ tvMap[key ] = listOf ( group)
495508 }
496- tvMap[group + title ] = tvMap[group + title ]!! + uris
509+ tvMap[key ] = tvMap[key ]!! + uris
497510 }
498511 }
499512 }
@@ -509,10 +522,10 @@ class MainViewModel : ViewModel() {
509522 " " ,
510523 uris,
511524 0 ,
512- mapOf (),
525+ emptyMap (),
513526 channelGroup,
514527 SourceType .UNKNOWN ,
515- listOf (),
528+ emptyList (),
516529 )
517530
518531 l.add(tv)
0 commit comments