support more than one playlist

This commit is contained in:
2024-10-22 18:19:33 +03:00
parent 0bff41af12
commit 0abc6971ba
15 changed files with 187 additions and 41 deletions
+2 -1
View File
@@ -5,7 +5,8 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TV_Player" xmlns:local="clr-namespace:TV_Player"
mc:Ignorable="d" WindowStyle="None" WindowState="{Binding CurrentWindowState}" mc:Ignorable="d" WindowStyle="None" WindowState="{Binding CurrentWindowState}"
Title="TV" Height="450" Width="800"> Title="TV" Height="450" Width="800"
KeyDown="UserControl_KeyDown">
<Window.Resources> <Window.Resources>
<local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverterKey"/> <local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverterKey"/>
</Window.Resources> </Window.Resources>
+9
View File
@@ -1,4 +1,5 @@
using System.Windows; using System.Windows;
using System.Windows.Input;
namespace TV_Player namespace TV_Player
{ {
@@ -8,5 +9,13 @@ namespace TV_Player
{ {
InitializeComponent(); InitializeComponent();
} }
private void UserControl_KeyDown(object sender, KeyEventArgs e)
{
if (DataContext is MainViewModel viewModel)
{
viewModel.OnKeyDownCommand.Execute(e);
}
}
} }
} }
+5 -5
View File
@@ -31,11 +31,11 @@ namespace TV_Player
public static class M3UParser public static class M3UParser
{ {
public static async Task DownloadGuideFromWebAsync(string url) public static async Task DownloadGuideFromWebAsync(string name, string url)
{ {
var fileName = "guide.xml"; var fileName = name+"_guide.xml";
string programDataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); string programDataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string filePath = Path.Combine(programDataPath, "TV_Player", fileName); string filePath = Path.Combine(programDataPath, "TVPlayer", fileName);
if (File.Exists(filePath)) if (File.Exists(filePath))
@@ -247,8 +247,8 @@ namespace TV_Player
private static bool TryParseM3ULine(string m3uLine, out M3UInfo? info) private static bool TryParseM3ULine(string m3uLine, out M3UInfo? info)
{ {
info = null; info = null;
//string pattern = @"#EXTINF:\d+ CUID=""(?<CUID>.*?)"" number=""(?<Number>.*?)"" tvg-id=""(?<TvgID>.*?)"" tvg-name=""(?<TvgName>.*?)"".*?tvg-logo=""(?<Logo>.*?)"" group-title=""(?<GroupTitle>.*?)""[^,]*,(?<Name>.*)[^\r](?<URL>.*)$"; string pattern = @"#EXTINF:(-?\d+)\s+?(?:timeshift=""(?<Timeshift>.*?)""\s+)?(?:catchup-days=""(?<CatchupDays>.*?)""\s+)?(?:catchup-type=""(?<CatchupType>.*?)""\s+)?(?:CUID=""(?<CUID>.*?)""\s+)?(?:number=""(?<Number>.*?)""\s+)?(?:tvg-id=""(?<TvgID>.*?)""\s+)?(?:tvg-name=""(?<TvgName>.*?)""\s+)?(?:group-title=""(?<GroupTitle>.*?)""\s+)?(?:tvg-logo=""(?<Logo>.*?)""\s*)?(?:group-title=""(?<GroupTitle>.*?)"")?(?:,(?<Name>.*?)\s*\r?\n(?<URL>.*))";
string pattern = @"#EXTINF:(-?\d+)\s+?(?:timeshift=""(?<Timeshift>.*?)""\s+)?(?:catchup-days=""(?<CatchupDays>.*?)""\s+)?(?:catchup-type=""(?<CatchupType>.*?)""\s+)?(?:CUID=""(?<CUID>.*?)""\s+)?(?:number=""(?<Number>.*?)""\s+)?(?:tvg-id=""(?<TvgID>.*?)""\s+)?(?:tvg-name=""(?<TvgName>.*?)""\s+)?(?:group-title=""(?<GroupTitle>.*?)""\s+)?(?:tvg-logo=""(?<Logo>.*?)"")?,(?<Name>.*?)\s*\r?\n(?<URL>.*)"; //string pattern = @"#EXTINF:(-?\d+)\s+?(?:timeshift=""(?<Timeshift>.*?)""\s+)?(?:catchup-days=""(?<CatchupDays>.*?)""\s+)?(?:catchup-type=""(?<CatchupType>.*?)""\s+)?(?:CUID=""(?<CUID>.*?)""\s+)?(?:number=""(?<Number>.*?)""\s+)?(?:tvg-id=""(?<TvgID>.*?)""\s+)?(?:tvg-name=""(?<TvgName>.*?)""\s+)?(?:group-title=""(?<GroupTitle>.*?)""\s+)?(?:tvg-logo=""(?<Logo>.*?)"")?,(?<Name>.*?)\s*\r?\n(?<URL>.*)";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase); Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
Match match = regex.Match(m3uLine); Match match = regex.Match(m3uLine);
+30
View File
@@ -0,0 +1,30 @@
<UserControl x:Class="TV_Player.PlaylistsGroup"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:tv_player="clr-namespace:TV_Player"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid VerticalAlignment="Center">
<ListView ItemsSource="{Binding Programs}" Background="Transparent"
SelectionMode="Single" Style="{StaticResource ListBoxView}"
SelectedItem="{Binding SelectedItem}" BorderThickness="0"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto"
SelectionChanged="ListBox_SelectionChanged">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="4" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<Viewbox HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<tv_player:GroupButton Style="{DynamicResource GroupButton}" GroupName="{Binding Name}" />
</Viewbox>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</UserControl>
+23
View File
@@ -0,0 +1,23 @@
using System.Windows.Controls;
namespace TV_Player
{
/// <summary>
/// Interaction logic for ProgramsGroupGrid.xaml
/// </summary>
public partial class PlaylistsGroup : UserControl
{
public PlaylistsGroup()
{
InitializeComponent();
}
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (DataContext is PlaylistsGroupViewModel viewModel)
{
viewModel.ItemSelectedCommand.Execute(null);
}
}
}
}
+5 -1
View File
@@ -6,14 +6,18 @@
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"> d:DesignHeight="450" d:DesignWidth="800">
<StackPanel x:Name="groupsGrid" VerticalAlignment="Center"> <StackPanel x:Name="groupsGrid" VerticalAlignment="Center">
<!--<StackPanel x:Name="AddPlayList" Visibility="Collapsed">-->
<Label Margin="10" Foreground="White" FontSize="25" FontWeight="Bold" FontFamily="Arial">Адрес плейлиста</Label> <Label Margin="10" Foreground="White" FontSize="25" FontWeight="Bold" FontFamily="Arial">Адрес плейлиста</Label>
<TextBox Margin="10" Style="{StaticResource TextBox}" HorizontalAlignment="Stretch" Text="{Binding PlaylistURL}"></TextBox> <TextBox Margin="10" Style="{StaticResource TextBox}" HorizontalAlignment="Stretch" Text="{Binding PlaylistURL}"></TextBox>
<Label Margin="10" Foreground="White" FontSize="25" FontWeight="Bold" FontFamily="Arial">Название</Label>
<TextBox Margin="10" Style="{StaticResource TextBox}" HorizontalAlignment="Stretch" Text="{Binding PlaylistName}"></TextBox>
<Button Grid.Column="1" Height="70" Width="70" Margin="10,0,50,0" Style="{DynamicResource ButtonConfirm}" Command="{Binding BackCommand}" />
<!--</StackPanel>-->
<CheckBox Margin="10" Foreground="White" FontSize="25" IsChecked="{Binding StartFullScreen}">Откывать во весь экран</CheckBox> <CheckBox Margin="10" Foreground="White" FontSize="25" IsChecked="{Binding StartFullScreen}">Откывать во весь экран</CheckBox>
<CheckBox Margin="10" Foreground="White" FontSize="25" IsChecked="{Binding StartLastScreen}">Запоминать последний выбор</CheckBox> <CheckBox Margin="10" Foreground="White" FontSize="25" IsChecked="{Binding StartLastScreen}">Запоминать последний выбор</CheckBox>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Grid.Column="1" Height="70" Width="70" Margin="10,0,50,0" Style="{DynamicResource ButtonBack}" Command="{Binding BackCommand}" /> <Button Grid.Column="1" Height="70" Width="70" Margin="10,0,50,0" Style="{DynamicResource ButtonBack}" Command="{Binding BackCommand}" />
<Button HorizontalAlignment="Center" Height="70" Width="70" Style="{DynamicResource ButtonConfirm}" Command="{Binding SaveCommand}" /> <Button HorizontalAlignment="Center" Height="70" Width="70" Style="{DynamicResource ButtonConfirm}" Command="{Binding SaveCommand}" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</UserControl> </UserControl>
+14 -1
View File
@@ -36,6 +36,7 @@ namespace TV_Player
get => _currentWindowState; get => _currentWindowState;
set => SetProperty(ref _currentWindowState, value); set => SetProperty(ref _currentWindowState, value);
} }
public ICommand OnKeyDownCommand { get; }
public ICommand FullscreenCommand { get; } public ICommand FullscreenCommand { get; }
public ICommand CloseAppCommand { get; } public ICommand CloseAppCommand { get; }
@@ -47,7 +48,7 @@ namespace TV_Player
public MainViewModel() public MainViewModel()
{ {
OnKeyDownCommand = new RelayCommand<KeyEventArgs>(OnKeyDown);
BackCommand = new RelayCommand(OnButtonBackClick); BackCommand = new RelayCommand(OnButtonBackClick);
FullscreenCommand = new RelayCommand(OnFullSctreenButtonClick); FullscreenCommand = new RelayCommand(OnFullSctreenButtonClick);
SettingsCommand = new RelayCommand(OnSettingsButtonClick); SettingsCommand = new RelayCommand(OnSettingsButtonClick);
@@ -81,5 +82,17 @@ namespace TV_Player
{ {
TVPlayerViewModel.Instance.ShowSettingsScreen(); TVPlayerViewModel.Instance.ShowSettingsScreen();
} }
private void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
Environment.Exit(0);
}
if (e.Key == Key.Back)
{
ButtonBackAction?.Invoke();
}
}
} }
} }
+3 -3
View File
@@ -98,7 +98,7 @@ namespace TV_Player
ShowProgramListCommand = new RelayCommand(ShowProgramList); ShowProgramListCommand = new RelayCommand(ShowProgramList);
ProgramGuideVisible = false; ProgramGuideVisible = false;
_programSubscriber = TVPlayerViewModel.Instance.PlaylistData.AllPrograms.Subscribe(x => _programSubscriber = TVPlayerViewModel.Instance.CurrentProgrmsData.AllPrograms.Subscribe(x =>
{ {
_programs = x.Where(p => p.GroupTitle == _currentProgram.GroupTitle).ToList(); _programs = x.Where(p => p.GroupTitle == _currentProgram.GroupTitle).ToList();
_currentProgramIndex = _programs.Select((program, index) => new { program, index }) _currentProgramIndex = _programs.Select((program, index) => new { program, index })
@@ -116,11 +116,11 @@ namespace TV_Player
TopPanelTitle = _currentProgram.Name; TopPanelTitle = _currentProgram.Name;
SourceUrlChangedEvent?.Invoke(_currentProgram.Url); SourceUrlChangedEvent?.Invoke(_currentProgram.Url);
_programGuideDisposable = TVPlayerViewModel.Instance.PlaylistData.ProgramGuideInfo.Subscribe(async x => _programGuideDisposable = TVPlayerViewModel.Instance.CurrentProgrmsData.ProgramGuideInfo.Subscribe(async x =>
{ {
try try
{ {
_currentGuide = await TVPlayerViewModel.Instance.PlaylistData.GetGuideByProgram(_currentProgram.TvgID); _currentGuide = await TVPlayerViewModel.Instance.CurrentProgrmsData.GetGuideByProgram(_currentProgram.TvgID);
UpdateScreenInfo(); UpdateScreenInfo();
@@ -0,0 +1,39 @@
using CommunityToolkit.Mvvm.Input;
using System.Windows.Input;
using TV_Player.ViewModels;
namespace TV_Player
{
public class PlaylistsGroupViewModel : ObservableViewModelBase, IDisposable
{
private List<GroupInfo> _programs;
public List<GroupInfo> Programs
{
get => _programs;
set => SetProperty(ref _programs, value);
}
public GroupInfo SelectedItem { get; set; }
public ICommand ItemSelectedCommand { get; }
public IDisposable _groupInformationSubscriber;
public PlaylistsGroupViewModel()
{
ItemSelectedCommand = new RelayCommand(OnItemSelected);
Programs = TVPlayerViewModel.Instance.PlayListsData.Select(x=>new GroupInfo() { Name =x.Key,Count=0}).ToList();
TVPlayerViewModel.Instance.TopPanelVisible(true, "Группы");
}
private void OnItemSelected()
{
TVPlayerViewModel.Instance.ShowProgramsGroupScreen(SelectedItem.Name);
}
public void Dispose()
{
_groupInformationSubscriber.Dispose();
}
}
}
+8 -11
View File
@@ -12,11 +12,12 @@ namespace TV_Player
public IObservable<List<GroupInfo>> GroupsInformation => groupsSubject; public IObservable<List<GroupInfo>> GroupsInformation => groupsSubject;
public IObservable<Unit> ProgramGuideInfo => programGuideSubject; public IObservable<Unit> ProgramGuideInfo => programGuideSubject;
public ProgramsData() public ProgramsData(string name,string playlistURL)
{ {
Task.Run(() => GetPrograms(name,playlistURL));
} }
private async Task GetPrograms(string m3uLink) private async Task GetPrograms(string name,string m3uLink)
{ {
//string m3uLink = "http://pl.da-tv.vip/a71e77fa/835b3216/tv.m3u"; //string m3uLink = "http://pl.da-tv.vip/a71e77fa/835b3216/tv.m3u";
var result = await M3UParser.DownloadM3UFromWebAsync(m3uLink); var result = await M3UParser.DownloadM3UFromWebAsync(m3uLink);
@@ -28,7 +29,7 @@ namespace TV_Player
.ToList(); .ToList();
groupsSubject.OnNext(groupping); groupsSubject.OnNext(groupping);
await Task.Run(() => GetProgramGuide(result.programGuide)); await Task.Run(() => GetProgramGuide(name,result.programGuide));
} }
public Task<ProgramGuide> GetGuideByProgram(string channelID) public Task<ProgramGuide> GetGuideByProgram(string channelID)
@@ -36,16 +37,12 @@ namespace TV_Player
return M3UParser.ParseEpg(channelID); return M3UParser.ParseEpg(channelID);
} }
private async Task GetProgramGuide(string guideLink) private async Task GetProgramGuide(string name, string guideLink)
{ {
//guideLink = "http://epg.da-tv.vip/107-light.xml"; //guideLink = "http://epg.da-tv.vip/107-light.xml";
await M3UParser.DownloadGuideFromWebAsync(guideLink); await M3UParser.DownloadGuideFromWebAsync(name,guideLink);
programGuideSubject.OnNext(Unit.Default); programGuideSubject.OnNext(Unit.Default);
} }
internal void GetData(string playlistURL)
{
Task.Run(() => GetPrograms(playlistURL));
}
} }
} }
@@ -21,9 +21,14 @@ namespace TV_Player
public ProgramsGroupViewModel() public ProgramsGroupViewModel()
{ {
ItemSelectedCommand = new RelayCommand(OnItemSelected); ItemSelectedCommand = new RelayCommand(OnItemSelected);
_groupInformationSubscriber = TVPlayerViewModel.Instance.PlaylistData.GroupsInformation.Subscribe(x => Programs = SettingsModel.HiddenGroups == null ? x : x.Where(g => !SettingsModel.HiddenGroups.Contains(g.Name.ToLower())).ToList()); _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, "Группы");
TVPlayerViewModel.Instance.SetBackButtonAction(new Action(() =>
{
TVPlayerViewModel.Instance.ShowPlaylistsGroupScreen();
}));
} }
private void OnItemSelected() private void OnItemSelected()
@@ -17,15 +17,15 @@ namespace TV_Player
public ICommand ItemSelectedCommand { get; } public ICommand ItemSelectedCommand { get; }
private IDisposable _programSubscriber; private IDisposable _programSubscriber;
public ProgramsListViewModel(GroupInfo groupInfo) public ProgramsListViewModel(string playlistName,GroupInfo groupInfo)
{ {
TVPlayerViewModel.Instance.TopPanelVisible(true, groupInfo.Name); TVPlayerViewModel.Instance.TopPanelVisible(true, groupInfo.Name);
ItemSelectedCommand = new RelayCommand(OnItemSelected); ItemSelectedCommand = new RelayCommand(OnItemSelected);
_programSubscriber = TVPlayerViewModel.Instance.PlaylistData.AllPrograms.Subscribe(x => Programs = x.Where(p => p.GroupTitle == groupInfo.Name).ToList()); _programSubscriber = TVPlayerViewModel.Instance.CurrentProgrmsData.AllPrograms.Subscribe(x => Programs = x.Where(p => p.GroupTitle == groupInfo.Name).ToList());
TVPlayerViewModel.Instance.SetBackButtonAction(new Action(() => TVPlayerViewModel.Instance.SetBackButtonAction(new Action(() =>
{ {
TVPlayerViewModel.Instance.ShowProgramsGroupScreen(); TVPlayerViewModel.Instance.ShowProgramsGroupScreen(playlistName);
})); }));
} }
+5 -5
View File
@@ -5,10 +5,10 @@ namespace TV_Player.ViewModels
{ {
public static class SettingsModel public static class SettingsModel
{ {
private static readonly string AppDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TVPlayer"); private static readonly string AppDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "TVPlayer");
private static readonly string SettingsFilePath = Path.Combine(AppDataFolder, "settings.json"); private static readonly string SettingsFilePath = Path.Combine(AppDataFolder, "settings.json");
public static string PlaylistURL { get; set; } public static Dictionary<string,string> Playlists { get; set; }
public static bool StartFullScreen { get; set; } public static bool StartFullScreen { get; set; }
public static bool StartFromLastScreen { get; set; } public static bool StartFromLastScreen { get; set; }
public static string LastScreen { get; set; } public static string LastScreen { get; set; }
@@ -21,7 +21,7 @@ namespace TV_Player.ViewModels
// Create an anonymous object to hold the properties // Create an anonymous object to hold the properties
var dataToSerialize = new var dataToSerialize = new
{ {
PlaylistURL, Playlists,
StartFromLastScreen, StartFromLastScreen,
StartFullScreen, StartFullScreen,
LastScreen, LastScreen,
@@ -43,7 +43,7 @@ namespace TV_Player.ViewModels
{ {
var loadedData = new var loadedData = new
{ {
PlaylistURL = default(string), Playlists = default(Dictionary<string,string>),
LastScreen = default(string), LastScreen = default(string),
Group = default(GroupInfo), Group = default(GroupInfo),
Program = default(M3UInfo), Program = default(M3UInfo),
@@ -58,7 +58,7 @@ namespace TV_Player.ViewModels
loadedData = JsonConvert.DeserializeAnonymousType(json, loadedData); loadedData = JsonConvert.DeserializeAnonymousType(json, loadedData);
} }
// Assign the values to the properties // Assign the values to the properties
PlaylistURL = loadedData.PlaylistURL; Playlists = loadedData.Playlists;
LastScreen = loadedData.LastScreen; LastScreen = loadedData.LastScreen;
Group = loadedData.Group; Group = loadedData.Group;
Program = loadedData.Program; Program = loadedData.Program;
@@ -38,7 +38,7 @@ namespace TV_Player.ViewModels
StartFullScreen = SettingsModel.StartFullScreen; StartFullScreen = SettingsModel.StartFullScreen;
StartLastScreen = SettingsModel.StartFromLastScreen; StartLastScreen = SettingsModel.StartFromLastScreen;
PlaylistURL = SettingsModel.PlaylistURL; // PlaylistURL = SettingsModel.PlaylistURL;
} }
private void OnBackCommand() private void OnBackCommand()
@@ -50,7 +50,7 @@ namespace TV_Player.ViewModels
{ {
SettingsModel.StartFullScreen = StartFullScreen; SettingsModel.StartFullScreen = StartFullScreen;
SettingsModel.StartFromLastScreen = StartLastScreen; SettingsModel.StartFromLastScreen = StartLastScreen;
SettingsModel.PlaylistURL = PlaylistURL; //SettingsModel.PlaylistURL = PlaylistURL;
SettingsModel.SaveSetttings(); SettingsModel.SaveSetttings();
TVPlayerViewModel.Instance.InitializeTVWithData(); TVPlayerViewModel.Instance.InitializeTVWithData();
+33 -8
View File
@@ -5,10 +5,15 @@ namespace TV_Player.ViewModels
public class TVPlayerViewModel : IDisposable public class TVPlayerViewModel : IDisposable
{ {
private readonly MainViewModel _mainViewModel; private readonly MainViewModel _mainViewModel;
public ProgramsData PlaylistData { get; private set; }
public ProgramsData CurrentProgrmsData { get; private set; }
public Dictionary<string,ProgramsData> PlayListsData { get; private set; }
public Action ButtonBackAction { get; set; } public Action ButtonBackAction { get; set; }
private string _currentPlaylistName;
private static TVPlayerViewModel? _instance; private static TVPlayerViewModel? _instance;
public static TVPlayerViewModel Instance public static TVPlayerViewModel Instance
{ {
@@ -22,7 +27,7 @@ namespace TV_Player.ViewModels
public TVPlayerViewModel() public TVPlayerViewModel()
{ {
PlaylistData = new ProgramsData(); PlayListsData=new Dictionary<string,ProgramsData>();
_mainViewModel = new MainViewModel(); _mainViewModel = new MainViewModel();
var mainWindow = new MainWindow(); var mainWindow = new MainWindow();
@@ -37,15 +42,20 @@ namespace TV_Player.ViewModels
public void InitializeTVWithData() public void InitializeTVWithData()
{ {
if (!string.IsNullOrEmpty(SettingsModel.PlaylistURL)) if (SettingsModel.Playlists!=null && SettingsModel.Playlists.Any())
{ {
foreach(var playlist in SettingsModel.Playlists)
{
PlayListsData.Add(playlist.Key, new ProgramsData(playlist.Key,playlist.Value));
}
if (SettingsModel.StartFullScreen) if (SettingsModel.StartFullScreen)
FullScreenToggle(); FullScreenToggle();
PlaylistData.GetData(SettingsModel.PlaylistURL);
if (SettingsModel.StartFromLastScreen) if (SettingsModel.StartFromLastScreen)
SelectScreen(); SelectScreen();
else else
ShowProgramsGroupScreen(); ShowPlaylistsGroupScreen();
} }
else else
{ {
@@ -64,13 +74,28 @@ namespace TV_Player.ViewModels
ShowPlayerScreen(SettingsModel.Program); ShowPlayerScreen(SettingsModel.Program);
break; break;
default: default:
ShowProgramsGroupScreen(); ShowPlaylistsGroupScreen();
break; break;
} }
} }
public void ShowProgramsGroupScreen() public void ShowPlaylistsGroupScreen()
{ {
var vm = new PlaylistsGroupViewModel();
var control = new PlaylistsGroup();
control.DataContext = vm;
SettingsModel.LastScreen = nameof(ProgramsGroupViewModel);
SetPageContext(control, vm);
}
public void ShowProgramsGroupScreen(string groupName)
{
var selectedData = PlayListsData.First(x => x.Key == groupName);
_currentPlaylistName = selectedData.Key;
CurrentProgrmsData = selectedData.Value;
var vm = new ProgramsGroupViewModel(); var vm = new ProgramsGroupViewModel();
var control = new ProgramsGroupGrid(); var control = new ProgramsGroupGrid();
@@ -83,7 +108,7 @@ namespace TV_Player.ViewModels
public void ShowProgramsListScreen(GroupInfo group) public void ShowProgramsListScreen(GroupInfo group)
{ {
SettingsModel.Group = group; SettingsModel.Group = group;
var programListViewModel = new ProgramsListViewModel(group); var programListViewModel = new ProgramsListViewModel(_currentPlaylistName,group);
var conrtrol = new ProgramsList(); var conrtrol = new ProgramsList();
SettingsModel.LastScreen = nameof(ProgramsListViewModel); SettingsModel.LastScreen = nameof(ProgramsListViewModel);
SetPageContext(conrtrol, programListViewModel); SetPageContext(conrtrol, programListViewModel);