Archived
1
0
This commit is contained in:
Michael Gordeev
2018-05-09 17:16:06 +03:00
parent a4aa95d25c
commit 7ee8d9dd18
12 changed files with 398 additions and 153 deletions
+29 -1
View File
@@ -15,6 +15,10 @@ using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Navigation; using Windows.UI.Xaml.Navigation;
using Google.Apis.Services;
using Google.Apis.YouTube.v3;
using Google.Apis.YouTube.v3.Data;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236 // The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
namespace FoxTube namespace FoxTube
@@ -22,9 +26,33 @@ namespace FoxTube
public sealed partial class ChannelCard : UserControl public sealed partial class ChannelCard : UserControl
{ {
string channelId; string channelId;
public ChannelCard() public ChannelCard(string id, string live)
{ {
this.InitializeComponent(); this.InitializeComponent();
Initialize(id, live);
}
public async void Initialize(string id, string live)
{
YouTubeService ytService = new YouTubeService(new BaseClientService.Initializer()
{
ApiKey = "AIzaSyBgHrCnrlzlVmk0cJKL8RqP9Y8x6XSuk_0",
ApplicationName = this.GetType().ToString()
});
ChannelsResource.ListRequest request = ytService.Channels.List("snippet,contentDetails,statistics");
request.Id = id;
ChannelListResponse response = await request.ExecuteAsync();
var item = response.Items[0];
channelName.Text = item.Snippet.Title;
subscribers.Text = string.Format("{0} subscribers", item.Statistics.SubscriberCount);
videoCount.Text = string.Format("{0} videos", item.Statistics.VideoCount);
avatar.ProfilePicture = new BitmapImage(new Uri(item.Snippet.Thumbnails.Medium.Url));
if (live == "live")
liveTag.Visibility = Visibility.Visible;
} }
public void AddInfo(string name, int videos, string avatarUrl, string channelUrl, int subs, Visibility live, bool logged) public void AddInfo(string name, int videos, string avatarUrl, string channelUrl, int subs, Visibility live, bool logged)
+1 -1
View File
@@ -29,7 +29,7 @@
</StackPanel> </StackPanel>
<ToggleButton Grid.Column="2" Height="50" Width="250" Background="Red" Foreground="White" FontSize="18" FontWeight="SemiBold" Content="Subscirbe"/> <ToggleButton Grid.Column="2" Height="50" Width="250" Background="Red" Foreground="White" FontSize="18" FontWeight="SemiBold" Content="Subscirbe"/>
<ToggleButton Grid.Column="3" Height="50" Width="50" FontFamily="Segoe MDL2 Assets" FontSize="18" FontWeight="SemiBold" Content="" Foreground="White" Background="Red"/> <ToggleButton Grid.Column="3" Height="50" Width="50" FontFamily="Segoe MDL2 Assets" FontSize="18" FontWeight="SemiBold" Content="" Foreground="White" Background="Red"/>
<!--&#xE781;&#xE93E;--> <!--&#xE781;&#xE93E;&#xEDAC;-->
</Grid> </Grid>
<Frame Name="content" Grid.Row="2"/> <Frame Name="content" Grid.Row="2"/>
</Grid> </Grid>
+7
View File
@@ -123,6 +123,9 @@
<DependentUpon>MainPage.xaml</DependentUpon> <DependentUpon>MainPage.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Notification.cs" /> <Compile Include="Notification.cs" />
<Compile Include="PlaylistCardWide.xaml.cs">
<DependentUpon>PlaylistCardWide.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Search.xaml.cs"> <Compile Include="Search.xaml.cs">
<DependentUpon>Search.xaml</DependentUpon> <DependentUpon>Search.xaml</DependentUpon>
@@ -255,6 +258,10 @@
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Include="PlaylistCardWide.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Search.xaml"> <Page Include="Search.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
+53 -26
View File
@@ -106,55 +106,82 @@
Width="42" Height="42" Margin="4" Width="42" Height="42" Margin="4"
RelativePanel.AlignRightWithPanel="True" RelativePanel.AlignRightWithPanel="True"
Background="Transparent" Background="Transparent"
FontFamily="Segoe MDL2 Assets" Content="&#xE11A;" FontSize="20" FocusVisualSecondaryBrush="#66FFFFFF" FocusVisualPrimaryBrush="White" Foreground="Black"/> FontFamily="Segoe MDL2 Assets" Content="&#xE11A;" FontSize="20" Foreground="Black"/>
<Popup Margin="0,50,0,0" Grid.Column="9" Name="searchSuggestions" IsOpen="True" Visibility="Collapsed"> <Popup Margin="0,50,0,0" Grid.Column="9" Name="searchSuggestions" IsOpen="True" Visibility="Visible">
<StackPanel> <StackPanel Padding="10" Background="WhiteSmoke" Width="350">
<StackPanel Width="350" Background="WhiteSmoke" Name="searchStandby"> <StackPanel Width="350" Name="searchStandby" Visibility="Visible">
<TextBlock Padding="10,0,0,0" Text="Loading results... Please, wait."/> <TextBlock Text="Loading results... Please, wait."/>
<ProgressBar IsIndeterminate="True"/>
</StackPanel> </StackPanel>
<StackPanel Name="searchSuggestionsList" Visibility="Collapsed"> <ListBox Name="searchSuggestionsList" Visibility="Collapsed">
<ListBox Width="350"> <ListBoxItem Height="35" Padding="0" Name="s0" Visibility="Collapsed">
<ListBoxItem Height="35" Padding="10,0,0,0">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource ItemIcon}" Text="&#xE734;"/> <TextBlock Style="{StaticResource ItemIcon}" Text="&#xE728;"/>
<TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 1"/> <TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 0" Name="t0"/>
</StackPanel> </StackPanel>
</ListBoxItem> </ListBoxItem>
<ListBoxItem Height="35" Padding="10,0,0,0"> <ListBoxItem Height="35" Padding="0" Name="s1" Visibility="Collapsed">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource ItemIcon}" Text="&#xE734;"/> <TextBlock Style="{StaticResource ItemIcon}" Text="&#xE728;"/>
<TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 2"/> <TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 1" Name="t1"/>
</StackPanel> </StackPanel>
</ListBoxItem> </ListBoxItem>
<ListBoxItem Height="35" Padding="10,0,0,0"> <ListBoxItem Height="35" Padding="0" Name="s2" Visibility="Collapsed">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource ItemIcon}" Text="&#xE734;"/> <TextBlock Style="{StaticResource ItemIcon}" Text="&#xE728;"/>
<TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 3"/> <TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 2" Name="t2"/>
</StackPanel> </StackPanel>
</ListBoxItem> </ListBoxItem>
</ListBox> <ListBoxItem Height="35" Padding="0" Name="s3" Visibility="Collapsed">
<ListBox Width="350"> <StackPanel Orientation="Horizontal">
<ListBoxItem Height="17" Margin="0" Padding="10,0,0,0" IsEnabled="False"> <TextBlock Style="{StaticResource ItemIcon}" Text="&#xE728;"/>
<StackPanel Orientation="Horizontal" Margin="0" Padding="0, 0, 0, 0"> <TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 3" Name="t3"/>
<TextBlock Text="Search history" Foreground="Gray" FontSize="12" Margin="0" Padding="0, 0, 5, 0"/> </StackPanel>
</ListBoxItem>
<ListBoxItem Height="35" Padding="0" Name="s4" Visibility="Collapsed">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource ItemIcon}" Text="&#xE728;"/>
<TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 4" Name="t4"/>
</StackPanel>
</ListBoxItem>
<ListBoxItem Padding="0" IsEnabled="False">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Previous requests" Foreground="Gray" FontSize="12" Margin="0" Padding="0, 0, 5, 0"/>
<Line X1="0" Y1="10" X2="250" Y2="10" Stroke="Gray" StrokeThickness="2"/> <Line X1="0" Y1="10" X2="250" Y2="10" Stroke="Gray" StrokeThickness="2"/>
</StackPanel> </StackPanel>
</ListBoxItem> </ListBoxItem>
<ListBoxItem Height="35" Padding="10,0,0,0"> <ListBoxItem Height="35" Padding="0" Name="s6" Visibility="Collapsed">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource ItemIcon}" Text="&#xE81C;"/> <TextBlock Style="{StaticResource ItemIcon}" Text="&#xE81C;"/>
<TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 4"/> <TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 6" Name="t6"/>
</StackPanel> </StackPanel>
</ListBoxItem> </ListBoxItem>
<ListBoxItem Height="35" Padding="10,0,0,0"> <ListBoxItem Height="35" Padding="0" Name="s7" Visibility="Collapsed">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource ItemIcon}" Text="&#xE81C;"/> <TextBlock Style="{StaticResource ItemIcon}" Text="&#xE81C;"/>
<TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 5"/> <TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 7" Name="t7"/>
</StackPanel>
</ListBoxItem>
<ListBoxItem Height="35" Padding="0" Name="s8" Visibility="Collapsed">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource ItemIcon}" Text="&#xE81C;"/>
<TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 8" Name="t8"/>
</StackPanel>
</ListBoxItem>
<ListBoxItem Height="35" Padding="0" Name="s9" Visibility="Collapsed">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource ItemIcon}" Text="&#xE81C;"/>
<TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 9" Name="t9"/>
</StackPanel>
</ListBoxItem>
<ListBoxItem Height="35" Padding="0" Name="s10" Visibility="Collapsed">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource ItemIcon}" Text="&#xE81C;"/>
<TextBlock Style="{StaticResource MenuItem}" Text="Suggestion 10" Name="t10"/>
</StackPanel> </StackPanel>
</ListBoxItem> </ListBoxItem>
</ListBox> </ListBox>
</StackPanel> </StackPanel>
</StackPanel>
</Popup> </Popup>
</Grid> </Grid>
<SplitView Name="menu" Grid.Row="1" OpenPaneLength="250" CompactPaneLength="50" DisplayMode="CompactInline" IsPaneOpen="True" PaneClosing="menu_PaneClosed" PaneOpening="menu_PaneOpened"> <SplitView Name="menu" Grid.Row="1" OpenPaneLength="250" CompactPaneLength="50" DisplayMode="CompactInline" IsPaneOpen="True" PaneClosing="menu_PaneClosed" PaneOpening="menu_PaneOpened">
+35 -4
View File
@@ -19,6 +19,7 @@ using Microsoft.Toolkit.Uwp.Notifications;
using Windows.UI.Notifications; using Windows.UI.Notifications;
using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Media.Imaging;
using Windows.Storage; using Windows.Storage;
using System.Xml;
using Google.Apis.Auth.OAuth2; using Google.Apis.Auth.OAuth2;
using Google.Apis.Services; using Google.Apis.Services;
@@ -39,6 +40,7 @@ namespace FoxTube
public sealed partial class MainPage : Page public sealed partial class MainPage : Page
{ {
private bool loggedIn = false; private bool loggedIn = false;
UserCredential credential;
public bool Logged public bool Logged
{ {
get get
@@ -331,7 +333,6 @@ namespace FoxTube
private async Task LogIn() private async Task LogIn()
{ {
UserCredential credential;
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri(@"ms-appx:///client_secrets.json")); StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri(@"ms-appx:///client_secrets.json"));
Debug.WriteLine("Exception accured after opening a stream"); Debug.WriteLine("Exception accured after opening a stream");
@@ -344,7 +345,7 @@ namespace FoxTube
new FileDataStore(this.GetType().ToString()) new FileDataStore(this.GetType().ToString())
); );
Debug.WriteLine("200 OK"); Debug.WriteLine("200 OK");
/*using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)) using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{ {
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets, GoogleClientSecrets.Load(stream).Secrets,
@@ -353,12 +354,12 @@ namespace FoxTube
CancellationToken.None, CancellationToken.None,
new FileDataStore(this.GetType().ToString()) new FileDataStore(this.GetType().ToString())
); );
}*/ }
} }
private void searchField_TextChanged(object sender, TextChangedEventArgs e) private void searchField_TextChanged(object sender, TextChangedEventArgs e)
{ {
if (searchField.Text != "") if (searchField.Text.Length > 2)
{ {
searchSuggestions.Visibility = Visibility.Visible; searchSuggestions.Visibility = Visibility.Visible;
buildSearchSuggestionsTree(searchField.Text); buildSearchSuggestionsTree(searchField.Text);
@@ -419,5 +420,35 @@ namespace FoxTube
searchSuggestions.Visibility = Visibility.Collapsed; searchSuggestions.Visibility = Visibility.Collapsed;
} }
} }
public static string NormalizeDuration(string code)
{
Debug.WriteLine(string.Format("Source string: '{0}'", code));
string temp = code.Trim('P', 'T', 'S');
Debug.WriteLine(string.Format("Trimmed string: '{0}'", temp));
temp = temp.Replace('H', '|');
temp = temp.Replace('M', '|');
if (temp.StartsWith('|'))
temp.TrimStart('|');
if (temp.EndsWith('|'))
temp.TrimEnd('|');
Debug.WriteLine(string.Format("End string: '{0}'", temp));
string[] arr = temp.Split('|');
Debug.WriteLine(string.Format("Array length: {0}", arr.Length));
foreach (string str in arr)
Debug.WriteLine(str);
switch(arr.Length)
{
case 3:
return new TimeSpan(Convert.ToInt32(arr[0]), Convert.ToInt32(arr[1]), Convert.ToInt32(arr[2])).ToString();
case 2:
return new TimeSpan(0, Convert.ToInt32(arr[0]), Convert.ToInt32(arr[1])).ToString();
case 1:
return new TimeSpan(0, 0, Convert.ToInt32(arr[0])).ToString();
default:
return "";
}
}
} }
} }
+51
View File
@@ -0,0 +1,51 @@
<UserControl
x:Class="FoxTube.PlaylistCardWide"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:FoxTube"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
HorizontalAlignment="Stretch"
Height="175">
<Button Padding="0" Background="WhiteSmoke" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left" Margin="2">
<StackPanel Orientation="Horizontal">
<Grid>
<Image Name="thumbnail" Source="Assets/videoThumbSample.png"/>
<!--<Image Source="https://i.ytimg.com/vi/XZQQcYnkumA/mqdefault.jpg"/>-->
<Grid HorizontalAlignment="Right" Width="100">
<Grid.Background>
<AcrylicBrush TintColor="#7F000000" BackgroundSource="Backdrop" AlwaysUseFallback="False" TintOpacity="1" Opacity="0.97"/>
</Grid.Background>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Center" FontFamily="Segoe MDL2 Assets" Foreground="White" Text="&#xE90B;" FontSize="30"/>
<TextBlock Foreground="White" Text="30" HorizontalAlignment="Center" FontSize="20" Name="thumbCount"/>
</StackPanel>
</Grid>
</Grid>
<Grid Margin="10" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="75"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Vertical">
<TextBlock Name="title" TextWrapping="WrapWholeWords" Text="Subnautica - SAY GOODBYE TO SUBNAUTICA! We're Back Home! - Subnautica Ending (Full Release Gameplay)" FontSize="20" MaxLines="2"/>
<TextBlock Name="info" Text="09-May-18 18:31 | 30 videos" Foreground="Gray"/>
</StackPanel>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<PersonPicture Name="avatar" Width="75" HorizontalAlignment="Left"/>
<StackPanel Orientation="Vertical" Grid.Column="1" Padding="10,5,5,5" VerticalAlignment="Center">
<TextBlock Name="channelName" Text="IGP" FontSize="18"/>
<TextBlock Name="channelSubs" Text="120,452 subscribers" Foreground="Gray"/>
<HyperlinkButton Name="channelLink" Content="Go to channel" Padding="0"/>
</StackPanel>
</Grid>
</Grid>
</StackPanel>
</Button>
</UserControl>
+67
View File
@@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Navigation;
using Google.Apis.Services;
using Google.Apis.YouTube.v3;
using Google.Apis.YouTube.v3.Data;
using System.Threading.Tasks;
using System.Threading;
using Google.Apis.Util.Store;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
namespace FoxTube
{
public sealed partial class PlaylistCardWide : UserControl
{
public PlaylistCardWide(string id)
{
this.InitializeComponent();
Initialize(id);
}
public async void Initialize(string id)
{
YouTubeService ytService = new YouTubeService(new BaseClientService.Initializer()
{
ApiKey = "AIzaSyBgHrCnrlzlVmk0cJKL8RqP9Y8x6XSuk_0",
ApplicationName = this.GetType().ToString()
});
PlaylistsResource.ListRequest request = ytService.Playlists.List("snippet,contentDetails");
request.Id = id;
PlaylistListResponse response = await request.ExecuteAsync();
var item = response.Items[0];
title.Text = item.Snippet.Title;
info.Text = string.Format("{0} | {1} videos", item.Snippet.PublishedAt, item.ContentDetails.ItemCount);
thumbCount.Text = item.ContentDetails.ItemCount.ToString();
thumbnail.Source = new BitmapImage(new Uri(item.Snippet.Thumbnails.Medium.Url));
var request1 = ytService.Channels.List("snippet,contentDetails,statistics");
request1.Id = item.Snippet.ChannelId;
ChannelListResponse response1 = await request1.ExecuteAsync();
var item1 = response1.Items[0];
avatar.ProfilePicture = new BitmapImage(new Uri(item1.Snippet.Thumbnails.Medium.Url));
channelName.Text = item1.Snippet.Title;
channelSubs.Text = string.Format("{0} subscribers", item1.Statistics.SubscriberCount);
channelLink.NavigateUri = new Uri("https://www.youtube.com/channel/" + item.Snippet.ChannelId);
}
}
}
+9 -43
View File
@@ -47,58 +47,24 @@ namespace FoxTube
switch (result.Id.Kind) switch (result.Id.Kind)
{ {
case "youtube#video": case "youtube#video":
AddVideo(result.Snippet.Title, VideoCardWide vCard = new VideoCardWide(result.Id.VideoId);
"null", "null", result.Snippet.PublishedAt, resultsList.Children.Add(vCard);
result.Snippet.ChannelTitle, "null",
result.Snippet.ChannelId, result.Snippet.Thumbnails.Medium.Url, "null", result.Snippet.LiveBroadcastContent);
break; break;
case "youtube#channel": case "youtube#channel":
AddChannel(result.Snippet.Title, 0, 0, ChannelCard cCard = new ChannelCard(result.Id.ChannelId, result.Snippet.LiveBroadcastContent);
result.Snippet.ChannelId, result.Snippet.Thumbnails.Medium.Url, result.Snippet.LiveBroadcastContent, logged); resultsList.Children.Add(cCard);
break;
case "youtube#playlist":
PlaylistCardWide pCard = new PlaylistCardWide(result.Id.PlaylistId);
resultsList.Children.Add(pCard);
break; break;
default: default:
Debug.WriteLine("Skipped"); Debug.WriteLine("Skipped");
break; break;
} }
Google.Apis.YouTube.v3.Data.Video videItem = new Google.Apis.YouTube.v3.Data.Video();
}
void AddVideo(string title,
string duration, string views, DateTime? publicDate,
string channelName, string subs,
string channelId, string thumbUrl, string avatarUrl, string liveBroadcast)
{
Visibility live;
if (liveBroadcast != "live")
live = Visibility.Collapsed;
else live = Visibility.Visible;
VideoCardWide card = new VideoCardWide();
card.AddInfo(title,
string.Format("{0} | {1} | {2}", duration, views, publicDate),
thumbUrl, avatarUrl, string.Format("https://www.youtube.com/channel/{0}", channelId),
channelName, subs, live);
resultsList.Children.Add(card);
Debug.WriteLine("result item added");
}
void AddChannel(string name, int followers, int uploads,
string url, string avatar, string liveBroadcast, bool logged)
{
Visibility live;
if (liveBroadcast != "live")
live = Visibility.Collapsed;
else live = Visibility.Visible;
ChannelCard card = new ChannelCard();
card.AddInfo(name, uploads, avatar,
"https://www.youtube.com/channel/" + url, followers, live, logged);
resultsList.Children.Add(card);
Debug.WriteLine("result item added");
} }
} }
} }
+28 -5
View File
@@ -9,10 +9,33 @@
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="47"/> <RowDefinition Height="auto"/>
<RowDefinition Height="*"/> <RowDefinition Height="0*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid Grid.Row="0" Background="Red"> <Pivot>
<PivotItem Header="General">
<local:General/>
</PivotItem>
<PivotItem Header="Personalization">
</PivotItem>
<PivotItem Header="Account">
</PivotItem>
<PivotItem Header="Leave feedback">
<local:Feedback/>
</PivotItem>
<PivotItem Header="About us">
<local:About/>
</PivotItem>
<PivotItem Header="Join beta program">
</PivotItem>
<PivotItem Header="Help us translate this app">
<local:Translate/>
</PivotItem>
</Pivot>
<!--<Grid Grid.Row="0" Background="Red" Visibility="Collapsed">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<HyperlinkButton Content="General" Foreground="White" Margin="10,8,10,10" Name="GeneralMenu" Click="General_Click"/> <HyperlinkButton Content="General" Foreground="White" Margin="10,8,10,10" Name="GeneralMenu" Click="General_Click"/>
<HyperlinkButton Content="Personalization" Foreground="White" Margin="10,8,10,10" Name="PersonalizationMenu" Click="Personalization_Click" Visibility="Collapsed"/> <HyperlinkButton Content="Personalization" Foreground="White" Margin="10,8,10,10" Name="PersonalizationMenu" Click="Personalization_Click" Visibility="Collapsed"/>
@@ -22,7 +45,7 @@
<HyperlinkButton Content="Join beta program" Foreground="White" Margin="10,8,10,10" Name="BetaMenu" Click="Beta_Click" Visibility="Collapsed"/> <HyperlinkButton Content="Join beta program" Foreground="White" Margin="10,8,10,10" Name="BetaMenu" Click="Beta_Click" Visibility="Collapsed"/>
<HyperlinkButton Content="Help us translate this app" Foreground="White" Margin="10,8,10,10" Name="TranslateMenu" Click="Translate_Click" Visibility="Collapsed"/> <HyperlinkButton Content="Help us translate this app" Foreground="White" Margin="10,8,10,10" Name="TranslateMenu" Click="Translate_Click" Visibility="Collapsed"/>
</StackPanel> </StackPanel>
</Grid> </Grid>-->
<Frame Grid.Row="1" Name="settingsContent" /> <Frame Grid.Row="1" Name="settingsContent" Visibility="Collapsed"/>
</Grid> </Grid>
</Page> </Page>
+37 -10
View File
@@ -14,28 +14,55 @@ using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Navigation; using Windows.UI.Xaml.Navigation;
using Google.Apis.Services;
using Google.Apis.YouTube.v3;
using Google.Apis.YouTube.v3.Data;
using System.Threading.Tasks;
using System.Threading;
using Google.Apis.Util.Store;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236 // The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
namespace FoxTube namespace FoxTube
{ {
public sealed partial class VideoCardWide : UserControl public sealed partial class VideoCardWide : UserControl
{ {
public VideoCardWide() public VideoCardWide(string id)
{ {
this.InitializeComponent(); this.InitializeComponent();
Initialize(id);
} }
public void AddInfo(string name, string description, string thumbUrl, string avatarUrl, string channelUrl, string channel, string subs, Visibility live)
public async void Initialize(string id)
{ {
title.Text = name; YouTubeService ytService = new YouTubeService(new BaseClientService.Initializer()
info.Text = description; {
ApiKey = "AIzaSyBgHrCnrlzlVmk0cJKL8RqP9Y8x6XSuk_0",
ApplicationName = this.GetType().ToString()
});
thumbnail.Source = new BitmapImage(new Uri(thumbUrl)); VideosResource.ListRequest request = ytService.Videos.List("snippet,contentDetails,statistics");
//avatar.ProfilePicture = new BitmapImage(new Uri(avatarUrl)); request.Id = id;
VideoListResponse response = await request.ExecuteAsync();
channelName.Text = channel; var item = response.Items[0];
channelSubs.Text = string.Format("{0} subscribers", subs);
channelLink.NavigateUri = new Uri(channelUrl); title.Text = item.Snippet.Title;
liveTag.Visibility = live; info.Text = string.Format("{0} | {1} | {2} views", item.ContentDetails.Duration, item.Snippet.PublishedAt, item.Statistics.ViewCount);
thumbnail.Source = new BitmapImage(new Uri(item.Snippet.Thumbnails.Medium.Url));
if (item.Snippet.LiveBroadcastContent == "live")
liveTag.Visibility = Visibility.Visible;
var request1 = ytService.Channels.List("snippet,contentDetails,statistics");
request1.Id = item.Snippet.ChannelId;
ChannelListResponse response1 = await request1.ExecuteAsync();
var item1 = response1.Items[0];
avatar.ProfilePicture = new BitmapImage(new Uri(item1.Snippet.Thumbnails.Medium.Url));
channelName.Text = item1.Snippet.Title;
channelSubs.Text = string.Format("{0} subscribers", item1.Statistics.SubscriberCount);
channelLink.NavigateUri = new Uri("https://www.youtube.com/channel/" + item.Snippet.ChannelId);
} }
} }
} }
+4
View File
@@ -8,6 +8,8 @@
mc:Ignorable="d"> mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Padding="5"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Padding="5">
<ScrollViewer>
<Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
@@ -39,4 +41,6 @@
<local:VideoCard/> <local:VideoCard/>
</StackPanel> </StackPanel>
</Grid> </Grid>
</ScrollViewer>
</Grid>
</Page> </Page>
+25 -11
View File
@@ -120,33 +120,47 @@
</Grid> </Grid>
</Grid> </Grid>
</Grid> </Grid>
<StackPanel Background="#FF333333" Padding="25"> <Grid Background="#FF333333" Padding="25">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel>
<TextBlock Text="Warning! Mature content!" Foreground="White" FontSize="30"/> <TextBlock Text="Warning! Mature content!" Foreground="White" FontSize="30"/>
<Line Stroke="White" StrokeThickness="2" X1="0" X2="500"/> <Line Stroke="White" StrokeThickness="2" X1="0" X2="350"/>
<StackPanel Name="proceedMature" Visibility="Visible"> </StackPanel>
<Grid Name="proceedMature" Visibility="Collapsed" Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock TextWrapping="WrapWholeWords" Foreground="White" Text="This content isn't advised for children. It can represent violance, blood or sexual scenes." FontSize="20"/> <TextBlock TextWrapping="WrapWholeWords" Foreground="White" Text="This content isn't advised for children. It can represent violance, blood or sexual scenes." FontSize="20"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="1" VerticalAlignment="Bottom">
<CheckBox Foreground="White"> <CheckBox Foreground="White">
<TextBlock Foreground="White" Text="Don't show me it again"/> <TextBlock Foreground="White" Text="Don't show me it again"/>
</CheckBox> </CheckBox>
<Button Content="Continue" Margin="5,0,0,0" Foreground="White" Background="Gray"/> <Button Content="Continue" Margin="5,0,0,0" Foreground="White" Background="Gray"/>
</StackPanel> </StackPanel>
</StackPanel> </Grid>
<StackPanel Orientation="Horizontal" BorderBrush="OrangeRed" BorderThickness="5" Margin="0,10,0,0" Visibility="Collapsed" Name="signReq"> <Grid BorderBrush="OrangeRed" BorderThickness="5" Margin="0,10,0,0" Visibility="Visible" Name="signReq" Grid.Row="1" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xE192;" FontSize="40" Foreground="OrangeRed" Margin="5"/> <TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xE192;" FontSize="40" Foreground="OrangeRed" Margin="5"/>
<StackPanel HorizontalAlignment="Stretch"> <StackPanel HorizontalAlignment="Stretch" Grid.Column="1">
<TextBlock Text="Sign in into your account to continue" Foreground="OrangeRed" FontWeight="Bold" FontSize="20"/> <TextBlock Text="Sign in into your account to continue" Foreground="OrangeRed" FontWeight="Bold" FontSize="20"/>
<TextBlock Text="To watch this video you have to prove your age by sign in into your account which contains your age" Foreground="OrangeRed"/> <TextBlock Text="To watch this video you have to prove your age by sign in into your account which contains your age" Foreground="OrangeRed"/>
</StackPanel> </StackPanel>
<Button Content="Sign in now" Foreground="White" Background="Gray" HorizontalAlignment="Right"/> <Button Content="Sign in now" Foreground="White" Background="Gray" HorizontalAlignment="Right" Grid.Column="1" Margin="0,0,10,0"/>
</StackPanel> </Grid>
<StackPanel Orientation="Horizontal" BorderBrush="OrangeRed" BorderThickness="5" Visibility="Collapsed" Margin="0,10,0,0" Name="denied"> <StackPanel Orientation="Horizontal" BorderBrush="OrangeRed" BorderThickness="5" Visibility="Collapsed" Margin="0,10,0,0" Name="denied" Grid.Row="1" VerticalAlignment="Top">
<TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xEB90;" FontSize="40" Foreground="OrangeRed" Margin="5"/> <TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xEB90;" FontSize="40" Foreground="OrangeRed" Margin="5"/>
<StackPanel> <StackPanel>
<TextBlock Text="Access denied" Foreground="OrangeRed" FontWeight="Bold" FontSize="20"/> <TextBlock Text="Access denied" Foreground="OrangeRed" FontWeight="Bold" FontSize="20"/>
<TextBlock Text="Your age is below 18. Come back later." Foreground="OrangeRed"/> <TextBlock Text="Your age is below 18. Come back later." Foreground="OrangeRed"/>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</StackPanel> </Grid>
</Grid> </Grid>
</UserControl> </UserControl>