From bcc2ba27909c322e28db55cb41746edb4f91e156 Mon Sep 17 00:00:00 2001
From: Vova <3emaster@gmail.com>
Date: Tue, 7 May 2024 14:43:52 +0300
Subject: [PATCH] add channels filter
add hardcoded discovery science channel
---
TV Player WPF/VideoPlayer.xaml | 2 +-
TV Player WPF/ViewModels/M3UParser.cs | 18 ++++++++++++++----
TV Player WPF/ViewModels/ProgramsData.cs | 13 ++++++++++++-
.../ViewModels/ProgramsGroupViewModel.cs | 3 ++-
TV Player WPF/ViewModels/SettingsModel.cs | 9 ++++++---
TVPlayerSetup/TVPlayerSetup.vdproj | 10 +++++-----
6 files changed, 40 insertions(+), 15 deletions(-)
diff --git a/TV Player WPF/VideoPlayer.xaml b/TV Player WPF/VideoPlayer.xaml
index dda4895..8a0512f 100644
--- a/TV Player WPF/VideoPlayer.xaml
+++ b/TV Player WPF/VideoPlayer.xaml
@@ -64,7 +64,7 @@
-
+
diff --git a/TV Player WPF/ViewModels/M3UParser.cs b/TV Player WPF/ViewModels/M3UParser.cs
index 40fb469..639b2cf 100644
--- a/TV Player WPF/ViewModels/M3UParser.cs
+++ b/TV Player WPF/ViewModels/M3UParser.cs
@@ -1,4 +1,5 @@
-using System.Net.Http;
+using System.IO;
+using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.RegularExpressions;
using System.Xml;
@@ -114,8 +115,16 @@ namespace TV_Player
public static async Task<(List programList, string programGuide)> DownloadM3UFromWebAsync(string url)
{
- var fileData=await ReadFile(url);
- // Parse M3U content
+ string fileData;
+ if (Uri.IsWellFormedUriString(url,UriKind.Absolute))
+ {
+ fileData = await ReadFile(url);
+ }
+ else
+ {
+ fileData= File.ReadAllText(url);
+ }
+
return ParseM3UFromString(fileData);
}
private static string[] SplitStringBeforeSeparator(string input, string separator)
@@ -170,7 +179,8 @@ namespace TV_Player
private static bool TryParseM3ULine(string m3uLine, out M3UInfo? info)
{
info = null;
- string pattern = @"#EXTINF:\d+ CUID=""(?.*?)"" number=""(?.*?)"" tvg-id=""(?.*?)"" tvg-name=""(?.*?)"".*?tvg-logo=""(?.*?)"" group-title=""(?.*?)""[^,]*,(?.*)[^\r](?.*)$";
+ //string pattern = @"#EXTINF:\d+ CUID=""(?.*?)"" number=""(?.*?)"" tvg-id=""(?.*?)"" tvg-name=""(?.*?)"".*?tvg-logo=""(?.*?)"" group-title=""(?.*?)""[^,]*,(?.*)[^\r](?.*)$";
+ string pattern = @"#EXTINF:(?:-?\d+)\s+?(?:CUID=""(?.*?)""\s+)?(?:number=""(?.*?)""\s+)?(?:tvg-id=""(?.*?)""\s+)?(?:tvg-name=""(?.*?)""\s+)?(?:tvg-logo=""(?.*?)""\s+)?(?:group-title=""(?.*?)"")[^,]*,(?.*)[^\r](?.*)$";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
Match match = regex.Match(m3uLine);
diff --git a/TV Player WPF/ViewModels/ProgramsData.cs b/TV Player WPF/ViewModels/ProgramsData.cs
index 4f3225e..6672b0b 100644
--- a/TV Player WPF/ViewModels/ProgramsData.cs
+++ b/TV Player WPF/ViewModels/ProgramsData.cs
@@ -19,7 +19,18 @@ namespace TV_Player
{
//string m3uLink = "http://pl.da-tv.vip/a71e77fa/835b3216/tv.m3u";
var result = await M3UParser.DownloadM3UFromWebAsync(m3uLink);
-
+
+
+ // For how hardcoded add custom channel
+ result.programList.Add(new M3UInfo()
+ {
+ GroupTitle = "Познавательные",
+ Name = "Discovery science",
+ Logo = "http://ip.viks.tv/posts/2018-11/1543603622_discovery_science.png",
+ Number = Convert.ToString(result.programList.Count+1),
+ Url= "https://s2.viks.tv/571/index.m3u8?k=1715093638p791i991i86i78S9b9c0d8fefdcO74ff3ed2f4710c95b07"
+ });;
+
programsSubject.OnNext(result.programList);
var groupping = result.programList.GroupBy(item => item.GroupTitle)
diff --git a/TV Player WPF/ViewModels/ProgramsGroupViewModel.cs b/TV Player WPF/ViewModels/ProgramsGroupViewModel.cs
index c9f20ad..95eb914 100644
--- a/TV Player WPF/ViewModels/ProgramsGroupViewModel.cs
+++ b/TV Player WPF/ViewModels/ProgramsGroupViewModel.cs
@@ -7,6 +7,7 @@ namespace TV_Player
public class ProgramsGroupViewModel : ObservableViewModelBase, IDisposable
{
private List _programs;
+
public List Programs
{
get => _programs;
@@ -20,7 +21,7 @@ namespace TV_Player
public ProgramsGroupViewModel()
{
ItemSelectedCommand = new RelayCommand(OnItemSelected);
- _groupInformationSubscriber = TVPlayerViewModel.Instance.PlaylistData.GroupsInformation.Subscribe(x=>Programs = x);
+ _groupInformationSubscriber = TVPlayerViewModel.Instance.PlaylistData.GroupsInformation.Subscribe(x => Programs = SettingsModel.HiddenGroups == null ? x : x.Where(g => !SettingsModel.HiddenGroups.Contains(g.Name.ToLower())).ToList());
TVPlayerViewModel.Instance.TopPanelVisible(true, "Группы");
}
diff --git a/TV Player WPF/ViewModels/SettingsModel.cs b/TV Player WPF/ViewModels/SettingsModel.cs
index 68a3d3d..322ce23 100644
--- a/TV Player WPF/ViewModels/SettingsModel.cs
+++ b/TV Player WPF/ViewModels/SettingsModel.cs
@@ -14,7 +14,7 @@ namespace TV_Player.ViewModels
public static string LastScreen { get; set; }
public static GroupInfo Group { get; set; }
public static M3UInfo Program { get; set; }
-
+ public static string[] HiddenGroups { get; set; }
public static void SaveSetttings()
{
@@ -26,7 +26,8 @@ namespace TV_Player.ViewModels
StartFullScreen,
LastScreen,
Group,
- Program
+ Program,
+ HiddenGroups,
};
// Serialize the object to JSON
@@ -47,7 +48,8 @@ namespace TV_Player.ViewModels
Group = default(GroupInfo),
Program = default(M3UInfo),
StartFromLastScreen = default(bool),
- StartFullScreen = default(bool)
+ StartFullScreen = default(bool),
+ HiddenGroups = default(string[])
};
if (File.Exists(SettingsFilePath))
{
@@ -62,6 +64,7 @@ namespace TV_Player.ViewModels
Program = loadedData.Program;
StartFromLastScreen = loadedData.StartFromLastScreen;
StartFullScreen = loadedData.StartFullScreen;
+ HiddenGroups = loadedData.HiddenGroups;
}
}
}
diff --git a/TVPlayerSetup/TVPlayerSetup.vdproj b/TVPlayerSetup/TVPlayerSetup.vdproj
index ba3cc15..6f4fba3 100644
--- a/TVPlayerSetup/TVPlayerSetup.vdproj
+++ b/TVPlayerSetup/TVPlayerSetup.vdproj
@@ -4,9 +4,9 @@
"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
"IsWebType" = "8:FALSE"
"ProjectName" = "8:TVPlayerSetup"
-"LanguageId" = "3:1049"
-"CodePage" = "3:1251"
-"UILanguageId" = "3:1049"
+"LanguageId" = "3:0"
+"CodePage" = "3:1252"
+"UILanguageId" = "3:0"
"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
@@ -13416,7 +13416,7 @@
}
"MsiBootstrapper"
{
- "LangId" = "3:1049"
+ "LangId" = "3:0"
"RequiresElevation" = "11:FALSE"
}
"Product"
@@ -13424,7 +13424,7 @@
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:TVPlayerSetup"
"ProductCode" = "8:{9C9771D7-D3C6-49DD-9F5C-1B99F0808FE6}"
- "PackageCode" = "8:{17F7FB4A-FCDB-42DC-AD6F-5B58EF7FC484}"
+ "PackageCode" = "8:{734B0943-71FD-40D7-A9FC-97A7146D90CF}"
"UpgradeCode" = "8:{659EC3EB-443A-41ED-BD14-696FEBD8DDBF}"
"AspNetVersion" = "8:2.0.50727.0"
"RestartWWWService" = "11:FALSE"