@@ -48,12 +48,9 @@ public Task<Stream> GetListingsStream(string url, CancellationToken cancellation
48
48
private List < M3UChannel > GetChannels ( StreamReader reader , string urlHash , string channelIdPrefix )
49
49
{
50
50
var channels = new List < M3UChannel > ( ) ;
51
-
52
- string channnelName = null ;
53
- string channelNumber = null ;
54
51
string line ;
55
- string imageUrl = null ;
56
- while ( ( line = reader . ReadLine ( ) ) != null )
52
+ string extInf = "" ;
53
+ while ( ( line = reader . ReadLine ( ) ) != null )
57
54
{
58
55
line = line . Trim ( ) ;
59
56
if ( string . IsNullOrWhiteSpace ( line ) )
@@ -68,30 +65,49 @@ private List<M3UChannel> GetChannels(StreamReader reader, string urlHash, string
68
65
69
66
if ( line . StartsWith ( "#EXTINF:" , StringComparison . OrdinalIgnoreCase ) )
70
67
{
71
- line = line . Substring ( 8 ) ;
72
- _logger . Info ( "Found m3u channel: {0}" , line ) ;
73
- var parts = line . Split ( new [ ] { ',' } , 2 ) ;
74
- channelNumber = parts [ 0 ] . Trim ( ) . Split ( ' ' ) [ 0 ] ?? "0" ;
75
- channnelName = FindProperty ( "tvg-name" , line , parts [ 1 ] ) ;
76
- imageUrl = FindProperty ( "tvg-logo" , line , null ) ;
68
+ extInf = line . Substring ( 8 ) . Trim ( ) ;
69
+ _logger . Info ( "Found m3u channel: {0}" , extInf ) ;
77
70
}
78
- else if ( ! string . IsNullOrWhiteSpace ( channelNumber ) )
79
- {
80
- channels . Add ( new M3UChannel
81
- {
82
- Name = channnelName ,
83
- Number = channelNumber ,
84
- Id = channelIdPrefix + urlHash + line . GetMD5 ( ) . ToString ( "N" ) ,
85
- ImageUrl = imageUrl
86
- } ) ;
87
-
88
- imageUrl = null ;
89
- channelNumber = null ;
90
- channnelName = null ;
71
+ else if ( ! string . IsNullOrWhiteSpace ( extInf ) )
72
+ {
73
+ var channel = GetChannelnfo ( extInf ) ;
74
+ channel . Id = channelIdPrefix + urlHash + line . GetMD5 ( ) . ToString ( "N" ) ;
75
+ channel . Path = line ;
76
+ channels . Add ( channel ) ;
77
+ extInf = "" ;
91
78
}
92
79
}
93
80
return channels ;
94
81
}
82
+ public M3UChannel GetChannelnfo ( string extInf )
83
+ {
84
+ var titleIndex = extInf . LastIndexOf ( ',' ) ;
85
+ var channel = new M3UChannel ( ) ;
86
+
87
+ channel . Number = extInf . Trim ( ) . Split ( ' ' ) [ 0 ] ?? "0" ;
88
+ channel . Name = extInf . Substring ( titleIndex + 1 ) ;
89
+
90
+ if ( channel . Number == "-1" ) { channel . Number = "0" ; }
91
+
92
+ //Check for channel number with the format from SatIp
93
+ int number ;
94
+ var numberIndex = channel . Name . IndexOf ( '.' ) ;
95
+ if ( numberIndex > 0 )
96
+ {
97
+ if ( int . TryParse ( channel . Name . Substring ( 0 , numberIndex ) , out number ) )
98
+ {
99
+ channel . Number = number . ToString ( ) ;
100
+ channel . Name = channel . Name . Substring ( numberIndex + 1 ) ;
101
+ }
102
+ }
103
+ channel . ImageUrl = FindProperty ( "tvg-logo" , extInf , null ) ;
104
+ channel . Number = FindProperty ( "tvg-id" , extInf , channel . Number ) ;
105
+ channel . Number = FindProperty ( "channel-id" , extInf , channel . Number ) ;
106
+ channel . Name = FindProperty ( "tvg-name" , extInf , channel . Name ) ;
107
+ channel . Name = FindProperty ( "tvg-id" , extInf , channel . Name ) ;
108
+ return channel ;
109
+
110
+ }
95
111
public string FindProperty ( string property , string properties , string defaultResult = "" )
96
112
{
97
113
var reg = new Regex ( @"([a-z0-9\-_]+)=\""([^""]+)\""" , RegexOptions . IgnoreCase ) ;
0 commit comments