diff --git a/TV Player WPF/PlaylistWorker/M3UParser.cs b/TV Player WPF/PlaylistWorker/M3UParser.cs index 23018f1..fff9939 100644 --- a/TV Player WPF/PlaylistWorker/M3UParser.cs +++ b/TV Player WPF/PlaylistWorker/M3UParser.cs @@ -33,7 +33,7 @@ namespace TV_Player public static async Task DownloadGuideFromWebAsync(string name, string url) { - var fileName = name+"_guide.xml"; + var fileName = name + "_guide.xml"; string programDataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); string filePath = Path.Combine(programDataPath, "TVPlayer", fileName); @@ -48,7 +48,8 @@ namespace TV_Player { return; } - }; + } + ; var channelsContent = string.Empty; if (url.Contains(".gz")) @@ -111,8 +112,8 @@ namespace TV_Player settings.DtdProcessing = DtdProcessing.Parse; settings.Async = true; ProgramGuide channel = null; - - var fileName = groupName+"_guide.xml"; + + var fileName = groupName + "_guide.xml"; string programDataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); string filePath = Path.Combine(programDataPath, "TVPlayer", fileName); @@ -227,7 +228,8 @@ namespace TV_Player { if (TryParseM3ULine(line, out var m3uInfo)) { - playlistItems.Add(m3uInfo); + if (!string.IsNullOrEmpty(m3uInfo?.Url)) + playlistItems.Add(m3uInfo); } } if (line.StartsWith("#EXTM3U")) @@ -260,7 +262,7 @@ namespace TV_Player Number = match.Groups["Number"].Value, TvgID = match.Groups["TvgID"].Value, TvgName = match.Groups["TvgName"].Value, - GroupTitle = string.IsNullOrEmpty(match.Groups["GroupTitle"].Value)? "undefined":match.Groups["GroupTitle"].Value, + GroupTitle = string.IsNullOrEmpty(match.Groups["GroupTitle"].Value) ? "undefined" : match.Groups["GroupTitle"].Value, Logo = match.Groups["Logo"].Value, Name = match.Groups["Name"].Value, Url = match.Groups["URL"].Value diff --git a/TV Player WPF/ProgramsList.xaml b/TV Player WPF/ProgramsList.xaml index 1816e91..6a14e78 100644 --- a/TV Player WPF/ProgramsList.xaml +++ b/TV Player WPF/ProgramsList.xaml @@ -12,7 +12,7 @@ SnapsToDevicePixels="True" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" - VirtualizingStackPanel.CacheLength="5" + VirtualizingStackPanel.CacheLength="20" PreviewMouseDown="ListView_PreviewMouseDown" PreviewMouseUp="ListView_PreviewMouseUp" PreviewMouseMove="ListView_MouseMove" @@ -25,18 +25,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/TV Player WPF/TV Player WPF.csproj b/TV Player WPF/TV Player WPF.csproj index 58aeb7d..3d6bc27 100644 --- a/TV Player WPF/TV Player WPF.csproj +++ b/TV Player WPF/TV Player WPF.csproj @@ -20,13 +20,13 @@ - - + + true - - - + + + diff --git a/TV Player WPF/ViewModels/PlayerViewModel.cs b/TV Player WPF/ViewModels/PlayerViewModel.cs index da3532c..faad24f 100644 --- a/TV Player WPF/ViewModels/PlayerViewModel.cs +++ b/TV Player WPF/ViewModels/PlayerViewModel.cs @@ -162,6 +162,7 @@ namespace TV_Player { try { + if (_currentProgram == null) return; _currentProgramInfo = _currentGuide.Programs.FirstOrDefault(d => d.StartTime <= DateTime.Now && d.EndTime >= DateTime.Now); Programs = _currentGuide.Programs.Skip(_currentGuide.Programs.FindIndex(x=>x.Title==_currentProgramInfo.Title)).Take(7).ToList(); diff --git a/TV Player WPF/ViewModels/PlaylistsGroupViewModel.cs b/TV Player WPF/ViewModels/PlaylistsGroupViewModel.cs index 66a762a..1d0edaa 100644 --- a/TV Player WPF/ViewModels/PlaylistsGroupViewModel.cs +++ b/TV Player WPF/ViewModels/PlaylistsGroupViewModel.cs @@ -23,7 +23,7 @@ namespace TV_Player ItemSelectedCommand = new RelayCommand(OnItemSelected); Programs = TVPlayerViewModel.Instance.PlayListsData.Select(x=>new GroupInfo() { Name =x.Key,Count=0}).ToList(); - TVPlayerViewModel.Instance.TopPanelVisible(true, "Группы"); + TVPlayerViewModel.Instance.TopPanelVisible(true, "Groups"); } private void OnItemSelected() diff --git a/TV Player WPF/ViewModels/ProgramsGroupViewModel.cs b/TV Player WPF/ViewModels/ProgramsGroupViewModel.cs index ce07baf..59e5e8f 100644 --- a/TV Player WPF/ViewModels/ProgramsGroupViewModel.cs +++ b/TV Player WPF/ViewModels/ProgramsGroupViewModel.cs @@ -23,7 +23,7 @@ namespace TV_Player ItemSelectedCommand = new RelayCommand(OnItemSelected); _groupInformationSubscriber = TVPlayerViewModel.Instance.CurrentProgrmsData.GroupsInformation.Subscribe(x => Programs = SettingsModel.HiddenGroups == null ? x : x.Where(g => !SettingsModel.HiddenGroups.Contains(g.Name.ToLower())).ToList()); - TVPlayerViewModel.Instance.TopPanelVisible(true, "Группы"); + TVPlayerViewModel.Instance.TopPanelVisible(true, "Groups"); TVPlayerViewModel.Instance.SetBackButtonAction(new Action(() => { diff --git a/TV Player WPF/ViewModels/ProgramsListViewModel.cs b/TV Player WPF/ViewModels/ProgramsListViewModel.cs index 62a7c69..341d6aa 100644 --- a/TV Player WPF/ViewModels/ProgramsListViewModel.cs +++ b/TV Player WPF/ViewModels/ProgramsListViewModel.cs @@ -1,7 +1,6 @@ using CommunityToolkit.Mvvm.Input; using System.Collections.ObjectModel; using System.Reactive.Linq; -using System.Reactive; using System.Windows.Input; using TV_Player.ViewModels; using System.Windows; @@ -43,7 +42,7 @@ namespace TV_Player TVPlayerViewModel.Instance.CurrentProgrmsData.AllPrograms.ObserveOn(Scheduler.Default) .Subscribe(newPrograms => { - var filteredPrograms = newPrograms.Where(p => p.GroupTitle == groupInfo.Name).ToList(); + var filteredPrograms = newPrograms.Where(p => p.GroupTitle == groupInfo.Name && !string.IsNullOrEmpty(p.Url)).ToList(); Programs.Clear(); const int batchSize = 100; // Define the batch size