Archived
1
0

Merged PR 20: Revert commit 52c081fe

Revert commit 52c081fe
This commit is contained in:
Michael Gordeev
2018-12-19 19:02:31 +00:00
parent 5e58c558ca
commit 790df822f7
5 changed files with 152 additions and 187 deletions
-1
View File
@@ -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 -1
View File
@@ -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>
+2 -11
View File
@@ -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();
+20 -1
View File
@@ -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
View File
@@ -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)
{ {