@@ -53,7 +53,6 @@ namespace FoxTube
|
|||||||
|
|
||||||
public event ObjectEventHandler SetFullSize;
|
public event ObjectEventHandler SetFullSize;
|
||||||
public event ObjectEventHandler NextClicked;
|
public event ObjectEventHandler NextClicked;
|
||||||
public Button Next => next;
|
|
||||||
|
|
||||||
bool isMuxed = false;
|
bool isMuxed = false;
|
||||||
bool audioReady = false;
|
bool audioReady = false;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" IgnorableNamespaces="uap mp uap3">
|
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" IgnorableNamespaces="uap mp uap3">
|
||||||
<Identity Name="foxtube-5d1cba1f-d7d5-472b-acb7-beb360bab268" Publisher="CN=Michael Gordeev" Version="0.2.1812.0" />
|
<Identity Name="foxtube-5d1cba1f-d7d5-472b-acb7-beb360bab268" Publisher="CN=XFox" Version="1.0.0.0" />
|
||||||
<mp:PhoneIdentity PhoneProductId="5d1cba1f-d7d5-472b-acb7-beb360bab268" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
<mp:PhoneIdentity PhoneProductId="5d1cba1f-d7d5-472b-acb7-beb360bab268" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
||||||
<Properties>
|
<Properties>
|
||||||
<DisplayName>FoxTube</DisplayName>
|
<DisplayName>FoxTube</DisplayName>
|
||||||
|
|||||||
@@ -392,13 +392,6 @@ namespace FoxTube
|
|||||||
nav.IsBackEnabled = true;
|
nav.IsBackEnabled = true;
|
||||||
else
|
else
|
||||||
nav.IsBackEnabled = false;
|
nav.IsBackEnabled = false;
|
||||||
|
|
||||||
if (content.SourcePageType == typeof(Home) || content.SourcePageType == typeof(Settings) || content.SourcePageType == typeof(Subscriptions))
|
|
||||||
{
|
|
||||||
nav.ExpandedModeThresholdWidth = 1008;
|
|
||||||
if (nav.DisplayMode == NavigationViewDisplayMode.Expanded)
|
|
||||||
nav.IsPaneOpen = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MaximizeVideo()
|
public void MaximizeVideo()
|
||||||
@@ -410,9 +403,6 @@ namespace FoxTube
|
|||||||
videoPlaceholder.Margin = new Thickness(0);
|
videoPlaceholder.Margin = new Thickness(0);
|
||||||
|
|
||||||
nav.IsBackEnabled = true;
|
nav.IsBackEnabled = true;
|
||||||
|
|
||||||
nav.ExpandedModeThresholdWidth = short.MaxValue;
|
|
||||||
nav.IsPaneOpen = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Fullscreen(bool on)
|
public void Fullscreen(bool on)
|
||||||
@@ -451,6 +441,7 @@ namespace FoxTube
|
|||||||
(videoPlaceholder.Content as VideoPage).player.pointerCaptured = false;
|
(videoPlaceholder.Content as VideoPage).player.pointerCaptured = false;
|
||||||
videoPlaceholder.Content = null;
|
videoPlaceholder.Content = null;
|
||||||
Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0);
|
Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0);
|
||||||
|
MaximizeVideo();
|
||||||
|
|
||||||
if (content.CanGoBack)
|
if (content.CanGoBack)
|
||||||
nav.IsBackEnabled = true;
|
nav.IsBackEnabled = true;
|
||||||
@@ -674,7 +665,7 @@ namespace FoxTube
|
|||||||
nav.IsPaneOpen = true;
|
nav.IsPaneOpen = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
nav.ExpandedModeThresholdWidth = short.MaxValue;
|
nav.ExpandedModeThresholdWidth = int.MaxValue;
|
||||||
|
|
||||||
if (videoPlaceholder.Content != null && videoPlaceholder.HorizontalAlignment == HorizontalAlignment.Stretch)
|
if (videoPlaceholder.Content != null && videoPlaceholder.HorizontalAlignment == HorizontalAlignment.Stretch)
|
||||||
MinimizeAsInitializer();
|
MinimizeAsInitializer();
|
||||||
|
|||||||
@@ -82,7 +82,26 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
<TextBlock Name="description" Text="[Description]" IsTextSelectionEnabled="True" TextWrapping="WrapWholeWords"/>
|
<TextBlock Name="description" Text="[Description]" IsTextSelectionEnabled="True" TextWrapping="WrapWholeWords"/>
|
||||||
<TextBlock Margin="0,20" Name="category" Text="Category: "/>
|
<Grid Margin="0,20,0,0">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="auto"/>
|
||||||
|
<ColumnDefinition Width="20"/>
|
||||||
|
<ColumnDefinition Width="auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="auto"/>
|
||||||
|
<RowDefinition Height="auto"/>
|
||||||
|
<RowDefinition Height="auto"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
<TextBlock Text="Published at: "/>
|
||||||
|
<TextBlock Grid.Row="1" Text="Category: "/>
|
||||||
|
<TextBlock Grid.Row="2" Text="License: "/>
|
||||||
|
|
||||||
|
<TextBlock Name="publishedAt" Grid.Column="2" Text="[Publishing date]"/>
|
||||||
|
<TextBlock Name="category" Grid.Column="2" Grid.Row="1" Padding="0" Text="[Category]"/>
|
||||||
|
<TextBlock Name="license" Grid.Column="2" Grid.Row="2" Text="[License type]"/>
|
||||||
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</PivotItem>
|
</PivotItem>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|||||||
+57
-101
@@ -20,7 +20,7 @@ using FoxTube.Controls;
|
|||||||
using YoutubeExplode.Models.MediaStreams;
|
using YoutubeExplode.Models.MediaStreams;
|
||||||
using YoutubeExplode;
|
using YoutubeExplode;
|
||||||
|
|
||||||
//TODO: Refactor page sizing algorythm; Cleanup code
|
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
|
||||||
|
|
||||||
namespace FoxTube.Pages
|
namespace FoxTube.Pages
|
||||||
{
|
{
|
||||||
@@ -61,8 +61,6 @@ namespace FoxTube.Pages
|
|||||||
public CommentsPage comments;
|
public CommentsPage comments;
|
||||||
public LoadingPage loading;
|
public LoadingPage loading;
|
||||||
|
|
||||||
DispatcherTimer liveTimer;
|
|
||||||
|
|
||||||
public VideoPage()
|
public VideoPage()
|
||||||
{
|
{
|
||||||
this.InitializeComponent();
|
this.InitializeComponent();
|
||||||
@@ -92,9 +90,6 @@ namespace FoxTube.Pages
|
|||||||
|
|
||||||
private void Player_NextClicked(object sender, params object[] e)
|
private void Player_NextClicked(object sender, params object[] e)
|
||||||
{
|
{
|
||||||
if(playlistId != null)
|
|
||||||
playlistList.SelectedIndex++;
|
|
||||||
else
|
|
||||||
(relatedVideos.Children[0] as VideoCard).Button_Click(this, null);
|
(relatedVideos.Children[0] as VideoCard).Button_Click(this, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,47 +111,21 @@ namespace FoxTube.Pages
|
|||||||
videoId = ids[0];
|
videoId = ids[0];
|
||||||
|
|
||||||
if (ids[1] != null)
|
if (ids[1] != null)
|
||||||
LoadPlaylist(ids[1]);
|
|
||||||
else
|
|
||||||
pivot.Items.Remove(playlist);
|
|
||||||
|
|
||||||
VideosResource.ListRequest request = SecretsVault.Service.Videos.List("snippet,statistics,status,contentDetails,liveStreamingDetails");
|
|
||||||
request.Id = ids[0];
|
|
||||||
item = (await request.ExecuteAsync()).Items[0];
|
|
||||||
|
|
||||||
if (item.Snippet.LiveBroadcastContent == "none")
|
|
||||||
LoadStats();
|
|
||||||
else
|
|
||||||
LoadStream();
|
|
||||||
|
|
||||||
LoadInfo();
|
|
||||||
|
|
||||||
loading.Close();
|
|
||||||
}
|
|
||||||
catch (System.Net.Http.HttpRequestException)
|
|
||||||
{
|
{
|
||||||
loading.Error("System.Net.Http.HttpRequestException", "Unable to connect to Google servers.", true);
|
playlistId = ids[1];
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
loading.Error(e.GetType().ToString(), e.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async void LoadPlaylist(string id)
|
|
||||||
{
|
|
||||||
playlistId = id;
|
|
||||||
List<VideoPlaylistItem> items = new List<VideoPlaylistItem>();
|
List<VideoPlaylistItem> items = new List<VideoPlaylistItem>();
|
||||||
VideoPlaylistItem selection = null;
|
VideoPlaylistItem selection = null;
|
||||||
|
|
||||||
//Retrieving data
|
|
||||||
PlaylistsResource.ListRequest playlistRequest = SecretsVault.Service.Playlists.List("snippet,contentDetails");
|
PlaylistsResource.ListRequest playlistRequest = SecretsVault.Service.Playlists.List("snippet,contentDetails");
|
||||||
playlistRequest.Id = id;
|
playlistRequest.Id = ids[1];
|
||||||
Playlist playlistItem = (await playlistRequest.ExecuteAsync()).Items[0];
|
Playlist playlistItem = (await playlistRequest.ExecuteAsync()).Items[0];
|
||||||
|
|
||||||
|
playlistName.Text = playlistItem.Snippet.Title;
|
||||||
|
playlistChannel.Text = playlistItem.Snippet.ChannelTitle;
|
||||||
|
|
||||||
PlaylistItemsResource.ListRequest listRequest = SecretsVault.Service.PlaylistItems.List("snippet");
|
PlaylistItemsResource.ListRequest listRequest = SecretsVault.Service.PlaylistItems.List("snippet");
|
||||||
listRequest.MaxResults = 50;
|
listRequest.MaxResults = 50;
|
||||||
listRequest.PlaylistId = id;
|
listRequest.PlaylistId = ids[1];
|
||||||
PlaylistItemListResponse listResponse = await listRequest.ExecuteAsync();
|
PlaylistItemListResponse listResponse = await listRequest.ExecuteAsync();
|
||||||
|
|
||||||
foreach (PlaylistItem i in listResponse.Items)
|
foreach (PlaylistItem i in listResponse.Items)
|
||||||
@@ -185,49 +154,39 @@ namespace FoxTube.Pages
|
|||||||
for (int k = 0; k < items.Count; k++)
|
for (int k = 0; k < items.Count; k++)
|
||||||
items[k].Number = k + 1;
|
items[k].Number = k + 1;
|
||||||
|
|
||||||
//Setting data
|
|
||||||
playlistName.Text = playlistItem.Snippet.Title;
|
|
||||||
playlistChannel.Text = playlistItem.Snippet.ChannelTitle;
|
|
||||||
|
|
||||||
playlistCounter.Text = $"{items.IndexOf(selection) + 1}/{playlistItem.ContentDetails.ItemCount}";
|
playlistCounter.Text = $"{items.IndexOf(selection) + 1}/{playlistItem.ContentDetails.ItemCount}";
|
||||||
|
|
||||||
playlistList.ItemsSource = items;
|
playlistList.ItemsSource = items;
|
||||||
playlistList.SelectedItem = selection;
|
playlistList.SelectedItem = selection;
|
||||||
pivot.SelectedItem = playlist;
|
pivot.SelectedItem = playlist;
|
||||||
|
|
||||||
if (playlistList.SelectedIndex == playlistList.Items.Count - 1)
|
|
||||||
player.Next.Visibility = Visibility.Collapsed;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
pivot.Items.Remove(playlist);
|
||||||
|
|
||||||
|
VideosResource.ListRequest request = SecretsVault.Service.Videos.List("snippet,statistics,status,contentDetails");
|
||||||
|
request.Id = ids[0];
|
||||||
|
item = (await request.ExecuteAsync()).Items[0];
|
||||||
|
|
||||||
async void LoadInfo()
|
|
||||||
{
|
|
||||||
//Setting meta
|
|
||||||
title.Text = item.Snippet.Title;
|
title.Text = item.Snippet.Title;
|
||||||
Methods.FormatText(ref description, item.Snippet.Description);
|
Methods.FormatText(ref description, item.Snippet.Description);
|
||||||
|
|
||||||
//Setting channel button
|
publishedAt.Text = item.Snippet.PublishedAt.ToString();
|
||||||
ChannelsResource.ListRequest channelRequest = SecretsVault.Service.Channels.List("snippet, statistics");
|
if (item.Status.License == "youtube")
|
||||||
channelRequest.Id = item.Snippet.ChannelId;
|
license.Text = "Standard YouTube License";
|
||||||
var item1 = (await channelRequest.ExecuteAsync()).Items[0];
|
else license.Text = "Creative Commons Attribution license (reuse allowed)";
|
||||||
|
|
||||||
channelAvatar.ProfilePicture = new BitmapImage(new Uri(item1.Snippet.Thumbnails.Medium.Url));
|
|
||||||
channelName.Text = item.Snippet.ChannelTitle;
|
|
||||||
subscribers.Text = $"{item1.Statistics.SubscriberCount:0,0} subscribers";
|
|
||||||
|
|
||||||
//Setting ratings
|
|
||||||
dislikes.Text = $"{item.Statistics.DislikeCount:0,0}";
|
|
||||||
likes.Text = $"{item.Statistics.LikeCount:0,0}";
|
|
||||||
rating.Value = (double)item.Statistics.DislikeCount / (double)(item.Statistics.DislikeCount + item.Statistics.LikeCount) * 100;
|
|
||||||
|
|
||||||
//Setting category
|
|
||||||
VideoCategoriesResource.ListRequest categoryRequest = SecretsVault.NoAuthService.VideoCategories.List("snippet");
|
VideoCategoriesResource.ListRequest categoryRequest = SecretsVault.NoAuthService.VideoCategories.List("snippet");
|
||||||
categoryRequest.Id = item.Snippet.CategoryId;
|
categoryRequest.Id = item.Snippet.CategoryId;
|
||||||
category.Text = (await categoryRequest.ExecuteAsync()).Items[0].Snippet.Title;
|
category.Text = (await categoryRequest.ExecuteAsync()).Items[0].Snippet.Title;
|
||||||
|
|
||||||
//Setting User's rate
|
views.Text = $"{item.Statistics.ViewCount:0,0} views";
|
||||||
|
dislikes.Text = $"{item.Statistics.DislikeCount:0,0}";
|
||||||
|
likes.Text = $"{item.Statistics.LikeCount:0,0}";
|
||||||
|
rating.Value = (double)item.Statistics.DislikeCount / (double)(item.Statistics.DislikeCount + item.Statistics.LikeCount) * 100;
|
||||||
|
|
||||||
if (SecretsVault.IsAuthorized)
|
if (SecretsVault.IsAuthorized)
|
||||||
{
|
{
|
||||||
VideoGetRatingResponse ratingResponse = await SecretsVault.Service.Videos.GetRating(videoId).ExecuteAsync();
|
VideoGetRatingResponse ratingResponse = await SecretsVault.Service.Videos.GetRating(ids[0]).ExecuteAsync();
|
||||||
if (ratingResponse.Items[0].Rating == "like")
|
if (ratingResponse.Items[0].Rating == "like")
|
||||||
{
|
{
|
||||||
userRating = Rating.Like;
|
userRating = Rating.Like;
|
||||||
@@ -257,39 +216,29 @@ namespace FoxTube.Pages
|
|||||||
subscribe.Visibility = Visibility.Collapsed;
|
subscribe.Visibility = Visibility.Collapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Initializing player
|
ChannelsResource.ListRequest channelRequest = SecretsVault.Service.Channels.List("snippet, statistics");
|
||||||
player.Initialize(item, item1.Snippet.Thumbnails.Medium.Url);
|
channelRequest.Id = item.Snippet.ChannelId;
|
||||||
|
var item1 = (await channelRequest.ExecuteAsync()).Items[0];
|
||||||
|
|
||||||
LoadRelatedVideos();
|
channelAvatar.ProfilePicture = new BitmapImage(new Uri(item1.Snippet.Thumbnails.Medium.Url));
|
||||||
}
|
channelName.Text = item.Snippet.ChannelTitle;
|
||||||
|
subscribers.Text = $"{item1.Statistics.SubscriberCount:0,0} subscribers";
|
||||||
void LoadStream()
|
|
||||||
{
|
|
||||||
liveTimer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(10) };
|
|
||||||
liveTimer.Tick += LiveStatsUpdate;
|
|
||||||
liveTimer.Start();
|
|
||||||
LiveStatsUpdate();
|
|
||||||
|
|
||||||
commentsPlaceholder.Header = "Chat";
|
|
||||||
//TODO: Initialize chat
|
|
||||||
download.Visibility = Visibility.Collapsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void LiveStatsUpdate(object sender = null, object e = null)
|
|
||||||
{
|
|
||||||
VideosResource.ListRequest request = SecretsVault.Service.Videos.List("liveStreamingDetails");
|
|
||||||
request.Id = videoId;
|
|
||||||
Video video = (await request.ExecuteAsync()).Items[0];
|
|
||||||
|
|
||||||
views.Text = $"{item.LiveStreamingDetails.ConcurrentViewers} viewers";
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadStats()
|
|
||||||
{
|
|
||||||
views.Text = $"{item.Statistics.ViewCount:0,0} views";
|
|
||||||
|
|
||||||
comments.Initialize(item);
|
comments.Initialize(item);
|
||||||
|
player.Initialize(item, item1.Snippet.Thumbnails.Medium.Url);
|
||||||
|
LoadRelatedVideos();
|
||||||
LoadDownloads();
|
LoadDownloads();
|
||||||
|
|
||||||
|
loading.Close();
|
||||||
|
}
|
||||||
|
catch (System.Net.Http.HttpRequestException)
|
||||||
|
{
|
||||||
|
loading.Error("System.Net.Http.HttpRequestException", "Unable to connect to Google servers.", true);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
loading.Error(e.GetType().ToString(), e.Message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async void LoadDownloads()
|
async void LoadDownloads()
|
||||||
@@ -302,10 +251,9 @@ namespace FoxTube.Pages
|
|||||||
MenuFlyoutItem menuItem = new MenuFlyoutItem()
|
MenuFlyoutItem menuItem = new MenuFlyoutItem()
|
||||||
{
|
{
|
||||||
Text = i.VideoQualityLabel,
|
Text = i.VideoQualityLabel,
|
||||||
Tag = new { i, i.VideoQualityLabel }
|
Tag = new object[] { i, i.VideoQualityLabel }
|
||||||
};
|
};
|
||||||
menuItem.Click += (sender, e) =>
|
menuItem.Click += downloadItemSelected;
|
||||||
DownloadAgent.Add(((sender as MenuFlyoutItem).Tag as object[])[0] as MediaStreamInfo, item, ((sender as MenuFlyoutItem).Tag as object[])[1] as string);
|
|
||||||
downloadSelector.Items.Add(menuItem);
|
downloadSelector.Items.Add(menuItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,17 +262,20 @@ namespace FoxTube.Pages
|
|||||||
Text = "Audio track",
|
Text = "Audio track",
|
||||||
Tag = new object[] { infoSet.Audio[0], "Audio only" }
|
Tag = new object[] { infoSet.Audio[0], "Audio only" }
|
||||||
};
|
};
|
||||||
audioItem.Click += (sender, e) =>
|
audioItem.Click += downloadItemSelected;
|
||||||
DownloadAgent.Add(((sender as MenuFlyoutItem).Tag as object[])[0] as MediaStreamInfo, item, ((sender as MenuFlyoutItem).Tag as object[])[1] as string);
|
|
||||||
downloadSelector.Items.Add(audioItem);
|
downloadSelector.Items.Add(audioItem);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"{e.GetType()}: '{e.Message}'");
|
loading.Error(e.GetType().ToString(), e.Message);
|
||||||
download.Visibility = Visibility.Collapsed;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void downloadItemSelected(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
DownloadAgent.Add(((sender as MenuFlyoutItem).Tag as object[])[0] as MediaStreamInfo, item, ((sender as MenuFlyoutItem).Tag as object[])[1] as string);
|
||||||
|
}
|
||||||
|
|
||||||
async void LoadRelatedVideos()
|
async void LoadRelatedVideos()
|
||||||
{
|
{
|
||||||
SearchResource.ListRequest request = SecretsVault.Service.Search.List("snippet");
|
SearchResource.ListRequest request = SecretsVault.Service.Search.List("snippet");
|
||||||
@@ -381,7 +332,8 @@ namespace FoxTube.Pages
|
|||||||
|
|
||||||
public void refresh_Click(object sender, RoutedEventArgs e)
|
public void refresh_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
Methods.MainPage.GoToVideo(videoId, playlistId);
|
player = new VideoPlayer();
|
||||||
|
Initialize(new string[2] { videoId, playlistId });
|
||||||
}
|
}
|
||||||
|
|
||||||
private void grid_SizeChanged(object sender, SizeChangedEventArgs e)
|
private void grid_SizeChanged(object sender, SizeChangedEventArgs e)
|
||||||
@@ -535,10 +487,14 @@ namespace FoxTube.Pages
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
if ((e.AddedItems[0] as VideoPlaylistItem).Id != videoId)
|
if ((e.AddedItems[0] as VideoPlaylistItem).Id != videoId)
|
||||||
Methods.MainPage.GoToVideo((e.AddedItems[0] as VideoPlaylistItem).Id, playlistId);
|
Methods.MainPage.GoToVideo((e.AddedItems[0] as VideoPlaylistItem).Id, playlistId);
|
||||||
}
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
|
||||||
private async void subscribe_Click(object sender, RoutedEventArgs e)
|
private async void subscribe_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user