support more than one playlist
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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,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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user