Archived
1
0

Updated localization

Titles are now localized
Updated ads (including default AdUintId)
This commit is contained in:
Michael Gordeev
2019-04-13 23:37:48 +03:00
parent d9d77a8054
commit 998aa75109
22 changed files with 222 additions and 65 deletions
+4
View File
@@ -16,6 +16,8 @@
- Added "Share" button to video cards - Added "Share" button to video cards
- Added "Delete video from playlist" button to video cards on playlist page\ - Added "Delete video from playlist" button to video cards on playlist page\
- Improved channel cover quality - Improved channel cover quality
- If available, shows localized titles and descriptions (based on "Search relevance language" parameter set in settings)
- Updated russian localization
</en-US> </en-US>
<ru-RU>### Что нового: <ru-RU>### Что нового:
- Оптимизация приложения - Оптимизация приложения
@@ -31,6 +33,8 @@
- Добавлена кнопка "Поделиться" к видео карточкам - Добавлена кнопка "Поделиться" к видео карточкам
- Добавлена кнопка "Удалить видео из плейлиста" к видео карточкам на страницах плейлистов - Добавлена кнопка "Удалить видео из плейлиста" к видео карточкам на страницах плейлистов
- Улучшено качество обложки канала - Улучшено качество обложки канала
- Показывает локализированные заголовки и описания если доступны (основан на параметре "Предпочитаемый язык поиска" установленного в настройках)
- Обновлена русская локализация
</ru-RU> </ru-RU>
</content> </content>
</item> </item>
+2 -2
View File
@@ -42,9 +42,9 @@ namespace FoxTube
}; };
public static YouTubeService Service => IsAuthorized ? new YouTubeService(Initializer) : NoAuthService; public static YouTubeService Service => IsAuthorized ? new YouTubeService(Initializer) : NoAuthService;
public static HttpClient HttpClient { get; } = new HttpClient(); public static HttpClient HttpClient { get; } = new HttpClient();
private static bool TestAds => true; //Change this bool private static bool TestAds => false; //Change this bool
public static string AppId => TestAds ? "d25517cb-12d4-4699-8bdc-52040c712cab" : "9ncqqxjtdlfh"; public static string AppId => TestAds ? "d25517cb-12d4-4699-8bdc-52040c712cab" : "9ncqqxjtdlfh";
public static string AdUnitId => TestAds ? "test" : "1100037769"; public static string AdUnitId => TestAds ? "test" : "1100044398";
public static bool AdsDisabled { get; private set; } = true; public static bool AdsDisabled { get; private set; } = true;
//User info //User info
+1
View File
@@ -9,6 +9,7 @@
VerticalAlignment="Top" VerticalAlignment="Top"
d:DesignHeight="290" d:DesignHeight="290"
d:DesignWidth="384" d:DesignWidth="384"
Visibility="Collapsed"
Opacity="0" Opacity="0"
Name="card"> Name="card">
+2 -1
View File
@@ -25,7 +25,7 @@ namespace FoxTube.Controls.Adverts
private void Methods_VideoPageSizeChanged(object sender = null, params object[] args) private void Methods_VideoPageSizeChanged(object sender = null, params object[] args)
{ {
Visibility = (bool)args[0] ? Visibility.Collapsed : Visibility.Visible; Visibility = !(bool)args[0] && advert != null ? Visibility.Visible : Visibility.Collapsed;
} }
private void ErrorOccurred(object sender, NativeAdErrorEventArgs e) private void ErrorOccurred(object sender, NativeAdErrorEventArgs e)
@@ -42,6 +42,7 @@ namespace FoxTube.Controls.Adverts
public void Initialize() public void Initialize()
{ {
Visibility = Visibility.Visible;
title.Text = advert.Title; title.Text = advert.Title;
image.Source = new BitmapImage(advert.MainImages.First().Url.ToUri()); image.Source = new BitmapImage(advert.MainImages.First().Url.ToUri());
+1 -1
View File
@@ -44,7 +44,7 @@ namespace FoxTube
avatar = channelAvatar; avatar = channelAvatar;
videoSource.PosterSource = new BitmapImage((meta.Snippet.Thumbnails.Maxres ?? meta.Snippet.Thumbnails.Medium).Url.ToUri()); videoSource.PosterSource = new BitmapImage((meta.Snippet.Thumbnails.Maxres ?? meta.Snippet.Thumbnails.Medium).Url.ToUri());
Controls.SetMeta(meta.Snippet.Title, meta.Snippet.ChannelTitle); Controls.SetMeta(meta.Snippet.Localized.Title, meta.Snippet.ChannelTitle);
if (item.Snippet.LiveBroadcastContent == "none") if (item.Snippet.LiveBroadcastContent == "none")
{ {
+2 -1
View File
@@ -34,9 +34,10 @@ namespace FoxTube.Controls
playlistId = id; playlistId = id;
PlaylistsResource.ListRequest request = SecretsVault.Service.Playlists.List("snippet,contentDetails"); PlaylistsResource.ListRequest request = SecretsVault.Service.Playlists.List("snippet,contentDetails");
request.Id = playlistId; request.Id = playlistId;
request.Hl = SettingsStorage.RelevanceLanguage;
item = (await request.ExecuteAsync()).Items[0]; item = (await request.ExecuteAsync()).Items[0];
title.Text = item.Snippet.Title; title.Text = item.Snippet.Localized.Title;
channelName.Text = item.Snippet.ChannelTitle; channelName.Text = item.Snippet.ChannelTitle;
counter.Text = item.ContentDetails.ItemCount.ToString(); counter.Text = item.ContentDetails.ItemCount.ToString();
date.Text = Methods.GetAgo(item.Snippet.PublishedAt.Value); date.Text = Methods.GetAgo(item.Snippet.PublishedAt.Value);
+5 -5
View File
@@ -83,13 +83,13 @@
<MenuFlyoutItem x:Uid="/Cards/openWeb" Icon="Globe" Text="Open in browser" Name="inBrowser" Click="InBrowser_Click"/> <MenuFlyoutItem x:Uid="/Cards/openWeb" Icon="Globe" Text="Open in browser" Name="inBrowser" Click="InBrowser_Click"/>
<MenuFlyoutItem x:Uid="/Cards/share" Icon="Share" Text="Share" Name="share" Click="share_Click"/> <MenuFlyoutItem x:Uid="/Cards/share" Icon="Share" Text="Share" Name="share" Click="share_Click"/>
<MenuFlyoutSeparator/> <MenuFlyoutSeparator/>
<MenuFlyoutSubItem Icon="Download" Text="Download" Name="download"/> <MenuFlyoutSubItem x:Uid="/Cards/downloads" Icon="Download" Text="Download" Name="download"/>
<MenuFlyoutSubItem Icon="Add" Text="Add to" Name="addTo"> <MenuFlyoutSubItem x:Uid="/Cards/addTo" Icon="Add" Text="Add to" Name="addTo">
<MenuFlyoutItem Text="New playlist" Name="newPlaylist" Click="NewPlaylist_Click" Icon="Add"/> <MenuFlyoutItem x:Uid="/VideoPage/newPlaylist" Text="New playlist" Name="newPlaylist" Click="NewPlaylist_Click" Icon="Add"/>
<ToggleMenuFlyoutItem Text="Watch later" Name="wl" Click="Wl_Click" Icon="Clock"/> <ToggleMenuFlyoutItem x:Uid="/VideoPage/wl" Text="Watch later" Name="wl" Click="Wl_Click" Icon="Clock"/>
<MenuFlyoutSeparator/> <MenuFlyoutSeparator/>
</MenuFlyoutSubItem> </MenuFlyoutSubItem>
<MenuFlyoutItem Text="Remove from playlist" Icon="Delete" Visibility="Collapsed" Name="delete" Click="Delete_Click"/> <MenuFlyoutItem x:Uid="/Cards/delete" Text="Remove from playlist" Icon="Delete" Visibility="Collapsed" Name="delete" Click="Delete_Click"/>
</MenuFlyout> </MenuFlyout>
</UserControl.ContextFlyout> </UserControl.ContextFlyout>
</UserControl> </UserControl>
+20 -21
View File
@@ -53,9 +53,10 @@ namespace FoxTube.Controls
VideosResource.ListRequest request = SecretsVault.Service.Videos.List("snippet,contentDetails,statistics,liveStreamingDetails"); VideosResource.ListRequest request = SecretsVault.Service.Videos.List("snippet,contentDetails,statistics,liveStreamingDetails");
request.Id = id; request.Id = id;
request.Hl = SettingsStorage.RelevanceLanguage;
item = (await request.ExecuteAsync()).Items[0]; item = (await request.ExecuteAsync()).Items[0];
title.Text = item.Snippet.Title; title.Text = item.Snippet.Localized.Title;
channelName.Text = item.Snippet.ChannelTitle; channelName.Text = item.Snippet.ChannelTitle;
if (item.Snippet.Title == "Deleted video") if (item.Snippet.Title == "Deleted video")
@@ -123,7 +124,6 @@ namespace FoxTube.Controls
{ {
try try
{ {
// TODO: Localize context menu
MediaStreamInfoSet infoSet = await new YoutubeClient().GetVideoMediaStreamInfosAsync(videoId); MediaStreamInfoSet infoSet = await new YoutubeClient().GetVideoMediaStreamInfosAsync(videoId);
foreach (MuxedStreamInfo i in infoSet.Muxed) foreach (MuxedStreamInfo i in infoSet.Muxed)
{ {
@@ -276,31 +276,30 @@ namespace FoxTube.Controls
private async void NewPlaylist_Click(object sender, RoutedEventArgs e) private async void NewPlaylist_Click(object sender, RoutedEventArgs e)
{ {
// TODO: Localize strings
StackPanel stack = new StackPanel(); StackPanel stack = new StackPanel();
stack.Children.Add(new TextBox stack.Children.Add(new TextBox
{ {
PlaceholderText = "Enter playlist name" PlaceholderText = resources.GetString("/VideoPage/newPlaylistName/PlaceholderText")
}); });
ComboBox comboBox = new ComboBox ComboBox comboBox = new ComboBox
{ {
Header = "Availablity", Header = resources.GetString("/VideoPage/privacy/Header"),
SelectedIndex = 0, SelectedIndex = 0,
HorizontalAlignment = HorizontalAlignment.Stretch HorizontalAlignment = HorizontalAlignment.Stretch
}; };
comboBox.Items.Add(new ComboBoxItem { Content = "Public" }); comboBox.Items.Add(new ComboBoxItem { Content = resources.GetString("/VideoPage/public/Content") });
comboBox.Items.Add(new ComboBoxItem { Content = "Private" }); comboBox.Items.Add(new ComboBoxItem { Content = resources.GetString("/VideoPage/private/Content") });
comboBox.Items.Add(new ComboBoxItem { Content = "Direct link" }); comboBox.Items.Add(new ComboBoxItem { Content = resources.GetString("/VideoPage/direct/Content") });
stack.Children.Add(comboBox); stack.Children.Add(comboBox);
ContentDialog playlistDialog = new ContentDialog ContentDialog playlistDialog = new ContentDialog
{ {
PrimaryButtonText = "Create and add", PrimaryButtonText = resources.GetString("/VideoPage/dialog/PrimaryButtonText"),
CloseButtonText = "Cancel", CloseButtonText = resources.GetString("/VideoPage/dialog/CloseButtonText"),
DefaultButton = ContentDialogButton.Primary, DefaultButton = ContentDialogButton.Primary,
Title = "New playlist", Title = resources.GetString("/VideoPage/dialog/Title"),
Content = stack Content = stack
}; };
playlistDialog.PrimaryButtonClick += PlaylistDialog_PrimaryButtonClick; playlistDialog.PrimaryButtonClick += PlaylistDialog_PrimaryButtonClick;
@@ -450,18 +449,18 @@ namespace FoxTube.Controls
private async void Delete_Click(object sender, RoutedEventArgs e) private async void Delete_Click(object sender, RoutedEventArgs e)
{ {
PlaylistItemsResource.ListRequest request = SecretsVault.Service.PlaylistItems.List("snippet");
request.PlaylistId = playlistId;
request.VideoId = item.Id;
PlaylistItemListResponse response = await request.ExecuteAsync();
PlaylistItem playlistItem = response.Items.Find(i => i.Snippet.PlaylistId == playlistId);
await SecretsVault.Service.PlaylistItems.Delete(playlistItem.Id).ExecuteAsync();
(Methods.MainPage.PageContent as PlaylistPage).DeleteItem(this);
try try
{ {
PlaylistItemsResource.ListRequest request = SecretsVault.Service.PlaylistItems.List("snippet");
request.PlaylistId = playlistId;
request.VideoId = item.Id;
PlaylistItemListResponse response = await request.ExecuteAsync();
PlaylistItem playlistItem = response.Items.Find(i => i.Snippet.PlaylistId == playlistId);
await SecretsVault.Service.PlaylistItems.Delete(playlistItem.Id).ExecuteAsync();
(Methods.MainPage.PageContent as PlaylistPage).DeleteItem(this);
} }
catch catch
{ {
+1 -1
View File
@@ -38,7 +38,7 @@
<ui:NavigationView.Header> <ui:NavigationView.Header>
<Grid> <Grid>
<TextBlock Text="Home" Name="Title" Style="{StaticResource TitleTextBlockStyle}"/> <TextBlock Name="Title" Style="{StaticResource TitleTextBlockStyle}"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button x:Uid="/Main/feedback" Name="feedback" Click="Feedback_Click" Visibility="Collapsed" FontFamily="Segoe MDL2 Assets" Content="&#xED15;" Background="Transparent" Height="41" Width="60" FontSize="15"/> <Button x:Uid="/Main/feedback" Name="feedback" Click="Feedback_Click" Visibility="Collapsed" FontFamily="Segoe MDL2 Assets" Content="&#xED15;" Background="Transparent" Height="41" Width="60" FontSize="15"/>
<Button x:Uid="/Main/signIn" Name="account" Click="SignIn_Click" Visibility="Collapsed" FontFamily="Segoe MDL2 Assets" Content="&#xE8FA;" Background="Transparent" Height="41" Width="60" FontSize="15"/> <Button x:Uid="/Main/signIn" Name="account" Click="SignIn_Click" Visibility="Collapsed" FontFamily="Segoe MDL2 Assets" Content="&#xE8FA;" Background="Transparent" Height="41" Width="60" FontSize="15"/>
+15 -16
View File
@@ -47,10 +47,10 @@ namespace FoxTube
removeAds.Visibility = (e[0] as bool?).Value ? Visibility.Collapsed : Visibility.Visible; removeAds.Visibility = (e[0] as bool?).Value ? Visibility.Collapsed : Visibility.Visible;
if (!(bool)e[0]) if (!(bool)e[0])
return; return;
//TODO: Localize strings
MessageDialog dialog = new MessageDialog("Thanks for purchasing full version of the app (^∇^) In order to complete changes we need to reopen it. But you can do it later"); MessageDialog dialog = new MessageDialog(resources.GetString("/Main/purchaseSuccess"));
dialog.Commands.Add(new UICommand("Close the app", (command) => Methods.CloseApp())); dialog.Commands.Add(new UICommand(resources.GetString("/Main/close"), (command) => Methods.CloseApp()));
dialog.Commands.Add(new UICommand("Later")); dialog.Commands.Add(new UICommand(resources.GetString("/Main/delay")));
dialog.CancelCommandIndex = 1; dialog.CancelCommandIndex = 1;
dialog.DefaultCommandIndex = 0; dialog.DefaultCommandIndex = 0;
await dialog.ShowAsync(); await dialog.ShowAsync();
@@ -83,22 +83,21 @@ namespace FoxTube
async void PromptFeedback() async void PromptFeedback()
{ {
//TODO: Localize strings
if (SettingsStorage.Uptime.TotalHours >= 12 && SettingsStorage.PromptFeedback) if (SettingsStorage.Uptime.TotalHours >= 12 && SettingsStorage.PromptFeedback)
{ {
MessageDialog dialog = new MessageDialog("Have some thoughts to share about the app or any suggestions? Leave feedback!"); MessageDialog dialog = new MessageDialog(resources.GetString("/Main/feedbackMessage"));
dialog.Commands.Add(new UICommand("Don't ask me anymore", (command) => SettingsStorage.PromptFeedback = false)); dialog.Commands.Add(new UICommand(resources.GetString("/Main/dontAsk"), (command) => SettingsStorage.PromptFeedback = false));
dialog.Commands.Add(new UICommand("Maybe later")); dialog.Commands.Add(new UICommand(resources.GetString("/Main/promptLater")));
dialog.Commands.Add(new UICommand("Sure!", async (command) => dialog.Commands.Add(new UICommand(resources.GetString("/Main/sure"), async (command) =>
{ {
SettingsStorage.PromptFeedback = false; SettingsStorage.PromptFeedback = false;
if (StoreServicesFeedbackLauncher.IsSupported()) if (StoreServicesFeedbackLauncher.IsSupported())
await StoreServicesFeedbackLauncher.GetDefault().LaunchAsync(); await StoreServicesFeedbackLauncher.GetDefault().LaunchAsync();
else else
{ {
MessageDialog message = new MessageDialog("Oops. Seems like you don't have a Feedback Hub app. But you can stil send your feedback to michael.xfox@outlook.com"); MessageDialog message = new MessageDialog(resources.GetString("/Main/feedbackFail"));
message.Commands.Add(new UICommand("Send an E-mail", async (c) => await Launcher.LaunchUriAsync("mailto:michael.xfox@outlook.com".ToUri()))); message.Commands.Add(new UICommand(resources.GetString("/Main/sendEmail"), async (c) => await Launcher.LaunchUriAsync("mailto:michael.xfox@outlook.com".ToUri())));
message.Commands.Add(new UICommand("Nevermind. Get me back")); message.Commands.Add(new UICommand(resources.GetString("/Main/goBack")));
message.CancelCommandIndex = 1; message.CancelCommandIndex = 1;
message.DefaultCommandIndex = 0; message.DefaultCommandIndex = 0;
await message.ShowAsync(); await message.ShowAsync();
@@ -111,10 +110,10 @@ namespace FoxTube
if (SettingsStorage.Uptime.TotalHours >= 24 && SettingsStorage.PromptReview) if (SettingsStorage.Uptime.TotalHours >= 24 && SettingsStorage.PromptReview)
{ {
MessageDialog dialog = new MessageDialog("Like our app? Review it on Microsoft Store!"); MessageDialog dialog = new MessageDialog(resources.GetString("/Main/rate"));
dialog.Commands.Add(new UICommand("Don't ask me anymore", (command) => SettingsStorage.PromptReview = false)); dialog.Commands.Add(new UICommand(resources.GetString("/Main/dontAsk"), (command) => SettingsStorage.PromptReview = false));
dialog.Commands.Add(new UICommand("Maybe later")); dialog.Commands.Add(new UICommand(resources.GetString("/Main/promptLater")));
dialog.Commands.Add(new UICommand("Sure!", async (command) => dialog.Commands.Add(new UICommand(resources.GetString("/Main/sure"), async (command) =>
{ {
SettingsStorage.PromptReview = false; SettingsStorage.PromptReview = false;
await Launcher.LaunchUriAsync("ms-windows-store://review/?ProductId=9NCQQXJTDLFH".ToUri()); await Launcher.LaunchUriAsync("ms-windows-store://review/?ProductId=9NCQQXJTDLFH".ToUri());
+3 -2
View File
@@ -54,12 +54,13 @@ namespace FoxTube.Pages
PlaylistsResource.ListRequest infoRequest = SecretsVault.Service.Playlists.List("snippet,contentDetails"); PlaylistsResource.ListRequest infoRequest = SecretsVault.Service.Playlists.List("snippet,contentDetails");
infoRequest.Id = id; infoRequest.Id = id;
infoRequest.Hl = SettingsStorage.RelevanceLanguage;
item = (await infoRequest.ExecuteAsync()).Items[0]; item = (await infoRequest.ExecuteAsync()).Items[0];
title.Text = item.Snippet.Title; title.Text = item.Snippet.Localized.Title;
info.Text = $"{item.ContentDetails.ItemCount} {ResourceLoader.GetForCurrentView("Playlist").GetString("/Playlist/videos")}"; info.Text = $"{item.ContentDetails.ItemCount} {ResourceLoader.GetForCurrentView("Playlist").GetString("/Playlist/videos")}";
description.Text = item.Snippet.Description; description.Text = item.Snippet.Localized.Description;
channelName.Text = item.Snippet.ChannelTitle; channelName.Text = item.Snippet.ChannelTitle;
+1 -1
View File
@@ -18,7 +18,7 @@
<TextBlock x:Uid="/General/restart" Foreground="Red" Text="Reopen the app to apply settings"/> <TextBlock x:Uid="/General/restart" Foreground="Red" Text="Reopen the app to apply settings"/>
<Button x:Uid="/General/closeApp" Content="Close app" Background="Red" Margin="5" Click="Button_Click"/> <Button x:Uid="/General/closeApp" Content="Close app" Background="Red" Margin="5" Click="Button_Click"/>
</StackPanel> </StackPanel>
<ComboBox Header="Search relevance language" MinWidth="250" Name="relLanguage" SelectionChanged="RelLanguage_SelectionChanged"/> <ComboBox x:Uid="/General/relevanceLanguage" Header="Search relevance language" MinWidth="250" Name="relLanguage" SelectionChanged="RelLanguage_SelectionChanged"/>
<ComboBox x:Uid="/General/region" Header="Region" MinWidth="250" Name="region" SelectionChanged="region_SelectionChanged"/> <ComboBox x:Uid="/General/region" Header="Region" MinWidth="250" Name="region" SelectionChanged="region_SelectionChanged"/>
<ComboBox x:Uid="/General/safeSearch" Header="SafeSearch" MinWidth="250" Name="safeSearch" SelectionChanged="safeSearch_SelectionChanged"> <ComboBox x:Uid="/General/safeSearch" Header="SafeSearch" MinWidth="250" Name="safeSearch" SelectionChanged="safeSearch_SelectionChanged">
<ComboBoxItem x:Uid="/General/moderate" Content="Moderate"/> <ComboBoxItem x:Uid="/General/moderate" Content="Moderate"/>
+8 -8
View File
@@ -112,8 +112,8 @@
<AppBarButton x:Uid="/VideoPage/addTo" Name="addTo" Label="Add to" Icon="Add" Visibility="Visible"> <AppBarButton x:Uid="/VideoPage/addTo" Name="addTo" Label="Add to" Icon="Add" Visibility="Visible">
<AppBarButton.Flyout> <AppBarButton.Flyout>
<MenuFlyout x:Name="addList"> <MenuFlyout x:Name="addList">
<MenuFlyoutItem Text="New playlist" Name="newPlaylist" Click="NewPlaylist_Click" Icon="Add"/> <MenuFlyoutItem x:Uid="/VideoPage/newPlaylist" Text="New playlist" Name="newPlaylist" Click="NewPlaylist_Click" Icon="Add"/>
<ToggleMenuFlyoutItem Text="Watch later" Name="wl" Click="Wl_Click" Icon="Clock"/> <ToggleMenuFlyoutItem x:Uid="/VideoPage/wl" Text="Watch later" Name="wl" Click="Wl_Click" Icon="Clock"/>
<MenuFlyoutSeparator/> <MenuFlyoutSeparator/>
</MenuFlyout> </MenuFlyout>
</AppBarButton.Flyout> </AppBarButton.Flyout>
@@ -163,13 +163,13 @@
</Pivot> </Pivot>
</Grid> </Grid>
<ContentDialog PrimaryButtonText="Create and add" Title="New playlist" CloseButtonText="Cancel" DefaultButton="Primary" PrimaryButtonClick="ContentDialog_PrimaryButtonClick" Name="playlistDialog"> <ContentDialog x:Uid="/VideoPage/dialog" PrimaryButtonText="Create and add" Title="New playlist" CloseButtonText="Cancel" DefaultButton="Primary" PrimaryButtonClick="ContentDialog_PrimaryButtonClick" Name="playlistDialog">
<StackPanel> <StackPanel>
<TextBox PlaceholderText="Enter playlist name" Name="newListName"/> <TextBox x:Uid="/VideoPage/newPlaylistName" PlaceholderText="Enter playlist name" Name="newListName"/>
<ComboBox Header="Availablity" SelectedIndex="0" HorizontalAlignment="Stretch" Name="newListDisc"> <ComboBox x:Uid="/VideoPage/privacy" Header="Availablity" SelectedIndex="0" HorizontalAlignment="Stretch" Name="newListDisc">
<ComboBoxItem Content="Public"/> <ComboBoxItem x:Uid="/VideoPage/public" Content="Public"/>
<ComboBoxItem Content="Private"/> <ComboBoxItem x:Uid="/VideoPage/private" Content="Private"/>
<ComboBoxItem Content="Direct link"/> <ComboBoxItem x:Uid="/VideoPage/direct" Content="Direct link"/>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
</ContentDialog> </ContentDialog>
+5 -4
View File
@@ -113,6 +113,7 @@ namespace FoxTube.Pages
VideosResource.ListRequest request = SecretsVault.Service.Videos.List("snippet,statistics,status,contentDetails,liveStreamingDetails"); VideosResource.ListRequest request = SecretsVault.Service.Videos.List("snippet,statistics,status,contentDetails,liveStreamingDetails");
request.Id = ids[0]; request.Id = ids[0];
request.Hl = SettingsStorage.RelevanceLanguage;
item = (await request.ExecuteAsync()).Items[0]; item = (await request.ExecuteAsync()).Items[0];
if (item.Snippet.LiveBroadcastContent == "none") if (item.Snippet.LiveBroadcastContent == "none")
@@ -183,6 +184,7 @@ namespace FoxTube.Pages
//Retrieving data //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 = id;
playlistRequest.Hl = SettingsStorage.RelevanceLanguage;
Playlist playlistItem = (await playlistRequest.ExecuteAsync()).Items[0]; Playlist playlistItem = (await playlistRequest.ExecuteAsync()).Items[0];
PlaylistItemsResource.ListRequest listRequest = SecretsVault.Service.PlaylistItems.List("snippet"); PlaylistItemsResource.ListRequest listRequest = SecretsVault.Service.PlaylistItems.List("snippet");
@@ -206,7 +208,7 @@ namespace FoxTube.Pages
items[k].Number = k + 1; items[k].Number = k + 1;
//Setting data //Setting data
playlistName.Text = playlistItem.Snippet.Title; playlistName.Text = playlistItem.Snippet.Localized.Title;
playlistChannel.Text = playlistItem.Snippet.ChannelTitle; playlistChannel.Text = playlistItem.Snippet.ChannelTitle;
playlistCounter.Text = $"{items.IndexOf(selection) + 1}/{playlistItem.ContentDetails.ItemCount}"; playlistCounter.Text = $"{items.IndexOf(selection) + 1}/{playlistItem.ContentDetails.ItemCount}";
@@ -226,9 +228,9 @@ namespace FoxTube.Pages
async void LoadInfo() async void LoadInfo()
{ {
//Setting meta //Setting meta
title.Text = item.Snippet.Title; title.Text = item.Snippet.Localized.Title;
date.Text = $"{resources.GetString("/VideoPage/publishedAt")}: {item.Snippet.PublishedAt} ({Methods.GetAgo(item.Snippet.PublishedAt.Value)})"; date.Text = $"{resources.GetString("/VideoPage/publishedAt")}: {item.Snippet.PublishedAt} ({Methods.GetAgo(item.Snippet.PublishedAt.Value)})";
Methods.FormatText(ref description, item.Snippet.Description); Methods.FormatText(ref description, item.Snippet.Localized.Description);
//Setting channel button //Setting channel button
ChannelsResource.ListRequest channelRequest = SecretsVault.Service.Channels.List("snippet, statistics"); ChannelsResource.ListRequest channelRequest = SecretsVault.Service.Channels.List("snippet, statistics");
@@ -652,7 +654,6 @@ namespace FoxTube.Pages
private async void NewPlaylist_Click(object sender, RoutedEventArgs e) private async void NewPlaylist_Click(object sender, RoutedEventArgs e)
{ {
//TODO: Localize strings
await playlistDialog.ShowAsync(); await playlistDialog.ShowAsync();
} }
+9
View File
@@ -186,4 +186,13 @@
<data name="watched.Text" xml:space="preserve"> <data name="watched.Text" xml:space="preserve">
<value>Watched</value> <value>Watched</value>
</data> </data>
<data name="addTo.Text" xml:space="preserve">
<value>Add to</value>
</data>
<data name="delete.Text" xml:space="preserve">
<value>Delete from playlist</value>
</data>
<data name="downloads.Text" xml:space="preserve">
<value>Downloads</value>
</data>
</root> </root>
+4 -1
View File
@@ -184,7 +184,7 @@
<value>Remember my choice</value> <value>Remember my choice</value>
</data> </data>
<data name="restart.Text" xml:space="preserve"> <data name="restart.Text" xml:space="preserve">
<value>Reopen the app to apply changes</value> <value>Reopen the app to apply changes (otherwise some elements may not be displayed correctly)</value>
</data> </data>
<data name="ru.Content" xml:space="preserve"> <data name="ru.Content" xml:space="preserve">
<value>Russian (Russian Federation)</value> <value>Russian (Russian Federation)</value>
@@ -204,4 +204,7 @@
<data name="devNotifications.OnContent" xml:space="preserve"> <data name="devNotifications.OnContent" xml:space="preserve">
<value>Recieve messages from developers</value> <value>Recieve messages from developers</value>
</data> </data>
<data name="relevanceLanguage.Header" xml:space="preserve">
<value>Search relevance language</value>
</data>
</root> </root>
+33
View File
@@ -126,18 +126,36 @@
<data name="channel" xml:space="preserve"> <data name="channel" xml:space="preserve">
<value>Channel</value> <value>Channel</value>
</data> </data>
<data name="close" xml:space="preserve">
<value>Close the app</value>
</data>
<data name="connectErrContent" xml:space="preserve"> <data name="connectErrContent" xml:space="preserve">
<value>We were unabled to retrieve your account information due to weak internet connection or Google servers' problems. PLease, try again later</value> <value>We were unabled to retrieve your account information due to weak internet connection or Google servers' problems. PLease, try again later</value>
</data> </data>
<data name="connectErrHeader" xml:space="preserve"> <data name="connectErrHeader" xml:space="preserve">
<value>Failed to connect</value> <value>Failed to connect</value>
</data> </data>
<data name="delay" xml:space="preserve">
<value>Later</value>
</data>
<data name="dontAsk" xml:space="preserve">
<value>Don't ask me anymore</value>
</data>
<data name="downloads.Content" xml:space="preserve"> <data name="downloads.Content" xml:space="preserve">
<value>Downloads</value> <value>Downloads</value>
</data> </data>
<data name="feedback.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="feedback.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>Give a feedback</value> <value>Give a feedback</value>
</data> </data>
<data name="feedbackFail" xml:space="preserve">
<value>Oops. Seems like you don't have a Feedback Hub app. But you can stil send your feedback to michael.xfox@outlook.com</value>
</data>
<data name="feedbackMessage" xml:space="preserve">
<value>Have some thoughts to share about the app or any suggestions? Leave feedback!</value>
</data>
<data name="goBack" xml:space="preserve">
<value>Nevermind. Get me back</value>
</data>
<data name="history.Content" xml:space="preserve"> <data name="history.Content" xml:space="preserve">
<value>History</value> <value>History</value>
</data> </data>
@@ -168,12 +186,24 @@
<data name="playlist" xml:space="preserve"> <data name="playlist" xml:space="preserve">
<value>Playlist</value> <value>Playlist</value>
</data> </data>
<data name="promptLater" xml:space="preserve">
<value>Maybe later</value>
</data>
<data name="purchaseSuccess" xml:space="preserve">
<value>Thanks for purchasing full version of the app (^∇^) In order to complete changes we need to reopen it. But you can do it later (some elements may be broken)</value>
</data>
<data name="quit" xml:space="preserve"> <data name="quit" xml:space="preserve">
<value>Quit</value> <value>Quit</value>
</data> </data>
<data name="rate" xml:space="preserve">
<value>Like our app? Review it on Microsoft Store!</value>
</data>
<data name="searchPlaceholder.PlaceholderText" xml:space="preserve"> <data name="searchPlaceholder.PlaceholderText" xml:space="preserve">
<value>Search</value> <value>Search</value>
</data> </data>
<data name="sendEmail" xml:space="preserve">
<value>Send an E-mail</value>
</data>
<data name="settings.Content" xml:space="preserve"> <data name="settings.Content" xml:space="preserve">
<value>Settings</value> <value>Settings</value>
</data> </data>
@@ -192,6 +222,9 @@
<data name="subscriptions.Content" xml:space="preserve"> <data name="subscriptions.Content" xml:space="preserve">
<value>Subscriptions</value> <value>Subscriptions</value>
</data> </data>
<data name="sure" xml:space="preserve">
<value>Sure!</value>
</data>
<data name="tryAgain" xml:space="preserve"> <data name="tryAgain" xml:space="preserve">
<value>Try again</value> <value>Try again</value>
</data> </data>
+30
View File
@@ -264,4 +264,34 @@
<data name="publishedAt" xml:space="preserve"> <data name="publishedAt" xml:space="preserve">
<value>Published at</value> <value>Published at</value>
</data> </data>
<data name="dialog.CloseButtonText" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="dialog.PrimaryButtonText" xml:space="preserve">
<value>Create and add</value>
</data>
<data name="dialog.Title" xml:space="preserve">
<value>New playlist</value>
</data>
<data name="direct.Content" xml:space="preserve">
<value>Direct link</value>
</data>
<data name="newPlaylist.Text" xml:space="preserve">
<value>New playlist</value>
</data>
<data name="newPlaylistName.PlaceholderText" xml:space="preserve">
<value>Enter playlist name</value>
</data>
<data name="privacy.Header" xml:space="preserve">
<value>Availability</value>
</data>
<data name="private.Content" xml:space="preserve">
<value>Private</value>
</data>
<data name="public.Content" xml:space="preserve">
<value>Public</value>
</data>
<data name="wl.Text" xml:space="preserve">
<value>Watch later</value>
</data>
</root> </root>
+9
View File
@@ -186,4 +186,13 @@
<data name="watched.Text" xml:space="preserve"> <data name="watched.Text" xml:space="preserve">
<value>Просмотрено</value> <value>Просмотрено</value>
</data> </data>
<data name="addTo.Text" xml:space="preserve">
<value>Добавить в</value>
</data>
<data name="delete.Text" xml:space="preserve">
<value>Удалить из плейлиста</value>
</data>
<data name="downloads.Text" xml:space="preserve">
<value>Загрузки</value>
</data>
</root> </root>
+4 -1
View File
@@ -184,7 +184,7 @@
<value>Запомнить мой выбор</value> <value>Запомнить мой выбор</value>
</data> </data>
<data name="restart.Text" xml:space="preserve"> <data name="restart.Text" xml:space="preserve">
<value>Перезапустите приложение, чтобы применить настройки</value> <value>Перезапустите приложение, чтобы применить настройки (в противном случае некоторые элементы могут неправильно отображаться)</value>
</data> </data>
<data name="ru.Content" xml:space="preserve"> <data name="ru.Content" xml:space="preserve">
<value>Русский (Российская Федерация)</value> <value>Русский (Российская Федерация)</value>
@@ -204,4 +204,7 @@
<data name="devNotifications.OnContent" xml:space="preserve"> <data name="devNotifications.OnContent" xml:space="preserve">
<value>Получать уведомления от разработчиков</value> <value>Получать уведомления от разработчиков</value>
</data> </data>
<data name="relevanceLanguage.Header" xml:space="preserve">
<value>Предпочитаемый язык поиска</value>
</data>
</root> </root>
+33
View File
@@ -126,18 +126,36 @@
<data name="channel" xml:space="preserve"> <data name="channel" xml:space="preserve">
<value>Канал</value> <value>Канал</value>
</data> </data>
<data name="close" xml:space="preserve">
<value>Закрыть приложение</value>
</data>
<data name="connectErrContent" xml:space="preserve"> <data name="connectErrContent" xml:space="preserve">
<value>Нам не удалось подключиться к серверу из-за плохого соединения или проблем на стороне YouTube. Пожалуйста, попробуйте позже</value> <value>Нам не удалось подключиться к серверу из-за плохого соединения или проблем на стороне YouTube. Пожалуйста, попробуйте позже</value>
</data> </data>
<data name="connectErrHeader" xml:space="preserve"> <data name="connectErrHeader" xml:space="preserve">
<value>Не удалось подключиться</value> <value>Не удалось подключиться</value>
</data> </data>
<data name="delay" xml:space="preserve">
<value>Позже</value>
</data>
<data name="dontAsk" xml:space="preserve">
<value>Больше не спрашивайте меня</value>
</data>
<data name="downloads.Content" xml:space="preserve"> <data name="downloads.Content" xml:space="preserve">
<value>Загрузки</value> <value>Загрузки</value>
</data> </data>
<data name="feedback.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="feedback.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>Оставить отзыв</value> <value>Оставить отзыв</value>
</data> </data>
<data name="feedbackFail" xml:space="preserve">
<value>Ой. Похоже, у вас нет приложения "Центр отзывов". Но вы все еще можете отправить свой отзыв по почте</value>
</data>
<data name="feedbackMessage" xml:space="preserve">
<value>Есть мысли или идеи по поводу нашего приложения? Оставьте отзыв!</value>
</data>
<data name="goBack" xml:space="preserve">
<value>Не важно. Я передумал</value>
</data>
<data name="history.Content" xml:space="preserve"> <data name="history.Content" xml:space="preserve">
<value>История</value> <value>История</value>
</data> </data>
@@ -168,12 +186,24 @@
<data name="playlist" xml:space="preserve"> <data name="playlist" xml:space="preserve">
<value>Плейлист</value> <value>Плейлист</value>
</data> </data>
<data name="promptLater" xml:space="preserve">
<value>Может, позже</value>
</data>
<data name="purchaseSuccess" xml:space="preserve">
<value>Спасибо за покупку полной версии приложения (^∇^) Для завершения настройки нам необходимо перезапустить приложение. Но вы можете сделать это позже (некоторые элементы могут неправильно отображаться)</value>
</data>
<data name="quit" xml:space="preserve"> <data name="quit" xml:space="preserve">
<value>Выйти</value> <value>Выйти</value>
</data> </data>
<data name="rate" xml:space="preserve">
<value>Нравится наше приложение? Напишите отзыв в магазине Майкрософт!</value>
</data>
<data name="searchPlaceholder.PlaceholderText" xml:space="preserve"> <data name="searchPlaceholder.PlaceholderText" xml:space="preserve">
<value>Поиск</value> <value>Поиск</value>
</data> </data>
<data name="sendEmail" xml:space="preserve">
<value>Отправить письмо</value>
</data>
<data name="settings.Content" xml:space="preserve"> <data name="settings.Content" xml:space="preserve">
<value>Настройки</value> <value>Настройки</value>
</data> </data>
@@ -192,6 +222,9 @@
<data name="subscriptions.Content" xml:space="preserve"> <data name="subscriptions.Content" xml:space="preserve">
<value>Подписки</value> <value>Подписки</value>
</data> </data>
<data name="sure" xml:space="preserve">
<value>Конечно!</value>
</data>
<data name="tryAgain" xml:space="preserve"> <data name="tryAgain" xml:space="preserve">
<value>Попробовать снова</value> <value>Попробовать снова</value>
</data> </data>
+30
View File
@@ -264,4 +264,34 @@
<data name="publishedAt" xml:space="preserve"> <data name="publishedAt" xml:space="preserve">
<value>Опубликовано</value> <value>Опубликовано</value>
</data> </data>
<data name="dialog.CloseButtonText" xml:space="preserve">
<value>Отмена</value>
</data>
<data name="dialog.PrimaryButtonText" xml:space="preserve">
<value>Создать и добавить</value>
</data>
<data name="dialog.Title" xml:space="preserve">
<value>Новый плейлист</value>
</data>
<data name="direct.Content" xml:space="preserve">
<value>Прямая ссылка</value>
</data>
<data name="newPlaylist.Text" xml:space="preserve">
<value>Новый плейлист</value>
</data>
<data name="newPlaylistName.PlaceholderText" xml:space="preserve">
<value>Введите название плейлиста</value>
</data>
<data name="privacy.Header" xml:space="preserve">
<value>Доступность</value>
</data>
<data name="private.Content" xml:space="preserve">
<value>Закрытый</value>
</data>
<data name="public.Content" xml:space="preserve">
<value>Публичный</value>
</data>
<data name="wl.Text" xml:space="preserve">
<value>Посмотреть позже</value>
</data>
</root> </root>