From 2ba75182b60ab0009270ab56da1d5380912a6bbf Mon Sep 17 00:00:00 2001 From: Kanani Nirav Date: Thu, 15 Aug 2024 18:44:24 +0900 Subject: [PATCH] [Modify/Add] Update Channel Source And Some Refactoring --- README.md | 6 ++-- assets/images/tv-icon.png | Bin 0 -> 16084 bytes lib/provider/channels_provider.dart | 46 +++++++++++++++++++--------- lib/screens/home.dart | 4 +-- pubspec.yaml | 6 ++-- 5 files changed, 40 insertions(+), 22 deletions(-) create mode 100644 assets/images/tv-icon.png diff --git a/README.md b/README.md index c632392..c658b4f 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ Watch 500+ live india TV channels with **IPTV Android Application** ## [Download Latest APK From Release](https://github.com/kananinirav/iptv-indian-app/releases/) -- [Mobile APK Download Link](https://github.com/kananinirav/Indian-IPTV-App/releases/download/v2.0.0/iptv-mobile.apk) -- [Android TV APK Download Link](https://github.com/kananinirav/Indian-IPTV-App/releases/download/v2.0.0/iptv-android-tv.apk) +- [Mobile APK Download Link](https://github.com/kananinirav/Indian-IPTV-App/releases/download/v2.1.0/iptv-mobile.apk) +- [Android TV APK Download Link](https://github.com/kananinirav/Indian-IPTV-App/releases/download/v2.1.0/iptv-android-tv.apk) [**Watch Sports TV Channels Online With SPORTS PULSE TV**](https://sports-tv-channels.click/) @@ -44,7 +44,7 @@ Watch 500+ live india TV channels with **IPTV Android Application** ## Credits -[Channel Source](https://github.com/aniketda/iptv2050) +[Channel Source](https://github.com/FunctionError/PiratesTv) ## Star History diff --git a/assets/images/tv-icon.png b/assets/images/tv-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bc1c280b56ef6438081b727f3b56d67c46e44c53 GIT binary patch literal 16084 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 channels = []; List filteredChannels = []; String sourceUrl = - 'https://raw.githubusercontent.com/aniketda/iptv2050/main/iptv'; + 'https://raw.githubusercontent.com/FunctionError/PiratesTv/main/combined_playlist.m3u'; Future> fetchM3UFile() async { final response = await http.get(Uri.parse(sourceUrl)); @@ -16,30 +16,25 @@ class ChannelsProvider with ChangeNotifier { List lines = fileText.split('\n'); String? name; - String? logoUrl; + String logoUrl = getDefaultLogoUrl(); String? streamUrl; - for (int i = 0; i < lines.length; i++) { - String line = lines[i]; + for (String line in lines) { if (line.startsWith('#EXTINF:')) { - List parts = line.split(','); - name = parts[1]; - List logoParts = parts[0].split('"'); - logoUrl = logoParts.length > 3 - ? logoParts[3] - : 'https://fastly.picsum.photos/id/125/536/354.jpg?hmac=EYT3s6VXrAoggrr4fXsOIIcQ3Grc13fCmXkqcE2FusY'; + name = extractChannelName(line); + logoUrl = extractLogoUrl(line) ?? getDefaultLogoUrl(); } else if (line.isNotEmpty) { streamUrl = line; - if (name != null && name.isNotEmpty) { + if (name != null) { channels.add(Channel( name: name, - logoUrl: logoUrl ?? - 'https://fastly.picsum.photos/id/928/200/200.jpg?hmac=5MQxbf-ANcu87ZaOn5sOEObpZ9PpJfrOImdC7yOkBlg', + logoUrl: logoUrl, streamUrl: streamUrl, )); } + // Reset for next channel name = null; - logoUrl = null; + logoUrl = getDefaultLogoUrl(); streamUrl = null; } } @@ -49,6 +44,29 @@ class ChannelsProvider with ChangeNotifier { } } + String getDefaultLogoUrl() { + return 'assets/images/tv-icon.png'; + } + + String? extractChannelName(String line) { + List parts = line.split(','); + return parts.last; + } + + String? extractLogoUrl(String line) { + List parts = line.split('"'); + if (parts.length > 1 && isValidUrl(parts[1])) { + return parts[1]; + } else if (parts.length > 5 && isValidUrl(parts[5])) { + return parts[5]; + } + return null; + } + + bool isValidUrl(String url) { + return url.startsWith('https') || url.startsWith('http'); + } + List filterChannels(String query) { filteredChannels = channels .where((channel) => diff --git a/lib/screens/home.dart b/lib/screens/home.dart index e32d798..5c88ba2 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -91,8 +91,8 @@ class _HomeState extends State { height: 50, fit: BoxFit.contain, errorBuilder: (context, error, stackTrace) { - return Image.network( - 'https://fastly.picsum.photos/id/125/536/354.jpg?hmac=EYT3s6VXrAoggrr4fXsOIIcQ3Grc13fCmXkqcE2FusY', + return Image.asset( + 'assets/images/tv-icon.png', width: 50, height: 50, fit: BoxFit.contain, diff --git a/pubspec.yaml b/pubspec.yaml index 4635d1f..b4e8b1f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.1.0+2 +version: 2.1.0+3 environment: sdk: '>=3.2.1 <4.0.0' @@ -65,8 +65,8 @@ flutter: uses-material-design: true # To add assets to your application, add an assets section, like this: - # assets: - # - assets/images/no-image.png + assets: + - assets/images/tv-icon.png # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware