Refactored player. Refactored changelog system. Players isn't localized
Related Work Items: #161, #211, #238
This commit is contained in:
@@ -136,6 +136,7 @@
|
|||||||
<HintPath>..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\UWPNuGetPackages\microsoft.netcore.universalwindowsplatform\6.1.5\ref\uap10.0.15138\System.Net.WebClient.dll</HintPath>
|
<HintPath>..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\UWPNuGetPackages\microsoft.netcore.universalwindowsplatform\6.1.5\ref\uap10.0.15138\System.Net.WebClient.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup />
|
||||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|||||||
@@ -1,10 +1,39 @@
|
|||||||
using Windows.Data.Xml.Dom;
|
using Newtonsoft.Json;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
|
using Windows.Data.Xml.Dom;
|
||||||
|
using Windows.Storage;
|
||||||
using Windows.UI.Notifications;
|
using Windows.UI.Notifications;
|
||||||
|
|
||||||
namespace FoxTube.Background
|
namespace FoxTube.Background
|
||||||
{
|
{
|
||||||
public static class Notification
|
public static class Notification
|
||||||
{
|
{
|
||||||
|
private static Dictionary<string, string> languagePack = LoadPack();
|
||||||
|
|
||||||
|
private static Dictionary<string, string> LoadPack()
|
||||||
|
{
|
||||||
|
object[] saved = JsonConvert.DeserializeObject<object[]>(ApplicationData.Current.RoamingSettings.Values["settings"] as string);
|
||||||
|
if (saved[7] as string == "ru-RU")
|
||||||
|
return new Dictionary<string, string>()
|
||||||
|
{
|
||||||
|
{ "addLater", "Добавить в Посмотреть позже" },
|
||||||
|
{ "changelog", "Список изменений" },
|
||||||
|
{ "changelogHeader", "Что нового в версии" },
|
||||||
|
{ "videoContent", "загрузил новое видео" },
|
||||||
|
{ "goChannel", "Открыть канал" }
|
||||||
|
};
|
||||||
|
else
|
||||||
|
return new Dictionary<string, string>()
|
||||||
|
{
|
||||||
|
{ "addLater", "Add to Watch later" },
|
||||||
|
{ "changelog", "Changelog" },
|
||||||
|
{ "changelogHeader", "What's new in version" },
|
||||||
|
{ "videoContent", "uploaded a new video" },
|
||||||
|
{ "goChannel", "Go to channel" }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public static ToastNotification GetChangelogToast(string version)
|
public static ToastNotification GetChangelogToast(string version)
|
||||||
{
|
{
|
||||||
XmlDocument template = new XmlDocument();
|
XmlDocument template = new XmlDocument();
|
||||||
@@ -14,8 +43,8 @@ namespace FoxTube.Background
|
|||||||
<binding template='ToastGeneric'>
|
<binding template='ToastGeneric'>
|
||||||
<image placement='hero' src='http://foxgame-studio.000webhostapp.com/FoxTubeAssets/WhatsNewThumb.png'/>
|
<image placement='hero' src='http://foxgame-studio.000webhostapp.com/FoxTubeAssets/WhatsNewThumb.png'/>
|
||||||
<image placement='appLogoOverride' hint-crop='circle' src='http://foxgame-studio.000webhostapp.com/FoxTubeAssets/NewsAvatar.png'/>
|
<image placement='appLogoOverride' hint-crop='circle' src='http://foxgame-studio.000webhostapp.com/FoxTubeAssets/NewsAvatar.png'/>
|
||||||
<text>Changelog</text>
|
<text>{languagePack["changelog"]}</text>
|
||||||
<text>See what's new in version {version}</text>
|
<text>{languagePack["changelogHeader"]} {version}</text>
|
||||||
</binding>
|
</binding>
|
||||||
</visual>
|
</visual>
|
||||||
</toast>");
|
</toast>");
|
||||||
@@ -33,13 +62,13 @@ namespace FoxTube.Background
|
|||||||
<image placement='hero' src='{thumbnail.Replace("&", "%26")}'/>
|
<image placement='hero' src='{thumbnail.Replace("&", "%26")}'/>
|
||||||
<image placement='appLogoOverride' hint-crop='circle' src='{avatar.Replace("&", "%26") ?? "http://foxgame-studio.000webhostapp.com/FoxTubeAssets/LogoAvatar.png"}'/>
|
<image placement='appLogoOverride' hint-crop='circle' src='{avatar.Replace("&", "%26") ?? "http://foxgame-studio.000webhostapp.com/FoxTubeAssets/LogoAvatar.png"}'/>
|
||||||
<text>{title}</text>
|
<text>{title}</text>
|
||||||
<text>{channel} uploaded a new video</text>
|
<text>{channel} {languagePack["videoContent"]}</text>
|
||||||
</binding>
|
</binding>
|
||||||
</visual>
|
</visual>
|
||||||
|
|
||||||
<actions>
|
<actions>
|
||||||
<action content='Add to Watch later' activationType='background' arguments='later|{id}'/>
|
<action content='{languagePack["addLater"]}' activationType='background' arguments='later|{id}'/>
|
||||||
<action content='Go to channel' activationType='foreground' arguments='channel|{channelId}'/>
|
<action content='{languagePack["goChannel"]}' activationType='foreground' arguments='channel|{channelId}'/>
|
||||||
</actions>
|
</actions>
|
||||||
</toast>");
|
</toast>");
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,25 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<items>
|
<items>
|
||||||
<item time="2018-07-29T23:00:00-03" version="1.0.1">
|
<item time="2019-01-02T10:00:00-03" version="0.2.1901">
|
||||||
<content>Announcement body (beware of special characters)</content>
|
<content>### Что нового:
|
||||||
|
|
||||||
|
- По умолчанию для карточек загружается максимальное разрешение картинки
|
||||||
|
- Пофикшен рассинхрон и теперь поддерживаются все возможные разрешения
|
||||||
|
- Добавлена поддержка прямого эфира (включая чат и обновление зрителей в реальном времени)
|
||||||
|
- Пофикшен плеер
|
||||||
|
- Добавлен новый логотип
|
||||||
|
- Исправлен баг неправильного отображения оставшегося времени если осталось больше часа
|
||||||
|
- Обновлена локализация
|
||||||
|
- Контекстное меню карточек
|
||||||
|
- Мелкие багфиксы
|
||||||
|
- Обновлена система хранения настроек
|
||||||
|
- Теперь чейнджлоги будут здесь, а не в файле
|
||||||
|
|
||||||
|
### Что по-прежнему не работает:
|
||||||
|
|
||||||
|
- Страница рекомендованных видео и страница видео с подписок
|
||||||
|
- История
|
||||||
|
- Работа с плейлистами</content>
|
||||||
</item>
|
</item>
|
||||||
</items>
|
</items>
|
||||||
<!--<item time="YYYY-MM-DDThh:mm:ss-03" version="1.0.1">
|
<!--<item time="YYYY-MM-DDThh:mm:ss-03" version="1.0.1">
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace FoxTube.Classes
|
|
||||||
{
|
|
||||||
public class Caption
|
|
||||||
{
|
|
||||||
public TimeSpan Start { get; private set; }
|
|
||||||
public TimeSpan Duration { get; private set; }
|
|
||||||
public TimeSpan End
|
|
||||||
{
|
|
||||||
get { return Start + Duration; }
|
|
||||||
}
|
|
||||||
public string Text { get; private set; }
|
|
||||||
|
|
||||||
public Caption(int startTime, int duration, string text)
|
|
||||||
{
|
|
||||||
Start = TimeSpan.FromMilliseconds(startTime);
|
|
||||||
Duration = TimeSpan.FromMilliseconds(duration);
|
|
||||||
Text = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Caption(double startTime, double duration, string text)
|
|
||||||
{
|
|
||||||
Start = TimeSpan.FromSeconds(startTime);
|
|
||||||
Duration = TimeSpan.FromSeconds(duration);
|
|
||||||
Text = text;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
|
|
||||||
namespace FoxTube.Classes
|
namespace FoxTube.Classes
|
||||||
{
|
{
|
||||||
@@ -14,6 +15,8 @@ namespace FoxTube.Classes
|
|||||||
public string Content { get; set; }
|
public string Content { get; set; }
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
private ResourceLoader resources = ResourceLoader.GetForCurrentView("Inbox");
|
||||||
|
|
||||||
public string Icon
|
public string Icon
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -29,9 +32,9 @@ namespace FoxTube.Classes
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (Type == InboxItemType.PatchNote)
|
if (Type == InboxItemType.PatchNote)
|
||||||
return "Patch note";
|
return resources.GetString("changelog");
|
||||||
else
|
else
|
||||||
return "Developer's message";
|
return resources.GetString("dev");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,7 +43,7 @@ namespace FoxTube.Classes
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (Type == InboxItemType.PatchNote)
|
if (Type == InboxItemType.PatchNote)
|
||||||
return $"What's new in v{Id}";
|
return $"{resources.GetString("whatsnew")}{Id}";
|
||||||
else
|
else
|
||||||
return Subject;
|
return Subject;
|
||||||
}
|
}
|
||||||
|
|||||||
+40
-14
@@ -10,6 +10,7 @@ using System.Web;
|
|||||||
using System.Xml;
|
using System.Xml;
|
||||||
using Windows.ApplicationModel.Core;
|
using Windows.ApplicationModel.Core;
|
||||||
using Windows.ApplicationModel.DataTransfer;
|
using Windows.ApplicationModel.DataTransfer;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
using Windows.Storage;
|
using Windows.Storage;
|
||||||
using Windows.Storage.Streams;
|
using Windows.Storage.Streams;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
@@ -24,6 +25,7 @@ namespace FoxTube
|
|||||||
{
|
{
|
||||||
public static class Methods
|
public static class Methods
|
||||||
{
|
{
|
||||||
|
private static ResourceLoader resources = ResourceLoader.GetForCurrentView("Methods");
|
||||||
public static CommentsPage CommentsPage { get; set; }
|
public static CommentsPage CommentsPage { get; set; }
|
||||||
|
|
||||||
public static bool NeedToResponse { get; set; } = false;
|
public static bool NeedToResponse { get; set; } = false;
|
||||||
@@ -42,6 +44,30 @@ namespace FoxTube
|
|||||||
return new Uri(url);
|
return new Uri(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string GetChars(this string str, int count)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string s = "";
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
s += str[i];
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<object> ToReversedList(this Array array)
|
||||||
|
{
|
||||||
|
List<object> list = new List<object>();
|
||||||
|
foreach (object i in array)
|
||||||
|
list.Add(i);
|
||||||
|
list.Reverse();
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
public static void ForEach<T>(this IEnumerable<T> array, Action<T> action)
|
public static void ForEach<T>(this IEnumerable<T> array, Action<T> action)
|
||||||
{
|
{
|
||||||
array.ToList().ForEach(action);
|
array.ToList().ForEach(action);
|
||||||
@@ -94,31 +120,31 @@ namespace FoxTube
|
|||||||
TimeSpan span = DateTime.Now - dateTime;
|
TimeSpan span = DateTime.Now - dateTime;
|
||||||
|
|
||||||
if (span.TotalMinutes < 1)
|
if (span.TotalMinutes < 1)
|
||||||
return "Just now";
|
return resources.GetString("/Methods/now");
|
||||||
else if (Math.Round(span.TotalMinutes) == 1)
|
else if (Math.Round(span.TotalMinutes) == 1)
|
||||||
return "1 minute ago";
|
return resources.GetString("/Methods/oneMinute");
|
||||||
else if (span.TotalMinutes < 60)
|
else if (span.TotalMinutes < 60)
|
||||||
return Math.Round(span.TotalMinutes) + " minutes ago";
|
return Math.Round(span.TotalMinutes) + " " + resources.GetString("/Methods/minutes");
|
||||||
else if (Math.Round(span.TotalHours) == 1)
|
else if (Math.Round(span.TotalHours) == 1)
|
||||||
return "1 hour ago";
|
return resources.GetString("/Methods/oneHr");
|
||||||
else if (span.TotalHours < 24)
|
else if (span.TotalHours < 24)
|
||||||
return Math.Round(span.TotalHours) + " hours ago";
|
return Math.Round(span.TotalHours) + " " + resources.GetString("/Methods/hrs");
|
||||||
else if (Math.Round(span.TotalDays) == 1)
|
else if (Math.Round(span.TotalDays) == 1)
|
||||||
return "1 day ago";
|
return resources.GetString("/Methods/oneDay");
|
||||||
else if (span.TotalDays < 7)
|
else if (span.TotalDays < 7)
|
||||||
return Math.Round(span.TotalDays) + " days ago";
|
return Math.Round(span.TotalDays) + " " + resources.GetString("/Methods/days");
|
||||||
else if (Math.Round(span.TotalDays) == 7)
|
else if (Math.Round(span.TotalDays) == 7)
|
||||||
return "1 week ago";
|
return resources.GetString("/Methods/oneWeek");
|
||||||
else if (span.TotalDays < 30)
|
else if (span.TotalDays < 30)
|
||||||
return Math.Round(span.TotalDays / 7) + " weeks ago";
|
return Math.Round(span.TotalDays / 7) + " " + resources.GetString("/Methods/weeks");
|
||||||
else if (Math.Round(span.TotalDays) == 30)
|
else if (Math.Round(span.TotalDays) == 30)
|
||||||
return "1 month ago";
|
return resources.GetString("/Methods/oneMonth");
|
||||||
else if (Math.Round(span.TotalDays) < 365)
|
else if (Math.Round(span.TotalDays) < 365)
|
||||||
return Math.Round(span.TotalDays / 30) + " months ago";
|
return Math.Round(span.TotalDays / 30) + " " + resources.GetString("/Methods/months");
|
||||||
else if (Math.Round(span.TotalDays / 365) == 365)
|
else if (Math.Round(span.TotalDays / 365) == 365)
|
||||||
return "1 year ago";
|
return resources.GetString("/Methods/oneYear");
|
||||||
else
|
else
|
||||||
return Math.Round(span.TotalDays / 365) + " years ago";
|
return Math.Round(span.TotalDays / 365) + " " + resources.GetString("/Methods/years");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void FormatText(ref TextBlock block, string text)
|
public static void FormatText(ref TextBlock block, string text)
|
||||||
@@ -298,7 +324,7 @@ namespace FoxTube
|
|||||||
{
|
{
|
||||||
DataRequest request = args.Request;
|
DataRequest request = args.Request;
|
||||||
request.Data.Properties.Title = title;
|
request.Data.Properties.Title = title;
|
||||||
request.Data.Properties.Description = $"Sharing a {type}";
|
request.Data.Properties.Description = $"{resources.GetString("/Methods/sharing")} {type}";
|
||||||
|
|
||||||
request.Data.SetText(title + "\n" + "#YouTube #FoxTube #SharedWithFoxTube");
|
request.Data.SetText(title + "\n" + "#YouTube #FoxTube #SharedWithFoxTube");
|
||||||
request.Data.SetWebLink(url.ToUri());
|
request.Data.SetWebLink(url.ToUri());
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ namespace FoxTube
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Settings storage
|
//Settings storage
|
||||||
private static readonly ApplicationDataContainer storage = ApplicationData.Current.LocalSettings;
|
private static readonly ApplicationDataContainer storage = ApplicationData.Current.RoamingSettings;
|
||||||
|
|
||||||
//Predefined preferences
|
//Predefined preferences
|
||||||
private static object[] settings = new object[]
|
private static object[] settings = new object[]
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<Image Name="cover" Source="/Assets/ChannelCoverTemplate.png" Stretch="UniformToFill" VerticalAlignment="Center"/>
|
<Image Name="cover" Source="/Assets/ChannelCoverTemplate.png" Stretch="UniformToFill" VerticalAlignment="Center"/>
|
||||||
<StackPanel Name="liveTag" Margin="5" Background="Red" BorderBrush="White" BorderThickness="1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Padding="5,2,5,3" Orientation="Horizontal" Visibility="Collapsed">
|
<StackPanel Name="liveTag" Margin="5" Background="Red" BorderBrush="White" BorderThickness="1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Padding="5,2,5,3" Orientation="Horizontal" Visibility="Collapsed">
|
||||||
<TextBlock Text=" " VerticalAlignment="Center" Foreground="White" FontSize="12" FontFamily="Segoe MDL2 Assets" FontWeight="Black"/>
|
<TextBlock Text=" " VerticalAlignment="Center" Foreground="White" FontSize="12" FontFamily="Segoe MDL2 Assets" FontWeight="Black"/>
|
||||||
<TextBlock Text="LIVE" VerticalAlignment="Center" Foreground="White" FontSize="12" FontWeight="Bold"/>
|
<TextBlock x:Uid="/Cards/live" Text="LIVE" VerticalAlignment="Center" Foreground="White" FontSize="12" FontWeight="Bold"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Grid Grid.Row="1">
|
<Grid Grid.Row="1">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@@ -43,10 +43,10 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
<TextBlock Grid.Row="1" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Height="50" Margin="10" TextAlignment="Center" Padding="0,16,0,0" Foreground="Gray">
|
<TextBlock Grid.Row="1" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Height="50" Margin="10" TextAlignment="Center" Padding="0,16,0,0" Foreground="Gray">
|
||||||
<Hyperlink Click="Hyperlink_Click">Log in</Hyperlink> to manage your subscriptions
|
<Hyperlink Click="Hyperlink_Click"><Run x:Uid="/Cards/login">Log in</Run></Hyperlink> <Run x:Uid="/Cards/tomanage">to manage your subscriptions</Run>
|
||||||
</TextBlock>
|
</TextBlock>
|
||||||
<Grid Visibility="Collapsed" Grid.Row="1" VerticalAlignment="Bottom" Margin="10" Name="subscriptionPane" Background="{ThemeResource SystemControlBackgroundChromeMediumBrush}">
|
<Grid Visibility="Collapsed" Grid.Row="1" VerticalAlignment="Bottom" Margin="10" Name="subscriptionPane" Background="{ThemeResource SystemControlBackgroundChromeMediumBrush}">
|
||||||
<Button Click="subscribe_Click" Name="subscribe" HorizontalAlignment="Stretch" Height="50" Background="Red" Foreground="White" FontSize="18" FontWeight="SemiBold" Content="Subscirbe" Margin="0,0,0,0"/>
|
<Button x:Uid="/Cards/subscribe" Click="subscribe_Click" Name="subscribe" HorizontalAlignment="Stretch" Height="50" Background="Red" Foreground="White" FontSize="18" FontWeight="SemiBold" Content="Subscirbe" Margin="0,0,0,0"/>
|
||||||
<ToggleButton Name="notify" Height="50" Width="50" Visibility="Collapsed" FontFamily="Segoe MDL2 Assets" FontSize="18" FontWeight="SemiBold" Content="" Foreground="White" Background="Red" HorizontalAlignment="Right"/>
|
<ToggleButton Name="notify" Height="50" Width="50" Visibility="Collapsed" FontFamily="Segoe MDL2 Assets" FontSize="18" FontWeight="SemiBold" Content="" Foreground="White" Background="Red" HorizontalAlignment="Right"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -54,11 +54,11 @@
|
|||||||
</Button>
|
</Button>
|
||||||
<UserControl.ContextFlyout>
|
<UserControl.ContextFlyout>
|
||||||
<MenuFlyout>
|
<MenuFlyout>
|
||||||
<MenuFlyoutItem Icon="Contact" Text="View channel" Click="Button_Click"/>
|
<MenuFlyoutItem x:Uid="/Cards/channel" Icon="Contact" Text="View channel" Click="Button_Click"/>
|
||||||
<MenuFlyoutSeparator/>
|
<MenuFlyoutSeparator/>
|
||||||
<MenuFlyoutItem Icon="Link" Text="Copy link" Name="getLink" Click="GetLink_Click"/>
|
<MenuFlyoutItem x:Uid="/Cards/getLink" Icon="Link" Text="Copy link" Name="getLink" Click="GetLink_Click"/>
|
||||||
<MenuFlyoutItem 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 Icon="Share" Text="Share" Name="share" Visibility="Collapsed"/>
|
<MenuFlyoutItem x:Uid="/Cards/share" Icon="Share" Text="Share" Name="share" Visibility="Collapsed"/>
|
||||||
</MenuFlyout>
|
</MenuFlyout>
|
||||||
</UserControl.ContextFlyout>
|
</UserControl.ContextFlyout>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using Google.Apis.YouTube.v3.Data;
|
using Google.Apis.YouTube.v3.Data;
|
||||||
using System;
|
using System;
|
||||||
using Windows.ApplicationModel.DataTransfer;
|
using Windows.ApplicationModel.DataTransfer;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
using Windows.UI;
|
using Windows.UI;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
@@ -16,6 +17,8 @@ namespace FoxTube.Controls
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class ChannelCard : UserControl
|
public sealed partial class ChannelCard : UserControl
|
||||||
{
|
{
|
||||||
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("Cards");
|
||||||
|
|
||||||
string channelId;
|
string channelId;
|
||||||
Channel item;
|
Channel item;
|
||||||
|
|
||||||
@@ -41,8 +44,8 @@ namespace FoxTube.Controls
|
|||||||
|
|
||||||
title.Text = item.Snippet.Title;
|
title.Text = item.Snippet.Title;
|
||||||
|
|
||||||
subs.Text = $"{item.Statistics.SubscriberCount:0,0} subscribers";
|
subs.Text = $"{item.Statistics.SubscriberCount:0,0} {resources.GetString("/Cards/subscribers")}";
|
||||||
uploads.Text = $"{item.Statistics.VideoCount:0,0} videos";
|
uploads.Text = $"{item.Statistics.VideoCount:0,0} {resources.GetString("/Cards/videos")}";
|
||||||
|
|
||||||
if (live == "live")
|
if (live == "live")
|
||||||
liveTag.Visibility = Visibility.Visible;
|
liveTag.Visibility = Visibility.Visible;
|
||||||
@@ -55,7 +58,7 @@ namespace FoxTube.Controls
|
|||||||
{
|
{
|
||||||
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
||||||
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
||||||
subscribe.Content = "Subscribed";
|
subscribe.Content = resources.GetString("/Cards/unsubscribe");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
subscriptionPane.Visibility = Visibility.Visible;
|
subscriptionPane.Visibility = Visibility.Visible;
|
||||||
@@ -88,13 +91,13 @@ namespace FoxTube.Controls
|
|||||||
{
|
{
|
||||||
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
||||||
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
||||||
subscribe.Content = "Subscribed";
|
subscribe.Content = resources.GetString("/Cards/unsubscribe");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
subscribe.Background = new SolidColorBrush(Colors.Red);
|
subscribe.Background = new SolidColorBrush(Colors.Red);
|
||||||
subscribe.Foreground = new SolidColorBrush(Colors.White);
|
subscribe.Foreground = new SolidColorBrush(Colors.White);
|
||||||
subscribe.Content = "Subscribe";
|
subscribe.Content = resources.GetString("/Cards/subscribe/Content");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<Grid Name="inputField">
|
<Grid Name="inputField">
|
||||||
<TextBox Margin="5,5,42,5" PlaceholderText="Send a message" Name="newMessage" VerticalAlignment="Center" MinHeight="32" TextWrapping="Wrap" AcceptsReturn="True"/>
|
<TextBox x:Uid="/Chat/box" Margin="5,5,42,5" PlaceholderText="Send a message" Name="newMessage" VerticalAlignment="Center" MinHeight="32" TextWrapping="Wrap" AcceptsReturn="True"/>
|
||||||
<Button HorizontalAlignment="Right" Name="send" Click="send_Click" VerticalAlignment="Top"
|
<Button HorizontalAlignment="Right" Name="send" Click="send_Click" VerticalAlignment="Top"
|
||||||
Height="32" Width="32"
|
Height="32" Width="32"
|
||||||
Margin="0,5,5,0" Padding="0"
|
Margin="0,5,5,0" Padding="0"
|
||||||
@@ -37,10 +37,10 @@
|
|||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="5,0">
|
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="5,0">
|
||||||
<PersonPicture Height="20" ProfilePicture="{Binding Path=Avatar}"/>
|
<PersonPicture Height="20" ProfilePicture="{Binding Path=Avatar}"/>
|
||||||
<FontIcon Glyph="" ToolTipService.ToolTip="Verified" Margin="2,0" Visibility="{Binding Path=IsVerified}"/>
|
<FontIcon Glyph="" ToolTipService.ToolTip="{Binding Path=verified}" Margin="2,0" Visibility="{Binding Path=IsVerified}"/>
|
||||||
<FontIcon Glyph="" ToolTipService.ToolTip="Moderator" Margin="2,0" Visibility="{Binding Path=IsModerator}"/>
|
<FontIcon Glyph="" ToolTipService.ToolTip="{Binding Path=moderator}" Margin="2,0" Visibility="{Binding Path=IsModerator}"/>
|
||||||
<FontIcon Glyph="" ToolTipService.ToolTip="Chat owner" Margin="2,0" Visibility="{Binding Path=IsOwner}"/>
|
<FontIcon Glyph="" ToolTipService.ToolTip="{Binding Path=owner}" Margin="2,0" Visibility="{Binding Path=IsOwner}"/>
|
||||||
<FontIcon Glyph="" ToolTipService.ToolTip="Sponsor" Margin="2,0" Visibility="{Binding Path=IsSponsor}"/>
|
<FontIcon Glyph="" ToolTipService.ToolTip="{Binding Path=sponsor}" Margin="2,0" Visibility="{Binding Path=IsSponsor}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal" Grid.Column="1" VerticalAlignment="Top" Margin="0,0,5,0">
|
<StackPanel Orientation="Horizontal" Grid.Column="1" VerticalAlignment="Top" Margin="0,0,5,0">
|
||||||
<HyperlinkButton Content="{Binding Path=Author}" Tag="{Binding Path=ChannelId}" Grid.Column="1" Margin="0,-6,0,0" FontWeight="Bold" Click="HyperlinkButton_Click"/>
|
<HyperlinkButton Content="{Binding Path=Author}" Tag="{Binding Path=ChannelId}" Grid.Column="1" Margin="0,-6,0,0" FontWeight="Bold" Click="HyperlinkButton_Click"/>
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListView.ItemTemplate>
|
</ListView.ItemTemplate>
|
||||||
<ListViewItem>
|
<ListViewItem>
|
||||||
<TextBlock Text="Welcome to the chat room" Foreground="Gray"/>
|
<TextBlock x:Uid="/Chat/welcome" Text="Welcome to the chat room" Foreground="Gray"/>
|
||||||
</ListViewItem>
|
</ListViewItem>
|
||||||
</ListView>
|
</ListView>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using Windows.UI.Xaml.Media;
|
|||||||
using Google.Apis.YouTube.v3.Data;
|
using Google.Apis.YouTube.v3.Data;
|
||||||
using Google.Apis.YouTube.v3;
|
using Google.Apis.YouTube.v3;
|
||||||
using Windows.UI;
|
using Windows.UI;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
|
|
||||||
namespace FoxTube.Controls
|
namespace FoxTube.Controls
|
||||||
{
|
{
|
||||||
@@ -60,6 +61,11 @@ namespace FoxTube.Controls
|
|||||||
{
|
{
|
||||||
message = item;
|
message = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string verified = ResourceLoader.GetForCurrentView("Chat").GetString("/Chat/verified");
|
||||||
|
string moderator = ResourceLoader.GetForCurrentView("Chat").GetString("/Chat/moder");
|
||||||
|
string owner = ResourceLoader.GetForCurrentView("Chat").GetString("/Chat/owner");
|
||||||
|
string sponsor = ResourceLoader.GetForCurrentView("Chat").GetString("/Chat/sponsor");
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed partial class Chat : UserControl
|
public sealed partial class Chat : UserControl
|
||||||
@@ -122,12 +128,17 @@ namespace FoxTube.Controls
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
LiveChatMessagesResource.InsertRequest request = SecretsVault.Service.LiveChatMessages.Insert(message, "snippet");
|
LiveChatMessagesResource.InsertRequest request = SecretsVault.Service.LiveChatMessages.Insert(message, "snippet,authorDetails");
|
||||||
await request.ExecuteAsync();
|
LiveChatMessage response = await request.ExecuteAsync();
|
||||||
|
|
||||||
|
if(response != null)
|
||||||
|
{
|
||||||
|
newMessage.Text = string.Empty;
|
||||||
|
list.Items.Add(new ChatMessage(response));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
newMessage.Text = string.Empty;
|
|
||||||
newMessage.IsEnabled = true;
|
newMessage.IsEnabled = true;
|
||||||
send.IsEnabled = true;
|
send.IsEnabled = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,9 +36,9 @@
|
|||||||
<StackPanel Grid.Row="2" Name="editor" Visibility="Collapsed">
|
<StackPanel Grid.Row="2" Name="editor" Visibility="Collapsed">
|
||||||
<TextBox Name="editorText" Text="[Content]" AcceptsReturn="True" TextWrapping="Wrap" TextChanged="editorText_TextChanged"/>
|
<TextBox Name="editorText" Text="[Content]" AcceptsReturn="True" TextWrapping="Wrap" TextChanged="editorText_TextChanged"/>
|
||||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,5">
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,5">
|
||||||
<Button Content="Delete comment" Background="Red" Name="deleteComment" Click="DeleteComment_Click"/>
|
<Button x:Uid="/CommentsPage/editorDelete" Content="Delete comment" Background="Red" Name="deleteComment" Click="DeleteComment_Click"/>
|
||||||
<Button Name="editorClose" Content="Cancel" Click="editorClose_Click" Margin="5, 0"/>
|
<Button x:Uid="/CommentsPage/editorCancel" Name="editorClose" Content="Cancel" Click="editorClose_Click" Margin="5, 0"/>
|
||||||
<Button Name="editorSend" Content="Submit" Click="editorSend_Click"/>
|
<Button x:Uid="/CommentsPage/editorSubmit" Name="editorSend" Content="Submit" Click="editorSend_Click"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<ProgressBar Name="editorSending" Foreground="Red" IsIndeterminate="True" Visibility="Collapsed"/>
|
<ProgressBar Name="editorSending" Foreground="Red" IsIndeterminate="True" Visibility="Collapsed"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
Height="35">
|
Height="35">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock FontFamily="Segoe MDL2 Assets" Text="" FontSize="20"/>
|
<TextBlock FontFamily="Segoe MDL2 Assets" Text="" FontSize="20"/>
|
||||||
<TextBlock Text="Reply"/>
|
<TextBlock x:Uid="/CommentsPage/reply" Text="Reply"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
Height="35">
|
Height="35">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock FontFamily="Segoe MDL2 Assets" Text="" FontSize="20"/>
|
<TextBlock FontFamily="Segoe MDL2 Assets" Text="" FontSize="20"/>
|
||||||
<TextBlock Text="Edit"/>
|
<TextBlock x:Uid="/CommentsPage/edit" Text="Edit"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<TextBox Grid.Row="1" Name="reply" TextChanged="reply_TextChanged" TextWrapping="Wrap" BorderThickness="0" Background="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}" AcceptsReturn="True" MaxLength="500"
|
<TextBox x:Uid="/CommentsPage/replyBox" Grid.Row="1" Name="reply" TextChanged="reply_TextChanged" TextWrapping="Wrap" BorderThickness="0" Background="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}" AcceptsReturn="True" MaxLength="500"
|
||||||
Padding="5" Margin="0,0,32,0"
|
Padding="5" Margin="0,0,32,0"
|
||||||
PlaceholderText="Enter your reply..."/>
|
PlaceholderText="Enter your reply..."/>
|
||||||
<Button Grid.Row="1" Name="send" Click="send_Click" IsEnabled="False" HorizontalAlignment="Right" VerticalAlignment="Top"
|
<Button Grid.Row="1" Name="send" Click="send_Click" IsEnabled="False" HorizontalAlignment="Right" VerticalAlignment="Top"
|
||||||
|
|||||||
@@ -1,31 +1,26 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.InteropServices.WindowsRuntime;
|
|
||||||
using Windows.Foundation;
|
|
||||||
using Windows.Foundation.Collections;
|
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Controls;
|
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.Input;
|
||||||
using Windows.UI.Xaml.Media;
|
|
||||||
using Windows.UI.Xaml.Navigation;
|
|
||||||
|
|
||||||
using Google.Apis.YouTube.v3;
|
using Google.Apis.YouTube.v3;
|
||||||
using Google.Apis.YouTube.v3.Data;
|
using Google.Apis.YouTube.v3.Data;
|
||||||
using Windows.UI.Xaml.Media.Imaging;
|
using Windows.UI.Xaml.Media.Imaging;
|
||||||
using Windows.System;
|
|
||||||
using Windows.UI.Popups;
|
using Windows.UI.Popups;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
|
|
||||||
|
|
||||||
namespace FoxTube.Controls
|
namespace FoxTube.Controls
|
||||||
{
|
{
|
||||||
public enum CommentType { TopLevel, Reply }
|
public enum CommentType { TopLevel, Reply }
|
||||||
|
/// <summary>
|
||||||
|
/// Control represents video comment entity
|
||||||
|
/// </summary>
|
||||||
public sealed partial class CommentCard : UserControl
|
public sealed partial class CommentCard : UserControl
|
||||||
{
|
{
|
||||||
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("CommentsPage");
|
||||||
|
|
||||||
Comment item;
|
Comment item;
|
||||||
CommentThread thread;
|
CommentThread thread;
|
||||||
bool repliesLoaded = false;
|
bool repliesLoaded = false;
|
||||||
@@ -33,7 +28,7 @@ namespace FoxTube.Controls
|
|||||||
|
|
||||||
public CommentCard(CommentThread comment)
|
public CommentCard(CommentThread comment)
|
||||||
{
|
{
|
||||||
this.InitializeComponent();
|
InitializeComponent();
|
||||||
Initialize(comment);
|
Initialize(comment);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,7 +67,7 @@ namespace FoxTube.Controls
|
|||||||
else
|
else
|
||||||
author.Text = comment.Snippet.TopLevelComment.Snippet.AuthorDisplayName;
|
author.Text = comment.Snippet.TopLevelComment.Snippet.AuthorDisplayName;
|
||||||
|
|
||||||
meta.Text = string.Format("{0} {1}", Methods.GetAgo(comment.Snippet.TopLevelComment.Snippet.PublishedAt.Value), comment.Snippet.TopLevelComment.Snippet.UpdatedAt != comment.Snippet.TopLevelComment.Snippet.PublishedAt ? "(edited)" : "");
|
meta.Text = string.Format("{0} {1}", Methods.GetAgo(comment.Snippet.TopLevelComment.Snippet.PublishedAt.Value), comment.Snippet.TopLevelComment.Snippet.UpdatedAt != comment.Snippet.TopLevelComment.Snippet.PublishedAt ? resources.GetString("/CommentsPage/edited") : "");
|
||||||
Methods.FormatText(ref text, comment.Snippet.TopLevelComment.Snippet.TextDisplay);
|
Methods.FormatText(ref text, comment.Snippet.TopLevelComment.Snippet.TextDisplay);
|
||||||
|
|
||||||
try { avatar.ProfilePicture = new BitmapImage(new Uri(comment.Snippet.TopLevelComment.Snippet.AuthorProfileImageUrl)); }
|
try { avatar.ProfilePicture = new BitmapImage(new Uri(comment.Snippet.TopLevelComment.Snippet.AuthorProfileImageUrl)); }
|
||||||
@@ -118,7 +113,7 @@ namespace FoxTube.Controls
|
|||||||
else
|
else
|
||||||
author.Text = comment.Snippet.AuthorDisplayName;
|
author.Text = comment.Snippet.AuthorDisplayName;
|
||||||
|
|
||||||
meta.Text = string.Format("{0} {1}", Methods.GetAgo(comment.Snippet.PublishedAt.Value), comment.Snippet.UpdatedAt != comment.Snippet.PublishedAt ? "(edited)" : "");
|
meta.Text = string.Format("{0} {1}", Methods.GetAgo(comment.Snippet.PublishedAt.Value), comment.Snippet.UpdatedAt != comment.Snippet.PublishedAt ? resources.GetString("/CommentsPage/edited") : "");
|
||||||
Methods.FormatText(ref text, comment.Snippet.TextDisplay);
|
Methods.FormatText(ref text, comment.Snippet.TextDisplay);
|
||||||
|
|
||||||
try { avatar.ProfilePicture = new BitmapImage(new Uri(comment.Snippet.AuthorProfileImageUrl)); }
|
try { avatar.ProfilePicture = new BitmapImage(new Uri(comment.Snippet.AuthorProfileImageUrl)); }
|
||||||
@@ -209,7 +204,7 @@ namespace FoxTube.Controls
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await new MessageDialog("Failed to send your reply. Please, try again later.", "Failed to send your reply").ShowAsync();
|
await new MessageDialog(resources.GetString("/CommentsPage/failedReply")).ShowAsync();
|
||||||
}
|
}
|
||||||
send.IsEnabled = true;
|
send.IsEnabled = true;
|
||||||
reply.IsEnabled = true;
|
reply.IsEnabled = true;
|
||||||
@@ -251,7 +246,7 @@ namespace FoxTube.Controls
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
await new MessageDialog("Failed to edit your commentary. Please, try again later.", "Failed to edit your commentary").ShowAsync();
|
await new MessageDialog(resources.GetString("/CommentsPage/failedEdit")).ShowAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
editorText.IsEnabled = true;
|
editorText.IsEnabled = true;
|
||||||
@@ -277,9 +272,9 @@ namespace FoxTube.Controls
|
|||||||
|
|
||||||
private async void DeleteComment_Click(object sender, RoutedEventArgs e)
|
private async void DeleteComment_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
MessageDialog dialog = new MessageDialog("Are you sure? This action cannot be undone", "Delete comment");
|
MessageDialog dialog = new MessageDialog(resources.GetString("/CommentsPage/deleteContent"), resources.GetString("/CommentsPage/deleteHeader"));
|
||||||
|
|
||||||
dialog.Commands.Add(new UICommand("Yes", async (command) =>
|
dialog.Commands.Add(new UICommand(resources.GetString("/CommentsPage/yes"), async (command) =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -288,7 +283,7 @@ namespace FoxTube.Controls
|
|||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
}));
|
}));
|
||||||
dialog.Commands.Add(new UICommand("No"));
|
dialog.Commands.Add(new UICommand(resources.GetString("/CommentsPage/no")));
|
||||||
|
|
||||||
dialog.CancelCommandIndex = 1;
|
dialog.CancelCommandIndex = 1;
|
||||||
dialog.DefaultCommandIndex = 0;
|
dialog.DefaultCommandIndex = 0;
|
||||||
|
|||||||
@@ -33,13 +33,13 @@
|
|||||||
<Button Name="open" Click="open_Click" Width="80" Height="80" Padding="0" Background="Transparent">
|
<Button Name="open" Click="open_Click" Width="80" Height="80" Padding="0" Background="Transparent">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="30" HorizontalAlignment="Center"/>
|
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="30" HorizontalAlignment="Center"/>
|
||||||
<TextBlock Text="Open" TextWrapping="WrapWholeWords" HorizontalTextAlignment="Center"/>
|
<TextBlock x:Uid="/Downloads/openFile" Text="Open" TextWrapping="WrapWholeWords" HorizontalTextAlignment="Center"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Name="gotoOriginal" Click="gotoOriginal_Click" Width="80" Height="80" Padding="0" Background="Transparent">
|
<Button Name="gotoOriginal" Click="gotoOriginal_Click" Width="80" Height="80" Padding="0" Background="Transparent">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="30" HorizontalAlignment="Center"/>
|
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="30" HorizontalAlignment="Center"/>
|
||||||
<TextBlock Text="Go to original" TextWrapping="WrapWholeWords" HorizontalTextAlignment="Center" HorizontalAlignment="Center"/>
|
<TextBlock x:Uid="/Downloads/gotoOrign" Text="Go to original" TextWrapping="WrapWholeWords" HorizontalTextAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
<TextBlock Name="status" Text="Downloading..." HorizontalAlignment="Left"/>
|
<TextBlock Name="status" Text="Downloading..." HorizontalAlignment="Left"/>
|
||||||
<ProgressBar Name="progressBar" Width="200" Maximum="1" IsIndeterminate="True" Foreground="Red"/>
|
<ProgressBar Name="progressBar" Width="200" Maximum="1" IsIndeterminate="True" Foreground="Red"/>
|
||||||
<TextBlock Name="perc" Text="--%"/>
|
<TextBlock Name="perc" Text="--%"/>
|
||||||
<Button Content="Cancel" Name="cancel" Click="CancelPrompt" HorizontalAlignment="Right"/>
|
<Button x:Uid="/Downloads/cancel" Content="Cancel" Name="cancel" Click="CancelPrompt" HorizontalAlignment="Right"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|||||||
@@ -15,11 +15,14 @@ using Windows.UI.Popups;
|
|||||||
using Windows.UI.Notifications;
|
using Windows.UI.Notifications;
|
||||||
using Microsoft.Toolkit.Uwp.Notifications;
|
using Microsoft.Toolkit.Uwp.Notifications;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
|
|
||||||
namespace FoxTube.Controls
|
namespace FoxTube.Controls
|
||||||
{
|
{
|
||||||
public sealed partial class DownloadItem : UserControl
|
public sealed partial class DownloadItem : UserControl
|
||||||
{
|
{
|
||||||
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("Downloads");
|
||||||
|
|
||||||
public DownloadItemContainer Container { get; private set; }
|
public DownloadItemContainer Container { get; private set; }
|
||||||
public StorageFile file;
|
public StorageFile file;
|
||||||
public bool InProgress { get; set; } = false;
|
public bool InProgress { get; set; } = false;
|
||||||
@@ -62,10 +65,10 @@ namespace FoxTube.Controls
|
|||||||
title.Text = Container.Title;
|
title.Text = Container.Title;
|
||||||
path.Text = file.Name;
|
path.Text = file.Name;
|
||||||
thumbnail.Source = new BitmapImage(Container.Thumbnail);
|
thumbnail.Source = new BitmapImage(Container.Thumbnail);
|
||||||
quality.Text = $"Quality: {Container.Quality}";
|
quality.Text = $"{resources.GetString("/Downloads/quality")}: {Container.Quality}";
|
||||||
duration.Text = $"Duration: {Container.Duration}";
|
duration.Text = $"{resources.GetString("/Downloads/duration")}: {Container.Duration}";
|
||||||
channel.Text = $"Author: {Container.Channel}";
|
channel.Text = $"{resources.GetString("/Downloads/author")}: {Container.Channel}";
|
||||||
ext.Text = $"Extension: {Container.Extension}";
|
ext.Text = $"{resources.GetString("/Downloads/ext")}: {Container.Extension}";
|
||||||
|
|
||||||
progressPanel.Visibility = Visibility.Collapsed;
|
progressPanel.Visibility = Visibility.Collapsed;
|
||||||
donePanel.Visibility = Visibility.Visible;
|
donePanel.Visibility = Visibility.Visible;
|
||||||
@@ -93,11 +96,11 @@ namespace FoxTube.Controls
|
|||||||
{
|
{
|
||||||
Children =
|
Children =
|
||||||
{
|
{
|
||||||
new AdaptiveText() { Text = "Downloading a video" },
|
new AdaptiveText() { Text = resources.GetString("/Downloads/toastStartHeader") },
|
||||||
new AdaptiveProgressBar()
|
new AdaptiveProgressBar()
|
||||||
{
|
{
|
||||||
Title = meta.Snippet.Title,
|
Title = meta.Snippet.Title,
|
||||||
Status = "Downloading...",
|
Status = resources.GetString("/Downloads/downloading/Text"),
|
||||||
Value = new BindableProgressBarValue("value")
|
Value = new BindableProgressBarValue("value")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -108,7 +111,7 @@ namespace FoxTube.Controls
|
|||||||
{
|
{
|
||||||
Buttons =
|
Buttons =
|
||||||
{
|
{
|
||||||
new ToastButton("Cancel", $"dcancel|{Container.Id}")
|
new ToastButton(resources.GetString("/Downloads/cancel/Content"), $"dcancel|{Container.Id}")
|
||||||
{
|
{
|
||||||
ActivationType = ToastActivationType.Background
|
ActivationType = ToastActivationType.Background
|
||||||
}
|
}
|
||||||
@@ -131,10 +134,10 @@ namespace FoxTube.Controls
|
|||||||
|
|
||||||
thumbnail.Source = new BitmapImage(new Uri(meta.Snippet.Thumbnails.Medium.Url));
|
thumbnail.Source = new BitmapImage(new Uri(meta.Snippet.Thumbnails.Medium.Url));
|
||||||
title.Text = meta.Snippet.Title;
|
title.Text = meta.Snippet.Title;
|
||||||
ext.Text = $"Extension: {info.Container.GetFileExtension()}";
|
ext.Text = $"{resources.GetString("/Downloads/ext")}: {info.Container.GetFileExtension()}";
|
||||||
quality.Text = $"Quality: {q}";
|
quality.Text = $"{resources.GetString("/Downloads/quality")}: {q}";
|
||||||
duration.Text = $"Duration: {XmlConvert.ToTimeSpan(meta.ContentDetails.Duration)}";
|
duration.Text = $"{resources.GetString("/Downloads/duration")}: {XmlConvert.ToTimeSpan(meta.ContentDetails.Duration)}";
|
||||||
channel.Text = $"Author: {meta.Snippet.ChannelTitle}";
|
channel.Text = $"{resources.GetString("/Downloads/author")}: {meta.Snippet.ChannelTitle}";
|
||||||
path.Text = file.Name;
|
path.Text = file.Name;
|
||||||
|
|
||||||
progressPanel.Visibility = Visibility.Visible;
|
progressPanel.Visibility = Visibility.Visible;
|
||||||
@@ -170,13 +173,13 @@ namespace FoxTube.Controls
|
|||||||
template.LoadXml($@"<toast activationType='background' launch='download|{file.Path}'>
|
template.LoadXml($@"<toast activationType='background' launch='download|{file.Path}'>
|
||||||
<visual>
|
<visual>
|
||||||
<binding template='ToastGeneric'>
|
<binding template='ToastGeneric'>
|
||||||
<text>Download complete</text>
|
<text>{resources.GetString("/Downloads/toastCompleteHeader")}</text>
|
||||||
<text>{Container.Title}</text>
|
<text>{Container.Title}</text>
|
||||||
</binding>
|
</binding>
|
||||||
</visual>
|
</visual>
|
||||||
|
|
||||||
<actions>
|
<actions>
|
||||||
<action content='Go to original'
|
<action content='{resources.GetString("/Downloads/gotoOrign/Content")}'
|
||||||
activationType='foreground'
|
activationType='foreground'
|
||||||
arguments='video|{Container.Id}'/>
|
arguments='video|{Container.Id}'/>
|
||||||
</actions>
|
</actions>
|
||||||
@@ -196,7 +199,7 @@ namespace FoxTube.Controls
|
|||||||
|
|
||||||
public async void Cancel()
|
public async void Cancel()
|
||||||
{
|
{
|
||||||
status.Text = "Cancelling...";
|
status.Text = resources.GetString("/Downloads/cancelling");
|
||||||
progressBar.IsIndeterminate = true;
|
progressBar.IsIndeterminate = true;
|
||||||
cancel.IsEnabled = false;
|
cancel.IsEnabled = false;
|
||||||
cts.Cancel();
|
cts.Cancel();
|
||||||
@@ -210,7 +213,7 @@ namespace FoxTube.Controls
|
|||||||
template.LoadXml($@"<toast activationType='foreground' launch='download'>
|
template.LoadXml($@"<toast activationType='foreground' launch='download'>
|
||||||
<visual>
|
<visual>
|
||||||
<binding template='ToastGeneric'>
|
<binding template='ToastGeneric'>
|
||||||
<text>Download canceled</text>
|
<text>{resources.GetString("/Downloads/toastCanceledHeader")}</text>
|
||||||
<text>{Container.Title}</text>
|
<text>{Container.Title}</text>
|
||||||
</binding>
|
</binding>
|
||||||
</visual>
|
</visual>
|
||||||
@@ -224,10 +227,10 @@ namespace FoxTube.Controls
|
|||||||
{
|
{
|
||||||
if(InProgress)
|
if(InProgress)
|
||||||
{
|
{
|
||||||
MessageDialog dialog = new MessageDialog("Are you sure?", "Cancelling download");
|
MessageDialog dialog = new MessageDialog(resources.GetString("/Downloads/prompt"), resources.GetString("/Downloads/cancellingHeader"));
|
||||||
|
|
||||||
dialog.Commands.Add(new UICommand("Yes", (command) => Cancel()));
|
dialog.Commands.Add(new UICommand(resources.GetString("/Downloads/yes"), (command) => Cancel()));
|
||||||
dialog.Commands.Add(new UICommand("No"));
|
dialog.Commands.Add(new UICommand(resources.GetString("/Downloads/no")));
|
||||||
|
|
||||||
dialog.DefaultCommandIndex = 1;
|
dialog.DefaultCommandIndex = 1;
|
||||||
await dialog.ShowAsync();
|
await dialog.ShowAsync();
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
using FoxTube.Classes;
|
using System;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using System.Xml;
|
|
||||||
using Windows.Media;
|
using Windows.Media;
|
||||||
|
using YoutubeExplode.Models.ClosedCaptions;
|
||||||
|
|
||||||
namespace FoxTube.Controls
|
namespace FoxTube.Controls
|
||||||
{
|
{
|
||||||
@@ -13,11 +11,18 @@ namespace FoxTube.Controls
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class LiveCaptions : UserControl
|
public sealed partial class LiveCaptions : UserControl
|
||||||
{
|
{
|
||||||
|
public double Size
|
||||||
|
{
|
||||||
|
get => text.FontSize;
|
||||||
|
set => text.FontSize = value;
|
||||||
|
}
|
||||||
|
|
||||||
public MediaTimelineController Player { get; set; }
|
public MediaTimelineController Player { get; set; }
|
||||||
private bool isClosed = false;
|
private bool isClosed = false;
|
||||||
DispatcherTimer timer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(10) };
|
DispatcherTimer timer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(10) };
|
||||||
List<Caption> captions = new List<Caption>();
|
ClosedCaption currentCaption = null;
|
||||||
Caption currentCaption = null;
|
|
||||||
|
ClosedCaptionTrack track = null;
|
||||||
|
|
||||||
public LiveCaptions()
|
public LiveCaptions()
|
||||||
{
|
{
|
||||||
@@ -31,11 +36,11 @@ namespace FoxTube.Controls
|
|||||||
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
if(!isClosed)
|
if(!isClosed)
|
||||||
captions.ForEach((x) =>
|
track.Captions.ForEach(i =>
|
||||||
{
|
{
|
||||||
if (Player.Position >= x.Start && Player.Position <= x.End)
|
if (Player.Position >= i.Offset && Player.Position <= i.Offset + i.Duration)
|
||||||
{
|
{
|
||||||
currentCaption = x;
|
currentCaption = i;
|
||||||
text.Text = currentCaption.Text;
|
text.Text = currentCaption.Text;
|
||||||
Visibility = Visibility.Visible;
|
Visibility = Visibility.Visible;
|
||||||
found = true;
|
found = true;
|
||||||
@@ -49,24 +54,15 @@ namespace FoxTube.Controls
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize(string source, bool isAutoGenerated = false)
|
public async void Initialize(ClosedCaptionTrackInfo info)
|
||||||
{
|
{
|
||||||
captions.Clear();
|
track = await new YoutubeExplode.YoutubeClient().GetClosedCaptionTrackAsync(info);
|
||||||
XmlDocument doc = new XmlDocument();
|
|
||||||
doc.Load(source);
|
|
||||||
|
|
||||||
if (!isAutoGenerated)
|
track.Captions.ForEach(i =>
|
||||||
foreach (XmlElement i in doc["timedtext"]["body"].ChildNodes)
|
|
||||||
captions.Add(new Caption(int.Parse(i.GetAttribute("t")), int.Parse(i.GetAttribute("d")), i.InnerText));
|
|
||||||
else
|
|
||||||
foreach (XmlElement i in doc["transcript"].ChildNodes)
|
|
||||||
captions.Add(new Caption(double.Parse(i.GetAttribute("start")), double.Parse(i.GetAttribute("dur")), i.InnerText.Replace("<font color=\"#E5E5E5\">", "").Replace("<font color=\"#CCCCCC\">", "").Replace("</font>", "").Replace("'", "'")));
|
|
||||||
|
|
||||||
captions.ForEach((x) =>
|
|
||||||
{
|
{
|
||||||
if (Player.Position > x.Start && Player.Position < x.End)
|
if (Player.Position > i.Offset && Player.Position < i.Offset + i.Duration)
|
||||||
{
|
{
|
||||||
currentCaption = x;
|
currentCaption = i;
|
||||||
text.Text = currentCaption.Text;
|
text.Text = currentCaption.Text;
|
||||||
Visibility = Visibility.Visible;
|
Visibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
@@ -77,7 +73,7 @@ namespace FoxTube.Controls
|
|||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
{
|
{
|
||||||
captions.Clear();
|
track = null;
|
||||||
currentCaption = null;
|
currentCaption = null;
|
||||||
Visibility = Visibility.Collapsed;
|
Visibility = Visibility.Collapsed;
|
||||||
timer.Stop();
|
timer.Stop();
|
||||||
|
|||||||
@@ -50,12 +50,12 @@
|
|||||||
</Button>
|
</Button>
|
||||||
<UserControl.ContextFlyout>
|
<UserControl.ContextFlyout>
|
||||||
<MenuFlyout>
|
<MenuFlyout>
|
||||||
<MenuFlyoutItem Icon="List" Text="View playlist" Click="Button_Click"/>
|
<MenuFlyoutItem x:Uid="/Cards/playlist" Icon="List" Text="View playlist" Click="Button_Click"/>
|
||||||
<MenuFlyoutItem Icon="Contact" Text="View channel" Name="openChannel" Click="OpenChannel_Click"/>
|
<MenuFlyoutItem x:Uid="/Cards/channel" Icon="Contact" Text="View channel" Name="openChannel" Click="OpenChannel_Click"/>
|
||||||
<MenuFlyoutSeparator/>
|
<MenuFlyoutSeparator/>
|
||||||
<MenuFlyoutItem Icon="Link" Text="Copy link" Name="getLink" Click="GetLink_Click"/>
|
<MenuFlyoutItem x:Uid="/Cards/getLink" Icon="Link" Text="Copy link" Name="getLink" Click="GetLink_Click"/>
|
||||||
<MenuFlyoutItem 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 Icon="Share" Text="Share" Name="share" Visibility="Collapsed"/>
|
<MenuFlyoutItem x:Uid="/Cards/share" Icon="Share" Text="Share" Name="share" Visibility="Collapsed"/>
|
||||||
</MenuFlyout>
|
</MenuFlyout>
|
||||||
</UserControl.ContextFlyout>
|
</UserControl.ContextFlyout>
|
||||||
</Page>
|
</Page>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
|
|
||||||
<Grid>
|
<Grid>
|
||||||
<HyperlinkButton Foreground="Red" HorizontalAlignment="Center" Content="Show more" Name="btn" Click="btn_Click"/>
|
<HyperlinkButton x:Uid="/Cards/more" Foreground="Red" HorizontalAlignment="Center" Content="Show more" Name="btn" Click="btn_Click"/>
|
||||||
<ProgressBar Name="bar" IsIndeterminate="True" Foreground="Red" Visibility="Collapsed"/>
|
<ProgressBar Name="bar" IsIndeterminate="True" Foreground="Red" Visibility="Collapsed"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<Image Name="thumbnail" Source="/Assets/videoThumbSample.png" Stretch="Fill"/>
|
<Image Name="thumbnail" Source="/Assets/videoThumbSample.png" Stretch="Fill"/>
|
||||||
<Grid Background="#7F000000" Name="watched" Visibility="Collapsed">
|
<Grid Background="#7F000000" Name="watched" Visibility="Collapsed">
|
||||||
<StackPanel Margin="5" Background="{ThemeResource SystemControlBackgroundChromeMediumBrush}" VerticalAlignment="Top" HorizontalAlignment="Left" Padding="5,2,5,2" BorderBrush="Gray" BorderThickness="1">
|
<StackPanel Margin="5" Background="{ThemeResource SystemControlBackgroundChromeMediumBrush}" VerticalAlignment="Top" HorizontalAlignment="Left" Padding="5,2,5,2" BorderBrush="Gray" BorderThickness="1">
|
||||||
<TextBlock Text="Watched" Foreground="Gray" FontSize="12"/>
|
<TextBlock x:Uid="/Cards/watched" Text="Watched" Foreground="Gray" FontSize="12"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<ProgressBar VerticalAlignment="Bottom" Margin="54,0,0,0" Foreground="Red" Name="leftOn"/>
|
<ProgressBar VerticalAlignment="Bottom" Margin="54,0,0,0" Foreground="Red" Name="leftOn"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Name="liveTag" Margin="0,0,5,30" Background="Red" BorderBrush="White" BorderThickness="1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Padding="5,2,5,3" Orientation="Horizontal" Visibility="Collapsed">
|
<StackPanel Name="liveTag" Margin="0,0,5,30" Background="Red" BorderBrush="White" BorderThickness="1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Padding="5,2,5,3" Orientation="Horizontal" Visibility="Collapsed">
|
||||||
<TextBlock Text=" " VerticalAlignment="Center" Foreground="White" FontSize="12" FontFamily="Segoe MDL2 Assets" FontWeight="Black"/>
|
<TextBlock Text=" " VerticalAlignment="Center" Foreground="White" FontSize="12" FontFamily="Segoe MDL2 Assets" FontWeight="Black"/>
|
||||||
<TextBlock Name="liveContent" Text="LIVE" VerticalAlignment="Center" Foreground="White" FontSize="12" FontWeight="Bold"/>
|
<TextBlock x:Uid="/Cards/live" Name="liveContent" Text="LIVE" VerticalAlignment="Center" Foreground="White" FontSize="12" FontWeight="Bold"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Grid Grid.Row="1">
|
<Grid Grid.Row="1">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@@ -53,17 +53,17 @@
|
|||||||
</Button>
|
</Button>
|
||||||
<UserControl.ContextFlyout>
|
<UserControl.ContextFlyout>
|
||||||
<MenuFlyout>
|
<MenuFlyout>
|
||||||
<MenuFlyoutItem Icon="Play" Text="Play" Name="play" Click="Button_Click"/>
|
<MenuFlyoutItem x:Uid="/Cards/play" Icon="Play" Text="Play" Name="play" Click="Button_Click"/>
|
||||||
<MenuFlyoutItem Text="Play incognito" Visibility="Collapsed">
|
<MenuFlyoutItem x:Uid="/Cards/incognitoPlay" Text="Play incognito" Visibility="Collapsed">
|
||||||
<MenuFlyoutItem.Icon>
|
<MenuFlyoutItem.Icon>
|
||||||
<FontIcon Glyph=""/>
|
<FontIcon Glyph=""/>
|
||||||
</MenuFlyoutItem.Icon>
|
</MenuFlyoutItem.Icon>
|
||||||
</MenuFlyoutItem>
|
</MenuFlyoutItem>
|
||||||
<MenuFlyoutItem Icon="Contact" Text="View channel" Name="viewChannel" Click="ViewChannel_Click"/>
|
<MenuFlyoutItem x:Uid="/Cards/channel" Icon="Contact" Text="View channel" Name="viewChannel" Click="ViewChannel_Click"/>
|
||||||
<MenuFlyoutSeparator/>
|
<MenuFlyoutSeparator/>
|
||||||
<MenuFlyoutItem Icon="Link" Text="Copy link" Name="getLink" Click="GetLink_Click"/>
|
<MenuFlyoutItem x:Uid="/Cards/getLink" Icon="Link" Text="Copy link" Name="getLink" Click="GetLink_Click"/>
|
||||||
<MenuFlyoutItem 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 Icon="Share" Text="Share" Name="share" Visibility="Collapsed"/>
|
<MenuFlyoutItem x:Uid="/Cards/share" Icon="Share" Text="Share" Name="share" Visibility="Collapsed"/>
|
||||||
<MenuFlyoutSeparator Visibility="Collapsed"/>
|
<MenuFlyoutSeparator Visibility="Collapsed"/>
|
||||||
<MenuFlyoutItem Icon="Download" Text="Download" Visibility="Collapsed"/>
|
<MenuFlyoutItem Icon="Download" Text="Download" Visibility="Collapsed"/>
|
||||||
</MenuFlyout>
|
</MenuFlyout>
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ using Google.Apis.YouTube.v3;
|
|||||||
using Google.Apis.YouTube.v3.Data;
|
using Google.Apis.YouTube.v3.Data;
|
||||||
using Windows.UI.Xaml.Media.Imaging;
|
using Windows.UI.Xaml.Media.Imaging;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
using Windows.UI.Popups;
|
|
||||||
using Windows.ApplicationModel.DataTransfer;
|
using Windows.ApplicationModel.DataTransfer;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
|
|
||||||
namespace FoxTube.Controls
|
namespace FoxTube.Controls
|
||||||
{
|
{
|
||||||
@@ -15,11 +15,12 @@ namespace FoxTube.Controls
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class VideoCard : UserControl
|
public sealed partial class VideoCard : UserControl
|
||||||
{
|
{
|
||||||
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("Cards");
|
||||||
|
|
||||||
public string playlistId;
|
public string playlistId;
|
||||||
public string videoId;
|
public string videoId;
|
||||||
Video item;
|
Video item;
|
||||||
|
|
||||||
bool embed = false;
|
|
||||||
public VideoCard(string id, string playlist = null)
|
public VideoCard(string id, string playlist = null)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@@ -45,7 +46,7 @@ namespace FoxTube.Controls
|
|||||||
channelName.Text = item.Snippet.ChannelTitle;
|
channelName.Text = item.Snippet.ChannelTitle;
|
||||||
if (item.Snippet.LiveBroadcastContent == "live")
|
if (item.Snippet.LiveBroadcastContent == "live")
|
||||||
{
|
{
|
||||||
views.Text = $"{item.LiveStreamingDetails.ConcurrentViewers:0,0} viewers";
|
views.Text = $"{item.LiveStreamingDetails.ConcurrentViewers:0,0} {resources.GetString("/Cards/viewers")}";
|
||||||
if (item.LiveStreamingDetails.ScheduledStartTime.HasValue && item.LiveStreamingDetails.ScheduledEndTime.HasValue)
|
if (item.LiveStreamingDetails.ScheduledStartTime.HasValue && item.LiveStreamingDetails.ScheduledEndTime.HasValue)
|
||||||
info.Text = $"{item.LiveStreamingDetails.ScheduledEndTime - item.LiveStreamingDetails.ScheduledStartTime} | {Methods.GetAgo(item.LiveStreamingDetails.ActualStartTime.Value)}";
|
info.Text = $"{item.LiveStreamingDetails.ScheduledEndTime - item.LiveStreamingDetails.ScheduledStartTime} | {Methods.GetAgo(item.LiveStreamingDetails.ActualStartTime.Value)}";
|
||||||
else
|
else
|
||||||
@@ -62,14 +63,13 @@ namespace FoxTube.Controls
|
|||||||
liveTag.Visibility = Visibility.Visible;
|
liveTag.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
if (item.LiveStreamingDetails.ScheduledStartTime.HasValue && (item.LiveStreamingDetails.ScheduledStartTime - DateTime.Now).Value.TotalMilliseconds > 0)
|
if (item.LiveStreamingDetails.ScheduledStartTime.HasValue && (item.LiveStreamingDetails.ScheduledStartTime - DateTime.Now).Value.TotalMilliseconds > 0)
|
||||||
liveContent.Text = $"Goes live in {item.LiveStreamingDetails.ScheduledStartTime}";
|
liveContent.Text = $"{resources.GetString("/Cards/goesLive")} {item.LiveStreamingDetails.ScheduledStartTime}";
|
||||||
else liveContent.Text = "Upcoming";
|
else liveContent.Text = resources.GetString("/Cards/upcoming");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
views.Text = $"{item.Statistics.ViewCount:0,0} views";
|
views.Text = $"{item.Statistics.ViewCount:0,0} {resources.GetString("/Cards/views")}";
|
||||||
info.Text = $"{item.ContentDetails.Duration.GetDuration()} | {Methods.GetAgo(item.Snippet.PublishedAt.Value)}";
|
info.Text = $"{item.ContentDetails.Duration.GetDuration()} | {Methods.GetAgo(item.Snippet.PublishedAt.Value)}";
|
||||||
embed = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var request1 = SecretsVault.Service.Channels.List("snippet");
|
var request1 = SecretsVault.Service.Channels.List("snippet");
|
||||||
@@ -90,22 +90,8 @@ namespace FoxTube.Controls
|
|||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void Button_Click(object sender, RoutedEventArgs e)
|
public void Button_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (embed)
|
|
||||||
{
|
|
||||||
MessageDialog dialog = new MessageDialog("Unfortunately, at this stage of application development we don't support live steams. This issue will be fixed in the next update. Sorry. Would you like us to open this stream in browser?", "Open in browser");
|
|
||||||
|
|
||||||
dialog.Commands.Add(new UICommand("Yes", async (command) =>
|
|
||||||
{
|
|
||||||
await Launcher.LaunchUriAsync(new Uri($"https://www.youtube.com/watch?v={videoId}"));
|
|
||||||
}));
|
|
||||||
dialog.Commands.Add(new UICommand("No"));
|
|
||||||
dialog.DefaultCommandIndex = 0;
|
|
||||||
dialog.CancelCommandIndex = 1;
|
|
||||||
await dialog.ShowAsync();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Methods.MainPage.GoToVideo(videoId, playlistId);
|
Methods.MainPage.GoToVideo(videoId, playlistId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,6 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<Grid Grid.Row="2" Height="50" Name="mainControls" Background="#7F000000">
|
<Grid Grid.Row="2" Height="50" Name="mainControls" Background="#7F000000">
|
||||||
<ProgressBar Name="bufferingBar" VerticalAlignment="Top" Margin="0,-4,0,0" IsIndeterminate="True" Visibility="Visible"/>
|
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="auto"/>
|
<ColumnDefinition Width="auto"/>
|
||||||
@@ -180,14 +179,5 @@
|
|||||||
<Button Name="signin" Click="signin_Click" Content="Sign in now" Foreground="White" Background="Gray" HorizontalAlignment="Right" Grid.Column="1" Margin="0,0,10,0"/>
|
<Button Name="signin" Click="signin_Click" Content="Sign in now" Foreground="White" Background="Gray" HorizontalAlignment="Right" Grid.Column="1" Margin="0,0,10,0"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Grid Background="#E5000000" Visibility="Collapsed">
|
|
||||||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Name="errorPlate">
|
|
||||||
<TextBlock Text="Something went wrong..." HorizontalAlignment="Center" FontSize="20"/>
|
|
||||||
<TextBlock Text="Video ID: " HorizontalAlignment="Center" IsTextSelectionEnabled="True" FontSize="20"/>
|
|
||||||
<TextBlock Text="Error type: " HorizontalAlignment="Center" IsTextSelectionEnabled="True" FontSize="20"/>
|
|
||||||
<TextBlock Text="Message: " HorizontalAlignment="Center" IsTextSelectionEnabled="True" FontSize="20"/>
|
|
||||||
</StackPanel>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Timers;
|
|
||||||
using Windows.Foundation;
|
using Windows.Foundation;
|
||||||
using Windows.UI.Core;
|
using Windows.UI.Core;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using Windows.UI.Xaml.Controls.Primitives;
|
using Windows.UI.Xaml.Controls.Primitives;
|
||||||
using Windows.UI.Xaml.Input;
|
using Windows.UI.Xaml.Input;
|
||||||
using Windows.UI.Xaml.Media;
|
|
||||||
using Google.Apis.YouTube.v3.Data;
|
using Google.Apis.YouTube.v3.Data;
|
||||||
using Windows.UI.Xaml.Media.Imaging;
|
using Windows.UI.Xaml.Media.Imaging;
|
||||||
using System.Diagnostics;
|
|
||||||
using Windows.Media;
|
using Windows.Media;
|
||||||
using Windows.Storage.Streams;
|
using Windows.Storage.Streams;
|
||||||
using Windows.UI.ViewManagement;
|
using Windows.UI.ViewManagement;
|
||||||
@@ -26,11 +23,6 @@ using System.Globalization;
|
|||||||
using FoxTube.Controls;
|
using FoxTube.Controls;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
using Windows.Media.Core;
|
using Windows.Media.Core;
|
||||||
using Windows.Media.MediaProperties;
|
|
||||||
using Windows.Storage;
|
|
||||||
using Windows.Storage.FileProperties;
|
|
||||||
using Windows.Media.Editing;
|
|
||||||
using Windows.Media.Streaming.Adaptive;
|
|
||||||
using Windows.Media.Playback;
|
using Windows.Media.Playback;
|
||||||
|
|
||||||
namespace FoxTube
|
namespace FoxTube
|
||||||
@@ -40,41 +32,25 @@ namespace FoxTube
|
|||||||
public sealed partial class VideoPlayer : UserControl
|
public sealed partial class VideoPlayer : UserControl
|
||||||
{
|
{
|
||||||
public string videoId;
|
public string videoId;
|
||||||
Video item;
|
public Video item;
|
||||||
|
public string avatar;
|
||||||
|
|
||||||
private bool miniview = false;
|
public PlayerLayout layout = PlayerLayout.Normal;
|
||||||
public bool MiniView
|
|
||||||
{
|
|
||||||
get { return miniview; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
miniview = value;
|
|
||||||
if (value)
|
|
||||||
captions?.Hide();
|
|
||||||
else
|
|
||||||
captions?.Show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private bool fullScreen = false;
|
|
||||||
public bool pointerCaptured = false;
|
public bool pointerCaptured = false;
|
||||||
|
Point cursorBackup;
|
||||||
|
|
||||||
public event ObjectEventHandler SetFullSize;
|
public event ObjectEventHandler SetFullSize;
|
||||||
public event ObjectEventHandler NextClicked;
|
public event Event NextClicked;
|
||||||
public Button Next => next;
|
public Button Next => next;
|
||||||
|
|
||||||
CoreCursor cursorBackup = Window.Current.CoreWindow.PointerCursor;
|
public TimeSpan Elapsed { get; set; } = TimeSpan.FromMilliseconds(0);
|
||||||
Point cursorPositionBackup;
|
public TimeSpan Remaining => Total.Subtract(Elapsed);
|
||||||
|
public TimeSpan Total { get; set; }
|
||||||
|
|
||||||
public TimeSpan elapsed;
|
|
||||||
TimeSpan remaining;
|
|
||||||
TimeSpan total;
|
|
||||||
|
|
||||||
string avatar;
|
|
||||||
double timecodeBackup = 0;
|
double timecodeBackup = 0;
|
||||||
bool needUpdateTimecode = false;
|
bool needUpdateTimecode = false;
|
||||||
|
|
||||||
SystemMediaTransportControls systemControls;
|
SystemMediaTransportControls systemControls;
|
||||||
LiveCaptions captions;
|
|
||||||
|
|
||||||
IReadOnlyList<ClosedCaptionTrackInfo> ccInfo;
|
IReadOnlyList<ClosedCaptionTrackInfo> ccInfo;
|
||||||
MediaStreamInfoSet streamInfo;
|
MediaStreamInfoSet streamInfo;
|
||||||
@@ -85,6 +61,8 @@ namespace FoxTube
|
|||||||
};
|
};
|
||||||
DispatcherTimer ctrlsFadeTimer = null;
|
DispatcherTimer ctrlsFadeTimer = null;
|
||||||
|
|
||||||
|
LiveCaptions captions;
|
||||||
|
|
||||||
MediaPlayer videoPlayer;
|
MediaPlayer videoPlayer;
|
||||||
MediaPlayer audioPlayer;
|
MediaPlayer audioPlayer;
|
||||||
MediaTimelineController controller;
|
MediaTimelineController controller;
|
||||||
@@ -95,8 +73,6 @@ namespace FoxTube
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize(Video meta, string channelAvatar)
|
public void Initialize(Video meta, string channelAvatar)
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
Visibility = Visibility.Collapsed;
|
Visibility = Visibility.Collapsed;
|
||||||
|
|
||||||
@@ -106,11 +82,11 @@ namespace FoxTube
|
|||||||
|
|
||||||
if (item.ContentDetails.ContentRating != null)
|
if (item.ContentDetails.ContentRating != null)
|
||||||
{
|
{
|
||||||
if(SecretsVault.IsAuthorized)
|
if (SecretsVault.IsAuthorized)
|
||||||
{
|
{
|
||||||
if (SettingsStorage.Mature == MatureState.AllowedOnce)
|
if (SettingsStorage.Mature == MatureState.AllowedOnce)
|
||||||
SettingsStorage.Mature = MatureState.Blocked;
|
SettingsStorage.Mature = MatureState.Blocked;
|
||||||
else if(SettingsStorage.Mature == MatureState.Blocked)
|
else if (SettingsStorage.Mature == MatureState.Blocked)
|
||||||
{
|
{
|
||||||
Visibility = Visibility.Visible;
|
Visibility = Visibility.Visible;
|
||||||
proceedMature.Visibility = Visibility.Visible;
|
proceedMature.Visibility = Visibility.Visible;
|
||||||
@@ -136,11 +112,6 @@ namespace FoxTube
|
|||||||
|
|
||||||
Visibility = Visibility.Visible;
|
Visibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
RaiseError(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void InitializeContols()
|
public void InitializeContols()
|
||||||
{
|
{
|
||||||
@@ -150,10 +121,24 @@ namespace FoxTube
|
|||||||
videoPlayer.TimelineController = controller;
|
videoPlayer.TimelineController = controller;
|
||||||
controller.PositionChanged += UpdateSeek;
|
controller.PositionChanged += UpdateSeek;
|
||||||
videoSource.SetMediaPlayer(videoPlayer);
|
videoSource.SetMediaPlayer(videoPlayer);
|
||||||
videoPlayer.MediaOpened += (s, e) =>
|
videoPlayer.MediaOpened += async (s, e) =>
|
||||||
{
|
{
|
||||||
|
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
||||||
|
{
|
||||||
|
if (controller.State == MediaTimelineControllerState.Running && needUpdateTimecode)
|
||||||
|
{
|
||||||
|
controller.Position = TimeSpan.FromSeconds(timecodeBackup);
|
||||||
|
needUpdateTimecode = false;
|
||||||
|
controller.Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
seek.IsEnabled = true;
|
||||||
|
play.IsEnabled = true;
|
||||||
|
touchPlay.IsEnabled = true;
|
||||||
|
|
||||||
if (SettingsStorage.Autoplay)
|
if (SettingsStorage.Autoplay)
|
||||||
controller.Resume();
|
controller.Resume();
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
volume.Value = SettingsStorage.Volume;
|
volume.Value = SettingsStorage.Volume;
|
||||||
@@ -190,7 +175,7 @@ namespace FoxTube
|
|||||||
|
|
||||||
ctrlsFadeTimer = new DispatcherTimer();
|
ctrlsFadeTimer = new DispatcherTimer();
|
||||||
ctrlsFadeTimer.Interval = TimeSpan.FromSeconds(5);
|
ctrlsFadeTimer.Interval = TimeSpan.FromSeconds(5);
|
||||||
ctrlsFadeTimer.Tick += Elapsed;
|
ctrlsFadeTimer.Tick += ControlsFade;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadUpcoming()
|
public void LoadUpcoming()
|
||||||
@@ -238,16 +223,14 @@ namespace FoxTube
|
|||||||
{
|
{
|
||||||
InitializeContols();
|
InitializeContols();
|
||||||
captions = grid.Children[2] as LiveCaptions;
|
captions = grid.Children[2] as LiveCaptions;
|
||||||
|
captions.Player = controller;
|
||||||
|
|
||||||
total = XmlConvert.ToTimeSpan(item.ContentDetails.Duration);
|
Total = XmlConvert.ToTimeSpan(item.ContentDetails.Duration);
|
||||||
seek.Maximum = total.TotalSeconds;
|
seek.Maximum = Total.TotalMilliseconds;
|
||||||
seekIndicator.Maximum = total.TotalSeconds;
|
seekIndicator.Maximum = Total.TotalMilliseconds;
|
||||||
|
|
||||||
elapsed = TimeSpan.FromSeconds(seek.Value);
|
elapsedTime.Text = Elapsed.Hours > 0 ? $"{Elapsed:hh\\:mm\\:ss}" : $"{Elapsed:mm\\:ss}";
|
||||||
remaining = total.Subtract(elapsed);
|
remainingTime.Text = Remaining.Hours > 0 ? $"{Remaining:hh\\:mm\\:ss}" : $"{Remaining:mm\\:ss}";
|
||||||
|
|
||||||
elapsedTime.Text = elapsed.Hours > 0 ? $"{elapsed:hh\\:mm\\:ss}" : $"{elapsed:mm\\:ss}";
|
|
||||||
remainingTime.Text = remaining.Hours > 0 ? $"{remaining:hh\\:mm\\:ss}" : $"{remaining:mm\\:ss}";
|
|
||||||
|
|
||||||
#region Retrieving info for CC and Media streams
|
#region Retrieving info for CC and Media streams
|
||||||
//Loading streams
|
//Loading streams
|
||||||
@@ -265,6 +248,8 @@ namespace FoxTube
|
|||||||
|
|
||||||
//Loading captions
|
//Loading captions
|
||||||
ccInfo = await new YoutubeClient().GetVideoClosedCaptionTrackInfosAsync(videoId);
|
ccInfo = await new YoutubeClient().GetVideoClosedCaptionTrackInfosAsync(videoId);
|
||||||
|
if (ccInfo.Count > 0)
|
||||||
|
{
|
||||||
foreach (ClosedCaptionTrackInfo cc in ccInfo)
|
foreach (ClosedCaptionTrackInfo cc in ccInfo)
|
||||||
{
|
{
|
||||||
subsLang.Items.Add(new ComboBoxItem()
|
subsLang.Items.Add(new ComboBoxItem()
|
||||||
@@ -272,9 +257,19 @@ namespace FoxTube
|
|||||||
Content = string.Format("{0}{1}", CultureInfo.GetCultureInfo(cc.Language.Code).DisplayName, cc.IsAutoGenerated ? " (Auto-generated)" : ""),
|
Content = string.Format("{0}{1}", CultureInfo.GetCultureInfo(cc.Language.Code).DisplayName, cc.IsAutoGenerated ? " (Auto-generated)" : ""),
|
||||||
Tag = cc
|
Tag = cc
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (SettingsStorage.RelevanceLanguage.Contains(cc.Language.Code))
|
||||||
|
subsLang.SelectedItem = subsLang.Items.Last();
|
||||||
}
|
}
|
||||||
if (ccInfo.Count > 0)
|
|
||||||
|
if (subsLang.SelectedItem == null)
|
||||||
|
if(ccInfo.ToList().Exists(i => i.Language.Code == "en"))
|
||||||
|
subsLang.SelectedItem = subsLang.Items.Find(i => (((ComboBoxItem)i).Tag as ClosedCaptionTrackInfo).Language.Code == "en");
|
||||||
|
else
|
||||||
subsLang.SelectedIndex = 0;
|
subsLang.SelectedIndex = 0;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
else
|
else
|
||||||
captionsBtn.Visibility = Visibility.Collapsed;
|
captionsBtn.Visibility = Visibility.Collapsed;
|
||||||
#endregion
|
#endregion
|
||||||
@@ -294,19 +289,11 @@ namespace FoxTube
|
|||||||
{
|
{
|
||||||
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
||||||
{
|
{
|
||||||
seek.Value = controller.Position.TotalSeconds;
|
seek.Value = controller.Position.TotalMilliseconds;
|
||||||
seekIndicator.Value = seek.Value;
|
seekIndicator.Value = seek.Value;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RaiseError(Exception e)
|
|
||||||
{
|
|
||||||
((TextBlock)errorPlate.Children[1]).Text = $"Video ID: {videoId}";
|
|
||||||
((TextBlock)errorPlate.Children[2]).Text = $"Error type: {e.GetType()}";
|
|
||||||
((TextBlock)errorPlate.Children[3]).Text = $"Message: {e.Message}";
|
|
||||||
((Grid)errorPlate.Parent).Visibility = Visibility.Visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void SystemControls_Engaged(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
|
private async void SystemControls_Engaged(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
|
||||||
{
|
{
|
||||||
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
||||||
@@ -322,29 +309,39 @@ namespace FoxTube
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SystemMediaTransportControlsButton.Next:
|
case SystemMediaTransportControlsButton.Next:
|
||||||
NextClicked.Invoke(this, null);
|
NextClicked?.Invoke();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Elapsed(object sender, object e)
|
void ControlsFade(object sender, object e)
|
||||||
{
|
{
|
||||||
controls.Visibility = Visibility.Collapsed;
|
controls.Visibility = Visibility.Collapsed;
|
||||||
if (!MiniView)
|
if (layout != PlayerLayout.Minimized)
|
||||||
touchCentral.Visibility = Visibility.Collapsed;
|
touchCentral.Visibility = Visibility.Collapsed;
|
||||||
if (pointerCaptured)
|
if (pointerCaptured)
|
||||||
Window.Current.CoreWindow.PointerCursor = null;
|
Window.Current.CoreWindow.PointerCursor = null;
|
||||||
seekIndicator.Visibility = Visibility.Collapsed;
|
seekIndicator.Visibility = Visibility.Collapsed;
|
||||||
ctrlsFadeTimer?.Stop();
|
ctrlsFadeTimer.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateSize()
|
public void UpdateSize()
|
||||||
{
|
{
|
||||||
if(MiniView)
|
if(layout == PlayerLayout.Minimized)
|
||||||
Height = Window.Current.Bounds.Height;
|
Height = Window.Current.Bounds.Height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShowControls()
|
||||||
|
{
|
||||||
|
if (ctrlsFadeTimer == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
controls.Visibility = Visibility.Visible;
|
||||||
|
Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0);
|
||||||
|
ctrlsFadeTimer.Start();
|
||||||
|
}
|
||||||
|
|
||||||
private void volume_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
|
private void volume_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
|
||||||
{
|
{
|
||||||
double v = volume.Value;
|
double v = volume.Value;
|
||||||
@@ -377,58 +374,68 @@ namespace FoxTube
|
|||||||
else volume.Value = SettingsStorage.Volume;
|
else volume.Value = SettingsStorage.Volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UserControl_PointerMoved(object sender, PointerRoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (ctrlsFadeTimer == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
else if (cursorBackup != Window.Current.CoreWindow.PointerPosition)
|
||||||
|
ShowControls();
|
||||||
|
|
||||||
|
cursorBackup = Window.Current.CoreWindow.PointerPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UserControl_PointerExited(object sender, PointerRoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse && ctrlsFadeTimer != null)
|
||||||
|
{
|
||||||
|
pointerCaptured = false;
|
||||||
|
ControlsFade(this, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UserControl_PointerEntered(object sender, PointerRoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse && ctrlsFadeTimer != null)
|
||||||
|
pointerCaptured = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void playPauseArea_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
|
||||||
|
{
|
||||||
|
switch (layout)
|
||||||
|
{
|
||||||
|
case PlayerLayout.Minimized:
|
||||||
|
if (ApplicationView.GetForCurrentView().ViewMode == ApplicationViewMode.CompactOverlay)
|
||||||
|
miniView_Click(this, null);
|
||||||
|
else if (ApplicationView.GetForCurrentView().ViewMode == ApplicationViewMode.Default)
|
||||||
|
maximize_Click(this, null);
|
||||||
|
break;
|
||||||
|
case PlayerLayout.Fullscreen:
|
||||||
|
case PlayerLayout.Normal:
|
||||||
|
fullscreen_Click(this, null);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void playPauseArea_Tapped(object sender, TappedRoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse && layout != PlayerLayout.Minimized)
|
||||||
|
play_Click(this, null);
|
||||||
|
UserControl_Tapped(sender, e);
|
||||||
|
}
|
||||||
|
|
||||||
private void UserControl_Tapped(object sender, TappedRoutedEventArgs e)
|
private void UserControl_Tapped(object sender, TappedRoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Touch && ctrlsFadeTimer != null)
|
if (e.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Touch && ctrlsFadeTimer != null)
|
||||||
{
|
{
|
||||||
touchCentral.Visibility = Visibility.Visible;
|
touchCentral.Visibility = Visibility.Visible;
|
||||||
if (ctrlsFadeTimer.IsEnabled)
|
if (ctrlsFadeTimer.IsEnabled)
|
||||||
Elapsed(this, null);
|
ControlsFade(this, null);
|
||||||
else
|
else
|
||||||
ShowControls();
|
ShowControls();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UserControl_PointerMoved(object sender, PointerRoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (ctrlsFadeTimer == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (cursorPositionBackup == null)
|
|
||||||
cursorPositionBackup = Window.Current.CoreWindow.PointerPosition;
|
|
||||||
else if (cursorPositionBackup == Window.Current.CoreWindow.PointerPosition)
|
|
||||||
return;
|
|
||||||
ShowControls();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UserControl_PointerExited(object sender, PointerRoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (ctrlsFadeTimer.IsEnabled && e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
|
|
||||||
{
|
|
||||||
pointerCaptured = false;
|
|
||||||
Elapsed(this, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UserControl_PointerEntered(object sender, PointerRoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
|
|
||||||
pointerCaptured = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ShowControls()
|
|
||||||
{
|
|
||||||
if (ctrlsFadeTimer == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
controls.Visibility = Visibility.Visible;
|
|
||||||
if (MiniView)
|
|
||||||
seekIndicator.Visibility = Visibility.Visible;
|
|
||||||
Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0);
|
|
||||||
ctrlsFadeTimer?.Stop();
|
|
||||||
ctrlsFadeTimer?.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void quality_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void quality_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -436,16 +443,18 @@ namespace FoxTube
|
|||||||
SettingsStorage.RememberedQuality = ((ComboBoxItem)quality.SelectedItem).Content.ToString();
|
SettingsStorage.RememberedQuality = ((ComboBoxItem)quality.SelectedItem).Content.ToString();
|
||||||
|
|
||||||
controller.Pause();
|
controller.Pause();
|
||||||
timecodeBackup = controller.Position.TotalSeconds;
|
|
||||||
|
|
||||||
if(streamInfo.Muxed.ToList().Exists(x => x.VideoQualityLabel == (quality.SelectedItem as ComboBoxItem).Content.ToString()))
|
timecodeBackup = controller.Position.TotalSeconds;
|
||||||
|
needUpdateTimecode = true;
|
||||||
|
|
||||||
|
if (streamInfo.Muxed.ToList().Exists(x => x.VideoQualityLabel == (quality.SelectedItem as ComboBoxItem).Content.ToString()))
|
||||||
{
|
{
|
||||||
videoPlayer.Source = MediaSource.CreateFromUri(streamInfo.Muxed.Find(x => x.VideoQualityLabel == (quality.SelectedItem as ComboBoxItem).Content as string).Url.ToUri());
|
videoPlayer.Source = MediaSource.CreateFromUri(streamInfo.Muxed.Find(x => x.VideoQualityLabel == (quality.SelectedItem as ComboBoxItem).Content as string).Url.ToUri());
|
||||||
audioPlayer = null;
|
audioPlayer = null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(audioPlayer == null)
|
if (audioPlayer == null)
|
||||||
{
|
{
|
||||||
audioPlayer = new MediaPlayer();
|
audioPlayer = new MediaPlayer();
|
||||||
audioPlayer.TimelineController = controller;
|
audioPlayer.TimelineController = controller;
|
||||||
@@ -460,13 +469,9 @@ namespace FoxTube
|
|||||||
audioPlayer.Source = MediaSource.CreateFromUri(audioInfo.Url.ToUri());
|
audioPlayer.Source = MediaSource.CreateFromUri(audioInfo.Url.ToUri());
|
||||||
}
|
}
|
||||||
|
|
||||||
needUpdateTimecode = true;
|
|
||||||
controller.Resume();
|
controller.Resume();
|
||||||
}
|
}
|
||||||
catch
|
catch { }
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void subsSwitch_Toggled(object sender, RoutedEventArgs e)
|
private void subsSwitch_Toggled(object sender, RoutedEventArgs e)
|
||||||
@@ -482,19 +487,14 @@ namespace FoxTube
|
|||||||
void LoadTrack()
|
void LoadTrack()
|
||||||
{
|
{
|
||||||
if (subsSwitch.IsOn)
|
if (subsSwitch.IsOn)
|
||||||
{
|
captions.Initialize((subsLang.SelectedItem as ComboBoxItem).Tag as ClosedCaptionTrackInfo);
|
||||||
if (ccInfo[subsLang.SelectedIndex].IsAutoGenerated)
|
|
||||||
captions.Initialize(ccInfo[subsLang.SelectedIndex].Url.Replace("format=3", "format=0"), true);
|
|
||||||
else
|
|
||||||
captions.Initialize(ccInfo[subsLang.SelectedIndex].Url);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
captions?.Close();
|
captions?.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fullscreen_Click(object sender, RoutedEventArgs e)
|
private void fullscreen_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
fullScreen = !fullScreen;
|
bool fullScreen = layout == PlayerLayout.Fullscreen ? false : true;
|
||||||
SetFullSize.Invoke(this, fullScreen);
|
SetFullSize.Invoke(this, fullScreen);
|
||||||
Methods.MainPage.Fullscreen(fullScreen);
|
Methods.MainPage.Fullscreen(fullScreen);
|
||||||
|
|
||||||
@@ -503,12 +503,14 @@ namespace FoxTube
|
|||||||
ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
|
ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
|
||||||
fullscreen.Content = "\xE1D8";
|
fullscreen.Content = "\xE1D8";
|
||||||
Height = Methods.MainPage.Height;
|
Height = Methods.MainPage.Height;
|
||||||
|
layout = PlayerLayout.Fullscreen;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ApplicationView.GetForCurrentView().ExitFullScreenMode();
|
ApplicationView.GetForCurrentView().ExitFullScreenMode();
|
||||||
fullscreen.Content = "\xE1D9";
|
fullscreen.Content = "\xE1D9";
|
||||||
Height = double.NaN;
|
Height = double.NaN;
|
||||||
|
layout = PlayerLayout.Normal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -524,21 +526,9 @@ namespace FoxTube
|
|||||||
{
|
{
|
||||||
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
||||||
{
|
{
|
||||||
if (controller.State == MediaTimelineControllerState.Running && needUpdateTimecode)
|
switch (sender.State)
|
||||||
{
|
|
||||||
controller.Position = TimeSpan.FromSeconds(timecodeBackup);
|
|
||||||
needUpdateTimecode = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (controller.State)
|
|
||||||
{
|
{
|
||||||
case MediaTimelineControllerState.Paused:
|
case MediaTimelineControllerState.Paused:
|
||||||
bufferingBar.Visibility = Visibility.Collapsed;
|
|
||||||
|
|
||||||
seek.IsEnabled = true;
|
|
||||||
play.IsEnabled = true;
|
|
||||||
touchPlay.IsEnabled = true;
|
|
||||||
|
|
||||||
play.Content = "\xE102";
|
play.Content = "\xE102";
|
||||||
touchPlay.Content = "\xE102";
|
touchPlay.Content = "\xE102";
|
||||||
|
|
||||||
@@ -546,12 +536,6 @@ namespace FoxTube
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MediaTimelineControllerState.Running:
|
case MediaTimelineControllerState.Running:
|
||||||
bufferingBar.Visibility = Visibility.Collapsed;
|
|
||||||
|
|
||||||
seek.IsEnabled = true;
|
|
||||||
play.IsEnabled = true;
|
|
||||||
touchPlay.IsEnabled = true;
|
|
||||||
|
|
||||||
play.Content = "\xE103";
|
play.Content = "\xE103";
|
||||||
touchPlay.Content = "\xE103";
|
touchPlay.Content = "\xE103";
|
||||||
|
|
||||||
@@ -559,7 +543,6 @@ namespace FoxTube
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
bufferingBar.Visibility = Visibility.Collapsed;
|
|
||||||
systemControls.PlaybackStatus = MediaPlaybackStatus.Closed;
|
systemControls.PlaybackStatus = MediaPlaybackStatus.Closed;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -571,16 +554,13 @@ namespace FoxTube
|
|||||||
private async void miniView_Click(object sender, RoutedEventArgs e)
|
private async void miniView_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar;
|
ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar;
|
||||||
MiniView = !MiniView;
|
bool MiniView = layout == PlayerLayout.Minimized ? false : true;
|
||||||
SetFullSize(this, MiniView);
|
SetFullSize(this, MiniView);
|
||||||
|
|
||||||
if (MiniView)
|
if (MiniView)
|
||||||
{
|
{
|
||||||
if (fullScreen)
|
if (layout == PlayerLayout.Fullscreen)
|
||||||
{
|
|
||||||
fullscreen.Content = "\xE740";
|
fullscreen.Content = "\xE740";
|
||||||
fullScreen = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
await ApplicationView.GetForCurrentView().TryEnterViewModeAsync(ApplicationViewMode.CompactOverlay);
|
await ApplicationView.GetForCurrentView().TryEnterViewModeAsync(ApplicationViewMode.CompactOverlay);
|
||||||
pointerCaptured = false;
|
pointerCaptured = false;
|
||||||
@@ -599,6 +579,11 @@ namespace FoxTube
|
|||||||
touchBack10.FontSize = touchFwd30.FontSize = 20;
|
touchBack10.FontSize = touchFwd30.FontSize = 20;
|
||||||
touchPlay.FontSize = 50;
|
touchPlay.FontSize = 50;
|
||||||
Methods.MainPage.Fullscreen(true);
|
Methods.MainPage.Fullscreen(true);
|
||||||
|
|
||||||
|
layout = PlayerLayout.Minimized;
|
||||||
|
|
||||||
|
if(captions != null)
|
||||||
|
captions.Size = 15;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -615,38 +600,98 @@ namespace FoxTube
|
|||||||
Methods.MainPage.Fullscreen(false);
|
Methods.MainPage.Fullscreen(false);
|
||||||
|
|
||||||
Height = double.NaN;
|
Height = double.NaN;
|
||||||
|
|
||||||
|
layout = PlayerLayout.Normal;
|
||||||
|
|
||||||
|
if(captions != null)
|
||||||
|
captions.Size = 24;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void minimize_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (layout == PlayerLayout.Fullscreen)
|
||||||
|
{
|
||||||
|
ApplicationView.GetForCurrentView().ExitFullScreenMode();
|
||||||
|
fullscreen.Content = "\xE740";
|
||||||
|
layout = PlayerLayout.Normal;
|
||||||
|
Methods.MainPage.Fullscreen(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SetFullSize?.Invoke(this, true);
|
||||||
|
|
||||||
|
Width = 432;
|
||||||
|
Height = 243;
|
||||||
|
|
||||||
|
layout = PlayerLayout.Minimized;
|
||||||
|
Methods.MainPage.MinimizeVideo();
|
||||||
|
|
||||||
|
mainControls.Visibility = Visibility.Collapsed;
|
||||||
|
header.Visibility = Visibility.Collapsed;
|
||||||
|
|
||||||
|
touchCentral.Visibility = Visibility.Visible;
|
||||||
|
maximize.Visibility = Visibility.Visible;
|
||||||
|
close.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
touchBack10.FontSize = touchFwd30.FontSize = 20;
|
||||||
|
touchPlay.FontSize = 50;
|
||||||
|
|
||||||
|
if (captions != null)
|
||||||
|
captions.Size = 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void maximize_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
SetFullSize?.Invoke(this, false);
|
||||||
|
|
||||||
|
Width = double.NaN;
|
||||||
|
Height = double.NaN;
|
||||||
|
|
||||||
|
layout = PlayerLayout.Normal;
|
||||||
|
Methods.MainPage.MaximizeVideo();
|
||||||
|
|
||||||
|
mainControls.Visibility = Visibility.Visible;
|
||||||
|
header.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
touchCentral.Visibility = Visibility.Collapsed;
|
||||||
|
maximize.Visibility = Visibility.Collapsed;
|
||||||
|
close.Visibility = Visibility.Collapsed;
|
||||||
|
|
||||||
|
touchBack10.FontSize = touchFwd30.FontSize = 40;
|
||||||
|
touchPlay.FontSize = 100;
|
||||||
|
|
||||||
|
if (captions != null)
|
||||||
|
captions.Size = 24;
|
||||||
|
}
|
||||||
|
|
||||||
private void seek_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
|
private void seek_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
|
||||||
{
|
{
|
||||||
elapsed = TimeSpan.FromSeconds(seek.Value);
|
Elapsed = TimeSpan.FromMilliseconds(seek.Value);
|
||||||
remaining = total.Subtract(elapsed);
|
|
||||||
|
|
||||||
elapsedTime.Text = elapsed.Hours > 0 ? $"{elapsed:hh\\:mm\\:ss}" : $"{elapsed:mm\\:ss}";
|
elapsedTime.Text = Elapsed.Hours > 0 ? $"{Elapsed:hh\\:mm\\:ss}" : $"{Elapsed:mm\\:ss}";
|
||||||
remainingTime.Text = remaining.Hours > 0 ? $"{remaining:hh\\:mm\\:ss}" : $"{remaining:mm\\:ss}";
|
remainingTime.Text = Remaining.Hours > 0 ? $"{Remaining:hh\\:mm\\:ss}" : $"{Remaining:mm\\:ss}";
|
||||||
}
|
}
|
||||||
|
|
||||||
private void seek_PointerCaptureLost(object sender, PointerRoutedEventArgs e)
|
private void seek_PointerCaptureLost(object sender, PointerRoutedEventArgs e)
|
||||||
{
|
{
|
||||||
controller.Position = elapsed;
|
controller.Position = Elapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fwd30_Click(object sender, RoutedEventArgs e)
|
private void fwd30_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if(remaining.TotalSeconds >= 30)
|
if(Remaining.TotalSeconds >= 30)
|
||||||
controller.Position = elapsed.Add(TimeSpan.FromSeconds(30));
|
controller.Position = Elapsed.Add(TimeSpan.FromSeconds(30));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void back10_Click(object sender, RoutedEventArgs e)
|
private void back10_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (elapsed.TotalSeconds >= 10)
|
if (Elapsed.TotalSeconds >= 10)
|
||||||
controller.Position = elapsed.Subtract(TimeSpan.FromSeconds(10));
|
controller.Position = Elapsed.Subtract(TimeSpan.FromSeconds(10));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void next_Click(object sender, RoutedEventArgs e)
|
private void next_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
NextClicked.Invoke(this, null);
|
NextClicked?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void matureDismiss_Click(object sender, RoutedEventArgs e)
|
private void matureDismiss_Click(object sender, RoutedEventArgs e)
|
||||||
@@ -668,114 +713,49 @@ namespace FoxTube
|
|||||||
controller.Pause();
|
controller.Pause();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void minimize_Click(object sender, RoutedEventArgs e)
|
public void close_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
|
||||||
if(fullScreen)
|
|
||||||
{
|
|
||||||
ApplicationView.GetForCurrentView().ExitFullScreenMode();
|
|
||||||
fullscreen.Content = "\xE740";
|
|
||||||
fullScreen = false;
|
|
||||||
Methods.MainPage.Fullscreen(false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
SetFullSize.Invoke(this, true);
|
|
||||||
|
|
||||||
Width = 432;
|
|
||||||
Height = 243;
|
|
||||||
|
|
||||||
MiniView = true;
|
|
||||||
Methods.MainPage.MinimizeVideo();
|
|
||||||
|
|
||||||
mainControls.Visibility = Visibility.Collapsed;
|
|
||||||
header.Visibility = Visibility.Collapsed;
|
|
||||||
|
|
||||||
touchCentral.Visibility = Visibility.Visible;
|
|
||||||
maximize.Visibility = Visibility.Visible;
|
|
||||||
close.Visibility = Visibility.Visible;
|
|
||||||
|
|
||||||
touchBack10.FontSize = touchFwd30.FontSize = 20;
|
|
||||||
touchPlay.FontSize = 50;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void close_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
{
|
||||||
systemControls.IsEnabled = false;
|
systemControls.IsEnabled = false;
|
||||||
pointerCaptured = false;
|
pointerCaptured = false;
|
||||||
Elapsed(this, null);
|
|
||||||
controller.Pause();
|
controller.Pause();
|
||||||
videoPlayer.Dispose();
|
videoPlayer.Dispose();
|
||||||
audioPlayer?.Dispose();
|
audioPlayer?.Dispose();
|
||||||
|
|
||||||
|
ctrlsFadeTimer.Stop();
|
||||||
|
timer?.Stop();
|
||||||
|
|
||||||
Methods.MainPage.CloseVideo();
|
Methods.MainPage.CloseVideo();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void maximize_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
SetFullSize.Invoke(this, false);
|
|
||||||
|
|
||||||
Width = double.NaN;
|
|
||||||
Height = double.NaN;
|
|
||||||
|
|
||||||
MiniView = false;
|
|
||||||
Methods.MainPage.MaximizeVideo();
|
|
||||||
|
|
||||||
mainControls.Visibility = Visibility.Visible;
|
|
||||||
header.Visibility = Visibility.Visible;
|
|
||||||
|
|
||||||
touchCentral.Visibility = Visibility.Collapsed;
|
|
||||||
maximize.Visibility = Visibility.Collapsed;
|
|
||||||
close.Visibility = Visibility.Collapsed;
|
|
||||||
|
|
||||||
touchBack10.FontSize = touchFwd30.FontSize = 40;
|
|
||||||
touchPlay.FontSize = 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void cast_Click(object sender, RoutedEventArgs e)
|
private void cast_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if(videoPlayer.Source != null)
|
if (videoPlayer.Source == null)
|
||||||
{
|
return;
|
||||||
if (controller.State != MediaTimelineControllerState.Paused)
|
|
||||||
controller.Pause();
|
controller.Pause();
|
||||||
CastingDevicePicker picker = new CastingDevicePicker();
|
CastingDevicePicker picker = new CastingDevicePicker();
|
||||||
picker.Filter.SupportsVideo = true;
|
picker.Filter.SupportsVideo = true;
|
||||||
picker.CastingDeviceSelected += Picker_CastingDeviceSelected;
|
picker.CastingDeviceSelected += async (s, args) =>
|
||||||
|
{
|
||||||
|
CastingConnection connection = args.SelectedCastingDevice.CreateCastingConnection();
|
||||||
|
await connection.RequestStartCastingAsync(videoPlayer.GetAsCastingSource());
|
||||||
|
};
|
||||||
|
|
||||||
Point positinon = cast.TransformToVisual(Window.Current.Content).TransformPoint(new Point(0, 0));
|
Point positinon = cast.TransformToVisual(Window.Current.Content).TransformPoint(new Point(0, 0));
|
||||||
|
|
||||||
picker.Show(new Rect(positinon.X, positinon.Y, cast.ActualWidth, cast.ActualHeight), Windows.UI.Popups.Placement.Below);
|
picker.Show(new Rect(positinon.X, positinon.Y, cast.ActualWidth, cast.ActualHeight), Windows.UI.Popups.Placement.Below);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private async void Picker_CastingDeviceSelected(CastingDevicePicker sender, CastingDeviceSelectedEventArgs args)
|
|
||||||
{
|
|
||||||
CastingConnection connection = args.SelectedCastingDevice.CreateCastingConnection();
|
|
||||||
await connection.RequestStartCastingAsync(videoPlayer.GetAsCastingSource());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void playPauseArea_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (MiniView && ApplicationView.GetForCurrentView().ViewMode == ApplicationViewMode.CompactOverlay)
|
|
||||||
miniView_Click(this, null);
|
|
||||||
else if (MiniView && ApplicationView.GetForCurrentView().ViewMode == ApplicationViewMode.Default)
|
|
||||||
maximize_Click(this, null);
|
|
||||||
else if (fullScreen)
|
|
||||||
fullscreen_Click(this, null);
|
|
||||||
else if (!MiniView && !fullScreen)
|
|
||||||
fullscreen_Click(this, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void playPauseArea_Tapped(object sender, TappedRoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse && !MiniView)
|
|
||||||
play_Click(this, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void KeyUpPressed(object sender, KeyRoutedEventArgs e)
|
public void KeyUpPressed(object sender, KeyRoutedEventArgs e)
|
||||||
{
|
{
|
||||||
switch(e.Key)
|
switch(e.Key)
|
||||||
{
|
{
|
||||||
case VirtualKey.Escape:
|
case VirtualKey.Escape:
|
||||||
|
if (layout == PlayerLayout.Fullscreen)
|
||||||
|
fullscreen_Click(this, null);
|
||||||
|
break;
|
||||||
case VirtualKey.F11:
|
case VirtualKey.F11:
|
||||||
if (fullScreen)
|
|
||||||
fullscreen_Click(this, null);
|
fullscreen_Click(this, null);
|
||||||
break;
|
break;
|
||||||
case VirtualKey.Space:
|
case VirtualKey.Space:
|
||||||
@@ -797,12 +777,17 @@ namespace FoxTube
|
|||||||
|
|
||||||
private void videoSource_BufferingProgressChanged(object sender, RoutedEventArgs e)
|
private void videoSource_BufferingProgressChanged(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
bufferingLevel.Value = videoPlayer.PlaybackSession.BufferingProgress * 100;
|
bufferingLevel.Value = videoPlayer.PlaybackSession.DownloadProgress * 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GotoLive_Click(object sender, RoutedEventArgs e)
|
private void GotoLive_Click(object sender, RoutedEventArgs e) //TODO: Refactor
|
||||||
{
|
{
|
||||||
controller.Position = controller.Duration.Value.Subtract(TimeSpan.FromMilliseconds(100));
|
try
|
||||||
|
{
|
||||||
|
MediaTimeRange range = videoPlayer.PlaybackSession.GetSeekableRanges().Last();
|
||||||
|
controller.Position = range.End.Subtract(TimeSpan.FromMilliseconds(100));
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-2
@@ -103,7 +103,6 @@
|
|||||||
<Compile Include="App.xaml.cs">
|
<Compile Include="App.xaml.cs">
|
||||||
<DependentUpon>App.xaml</DependentUpon>
|
<DependentUpon>App.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Classes\Caption.cs" />
|
|
||||||
<Compile Include="Classes\DownloadItemContainer.cs" />
|
<Compile Include="Classes\DownloadItemContainer.cs" />
|
||||||
<Compile Include="Classes\InboxItem.cs" />
|
<Compile Include="Classes\InboxItem.cs" />
|
||||||
<Compile Include="Classes\Methods.cs" />
|
<Compile Include="Classes\Methods.cs" />
|
||||||
@@ -427,6 +426,25 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="FoxTube_TemporaryKey.pfx" />
|
<None Include="FoxTube_TemporaryKey.pfx" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\VideoPage.resw" />
|
||||||
|
<PRIResource Include="Strings\en-US\VideoPage.resw" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\Channel.resw" />
|
||||||
|
<PRIResource Include="Strings\en-US\Channel.resw" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\Chat.resw" />
|
||||||
|
<PRIResource Include="Strings\en-US\Chat.resw" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\Cards.resw" />
|
||||||
|
<PRIResource Include="Strings\en-US\Cards.resw" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\Methods.resw" />
|
||||||
|
<PRIResource Include="Strings\en-US\Methods.resw" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\Search.resw" />
|
||||||
|
<PRIResource Include="Strings\en-US\Search.resw" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\Playlist.resw" />
|
||||||
|
<PRIResource Include="Strings\en-US\Playlist.resw" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\Downloads.resw" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\CommentsPage.resw" />
|
||||||
|
<PRIResource Include="Strings\en-US\Downloads.resw" />
|
||||||
|
<PRIResource Include="Strings\ru-RU\Home.resw" />
|
||||||
|
<PRIResource Include="Strings\en-US\Home.resw" />
|
||||||
<PRIResource Include="Strings\en-US\CommentsPage.resw" />
|
<PRIResource Include="Strings\en-US\CommentsPage.resw" />
|
||||||
<PRIResource Include="Strings\ru-RU\LoadingPage.resw" />
|
<PRIResource Include="Strings\ru-RU\LoadingPage.resw" />
|
||||||
<PRIResource Include="Strings\en-US\LoadingPage.resw" />
|
<PRIResource Include="Strings\en-US\LoadingPage.resw" />
|
||||||
@@ -434,7 +452,6 @@
|
|||||||
<PRIResource Include="Strings\ru-RU\General.resw" />
|
<PRIResource Include="Strings\ru-RU\General.resw" />
|
||||||
<PRIResource Include="Strings\ru-RU\About.resw" />
|
<PRIResource Include="Strings\ru-RU\About.resw" />
|
||||||
<PRIResource Include="Strings\ru-RU\Settings.resw" />
|
<PRIResource Include="Strings\ru-RU\Settings.resw" />
|
||||||
<PRIResource Include="Strings\en-US\Translate.resw" />
|
|
||||||
<PRIResource Include="Strings\en-US\Inbox.resw" />
|
<PRIResource Include="Strings\en-US\Inbox.resw" />
|
||||||
<PRIResource Include="Strings\en-US\About.resw" />
|
<PRIResource Include="Strings\en-US\About.resw" />
|
||||||
<PRIResource Include="Strings\en-US\General.resw" />
|
<PRIResource Include="Strings\en-US\General.resw" />
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<Pivot SelectedIndex="0" Name="content" IsHeaderItemsCarouselEnabled="False" SelectionChanged="content_SelectionChanged">
|
<Pivot SelectedIndex="0" Name="content" IsHeaderItemsCarouselEnabled="False" SelectionChanged="content_SelectionChanged">
|
||||||
<PivotItem Header="Videos">
|
<PivotItem x:Uid="/Channel/videos" Header="Videos">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel Name="videos">
|
<StackPanel Name="videos">
|
||||||
<Image Name="channelCover" Stretch="Uniform" Source="/Assets/ChannelCoverTemplate.png"/>
|
<Image Name="channelCover" Stretch="Uniform" Source="/Assets/ChannelCoverTemplate.png"/>
|
||||||
@@ -35,11 +35,11 @@
|
|||||||
<TextBlock Name="videosCount" Foreground="Gray" Text="563,000 videos"/>
|
<TextBlock Name="videosCount" Foreground="Gray" Text="563,000 videos"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Column="2" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Height="50" Margin="10" TextAlignment="Center" Padding="0,16,0,0" Foreground="Gray">
|
<TextBlock Grid.Column="2" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Height="50" Margin="10" TextAlignment="Center" Padding="0,16,0,0" Foreground="Gray">
|
||||||
<Hyperlink Click="Hyperlink_Click">Log in</Hyperlink> to manage your subscriptions
|
<Hyperlink Click="Hyperlink_Click"><Run x:Uid="/Cards/login">Log in</Run></Hyperlink> <Run x:Uid="/Cards/tomanage">to manage your subscriptions</Run>
|
||||||
</TextBlock>
|
</TextBlock>
|
||||||
|
|
||||||
<Grid Visibility="Collapsed" Grid.Column="2" VerticalAlignment="Bottom" Margin="10" Name="subscriptionPane" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
|
<Grid Visibility="Collapsed" Grid.Column="2" VerticalAlignment="Bottom" Margin="10" Name="subscriptionPane" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
|
||||||
<Button Click="subscribe_Click" Name="subscribe" Width="250" Height="50" Background="Red" Foreground="White" FontSize="18" FontWeight="SemiBold" Content="Subscirbe"/>
|
<Button x:Uid="/Cards/subscribe" Click="subscribe_Click" Name="subscribe" Width="250" Height="50" Background="Red" Foreground="White" FontSize="18" FontWeight="SemiBold" Content="Subscirbe"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
<pages:VideoGrid/>
|
<pages:VideoGrid/>
|
||||||
@@ -47,11 +47,11 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</PivotItem>
|
</PivotItem>
|
||||||
<PivotItem Header="Playlists">
|
<PivotItem x:Uid="/Channel/playlists" Header="Playlists">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<Grid Name="playlists">
|
<Grid Name="playlists">
|
||||||
<StackPanel Margin="10" Visibility="Visible">
|
<StackPanel Margin="10" Visibility="Visible">
|
||||||
<TextBlock FontSize="28" Text="Playlists"/>
|
<TextBlock x:Uid="/Channel/playlistTitle" FontSize="28" Text="Playlists"/>
|
||||||
<pages:VideoGrid/>
|
<pages:VideoGrid/>
|
||||||
<controls:ShowMore Clicked="showMorePlaylists_Click"/>
|
<controls:ShowMore Clicked="showMorePlaylists_Click"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -59,10 +59,10 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</PivotItem>
|
</PivotItem>
|
||||||
<PivotItem Header="About channel">
|
<PivotItem x:Uid="/Channel/about" Header="About channel">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel Margin="10">
|
<StackPanel Margin="10">
|
||||||
<TextBlock FontSize="28" Text="About this channel"/>
|
<TextBlock x:Uid="/Channel/aboutTitle" FontSize="28" Text="About this channel"/>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition/>
|
<ColumnDefinition/>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="24" Text="Description"/>
|
<TextBlock x:Uid="/Channel/desc" FontSize="24" Text="Description"/>
|
||||||
<TextBlock Name="description" Margin="0,10,0,0" TextWrapping="WrapWholeWords" IsTextSelectionEnabled="True"/>
|
<TextBlock Name="description" Margin="0,10,0,0" TextWrapping="WrapWholeWords" IsTextSelectionEnabled="True"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
@@ -85,12 +85,12 @@
|
|||||||
<RowDefinition Height="auto"/>
|
<RowDefinition Height="auto"/>
|
||||||
<RowDefinition Height="auto"/>
|
<RowDefinition Height="auto"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<TextBlock FontSize="24" Text="Statistics"/>
|
<TextBlock x:Uid="/Channel/stats" FontSize="24" Text="Statistics"/>
|
||||||
|
|
||||||
<TextBlock Text="Registration date:" Grid.Row="1"/>
|
<TextBlock x:Uid="/Channel/regDate" Text="Registration date:" Grid.Row="1"/>
|
||||||
<TextBlock Grid.Row="1" Grid.Column="2" Name="registration" Text="13-May-18" HorizontalAlignment="Right"/>
|
<TextBlock Grid.Row="1" Grid.Column="2" Name="registration" Text="13-May-18" HorizontalAlignment="Right"/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Text="Views"/>
|
<TextBlock x:Uid="/Channel/views" Grid.Row="2" Text="Views"/>
|
||||||
<TextBlock Grid.Row="2" Grid.Column="2" Name="views" Text="1885510485" HorizontalAlignment="Right"/>
|
<TextBlock Grid.Row="2" Grid.Column="2" Name="views" Text="1885510485" HorizontalAlignment="Right"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -99,14 +99,14 @@
|
|||||||
</PivotItem>
|
</PivotItem>
|
||||||
|
|
||||||
<Pivot.RightHeader>
|
<Pivot.RightHeader>
|
||||||
<AutoSuggestBox VerticalAlignment="Center" Width="250" Margin="8" PlaceholderText="Search on channel" QueryIcon="Find" Name="search" QuerySubmitted="AutoSuggestBox_QuerySubmitted"/>
|
<AutoSuggestBox x:Uid="/Channel/search" VerticalAlignment="Center" Width="250" Margin="8" PlaceholderText="Search on channel" QueryIcon="Find" Name="search" QuerySubmitted="AutoSuggestBox_QuerySubmitted"/>
|
||||||
</Pivot.RightHeader>
|
</Pivot.RightHeader>
|
||||||
</Pivot>
|
</Pivot>
|
||||||
|
|
||||||
<CommandBar Grid.Row="1" VerticalAlignment="Bottom" Name="commandBar">
|
<CommandBar Grid.Row="1" VerticalAlignment="Bottom" Name="commandBar">
|
||||||
<AppBarButton Icon="Globe" Label="Open in browser" Name="inBrowser" Click="inBrowser_Click"/>
|
<AppBarButton x:Uid="/Channel/openWeb" Icon="Globe" Label="Open in browser" Name="inBrowser" Click="inBrowser_Click"/>
|
||||||
<AppBarButton Icon="Refresh" Label="Refresh" Name="refresh" Click="refresh_Click"/>
|
<AppBarButton x:Uid="/Channel/refresh" Icon="Refresh" Label="Refresh" Name="refresh" Click="refresh_Click"/>
|
||||||
<AppBarButton Icon="Share" Label="Share" Name="share" Click="share_Click"/>
|
<AppBarButton x:Uid="/Channel/share" Icon="Share" Label="Share" Name="share" Click="share_Click"/>
|
||||||
</CommandBar>
|
</CommandBar>
|
||||||
|
|
||||||
<local:LoadingPage Grid.RowSpan="2" Visibility="Collapsed"/>
|
<local:LoadingPage Grid.RowSpan="2" Visibility="Collapsed"/>
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ using FoxTube.Controls;
|
|||||||
using Windows.ApplicationModel.DataTransfer;
|
using Windows.ApplicationModel.DataTransfer;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
using Windows.UI;
|
using Windows.UI;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
|
|
||||||
namespace FoxTube.Pages
|
namespace FoxTube.Pages
|
||||||
{
|
{
|
||||||
@@ -20,6 +21,8 @@ namespace FoxTube.Pages
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class ChannelPage : Page
|
public sealed partial class ChannelPage : Page
|
||||||
{
|
{
|
||||||
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("Cards");
|
||||||
|
|
||||||
public string channelId;
|
public string channelId;
|
||||||
public Channel item;
|
public Channel item;
|
||||||
|
|
||||||
@@ -78,8 +81,8 @@ namespace FoxTube.Pages
|
|||||||
item = (await request.ExecuteAsync()).Items[0];
|
item = (await request.ExecuteAsync()).Items[0];
|
||||||
|
|
||||||
title.Text = item.Snippet.Title;
|
title.Text = item.Snippet.Title;
|
||||||
subscribers.Text = $"{item.Statistics.SubscriberCount:0,0} subscribers";
|
subscribers.Text = $"{item.Statistics.SubscriberCount:0,0} {resources.GetString("/Cards/subscribers")}";
|
||||||
videosCount.Text = $"{item.Statistics.VideoCount:0,0} videos";
|
videosCount.Text = $"{item.Statistics.VideoCount:0,0} {resources.GetString("/Cards/videos")}";
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -121,7 +124,7 @@ namespace FoxTube.Pages
|
|||||||
{
|
{
|
||||||
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
||||||
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
||||||
subscribe.Content = "Subscribed";
|
subscribe.Content = resources.GetString("/Cards/unsubscribe");
|
||||||
}
|
}
|
||||||
subscriptionPane.Visibility = Visibility.Visible;
|
subscriptionPane.Visibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
@@ -228,13 +231,13 @@ namespace FoxTube.Pages
|
|||||||
{
|
{
|
||||||
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
||||||
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
||||||
subscribe.Content = "Subscribed";
|
subscribe.Content = resources.GetString("/Cards/unsubscribe");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
subscribe.Background = new SolidColorBrush(Colors.Red);
|
subscribe.Background = new SolidColorBrush(Colors.Red);
|
||||||
subscribe.Foreground = new SolidColorBrush(Colors.White);
|
subscribe.Foreground = new SolidColorBrush(Colors.White);
|
||||||
subscribe.Content = "Subscribe";
|
subscribe.Content = resources.GetString("/Cards/subscribe/Content");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,7 +289,7 @@ namespace FoxTube.Pages
|
|||||||
item.Snippet.Thumbnails.Medium.Url,
|
item.Snippet.Thumbnails.Medium.Url,
|
||||||
item.Snippet.Title,
|
item.Snippet.Title,
|
||||||
string.IsNullOrWhiteSpace(item.Snippet.CustomUrl) ? $"https://www.youtube.com/channel/{item.Id}" : $"https://www.youtube.com/user/{item.Snippet.CustomUrl}",
|
string.IsNullOrWhiteSpace(item.Snippet.CustomUrl) ? $"https://www.youtube.com/channel/{item.Id}" : $"https://www.youtube.com/user/{item.Snippet.CustomUrl}",
|
||||||
"channel");
|
resources.GetString("/Cards/channelShare"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<TextBlock Name="counter" Grid.Row="1" Text="[Comments count] Comments" Margin="5,0,0,0" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
<TextBlock Name="counter" Grid.Row="1" Text="[Comments count] Comments" Margin="5,0,0,0" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
||||||
<StackPanel Padding="0" Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,0,10,0">
|
<StackPanel Padding="0" Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,0,10,0">
|
||||||
<TextBlock x:Uid="/CommentsPage/sortBy" Text="Sort by: " VerticalAlignment="Center" Margin="0,0,5,0"/>
|
<TextBlock x:Uid="/CommentsPage/sortBy" Text="Sort by: " VerticalAlignment="Center" Margin="0,0,5,0"/>
|
||||||
<Button Name="orderBtn" Background="Transparent" Content="Relevance" Foreground="Red" Padding="0" VerticalAlignment="Center">
|
<Button Name="orderBtn" Background="Transparent" Content="Relevance" Foreground="Red" Padding="0" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,3">
|
||||||
|
|
||||||
<Button.Flyout>
|
<Button.Flyout>
|
||||||
<MenuFlyout>
|
<MenuFlyout>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
<ScrollViewer Grid.Row="1" Name="scroll">
|
<ScrollViewer Grid.Row="1" Name="scroll">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<StackPanel Name="placeholder"/>
|
<StackPanel Name="placeholder"/>
|
||||||
<HyperlinkButton Visibility="Collapsed" Name="more" Click="more_Click" HorizontalAlignment="Center" Foreground="Red" Content="Show more"/>
|
<HyperlinkButton x:Uid="/CommentsPage/more" Visibility="Collapsed" Name="more" Click="more_Click" HorizontalAlignment="Center" Foreground="Red" Content="Show more"/>
|
||||||
<ProgressBar Name="moreLoading" Visibility="Collapsed" IsIndeterminate="True" Foreground="Red"/>
|
<ProgressBar Name="moreLoading" Visibility="Collapsed" IsIndeterminate="True" Foreground="Red"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using Google.Apis.YouTube.v3;
|
|||||||
using Google.Apis.YouTube.v3.Data;
|
using Google.Apis.YouTube.v3.Data;
|
||||||
using FoxTube.Controls;
|
using FoxTube.Controls;
|
||||||
using Windows.UI.Popups;
|
using Windows.UI.Popups;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
|
|
||||||
namespace FoxTube.Pages
|
namespace FoxTube.Pages
|
||||||
{
|
{
|
||||||
@@ -13,6 +14,8 @@ namespace FoxTube.Pages
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class CommentsPage : Page
|
public sealed partial class CommentsPage : Page
|
||||||
{
|
{
|
||||||
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("CommentsPage");
|
||||||
|
|
||||||
string threadId;
|
string threadId;
|
||||||
string nextPageToken;
|
string nextPageToken;
|
||||||
|
|
||||||
@@ -33,7 +36,8 @@ namespace FoxTube.Pages
|
|||||||
else
|
else
|
||||||
grid.RowDefinitions[0].Height = GridLength.Auto;
|
grid.RowDefinitions[0].Height = GridLength.Auto;
|
||||||
|
|
||||||
counter.Text = string.Format("{0:0,0} Comments", video.Statistics.CommentCount);
|
counter.Text = $"{video.Statistics.CommentCount:0,0} {resources.GetString("/CommentsPage/comments")}";
|
||||||
|
orderBtn.Content = resources.GetString("/CommentsPage/relevance/Text");
|
||||||
|
|
||||||
var request = SecretsVault.Service.CommentThreads.List("snippet,replies");
|
var request = SecretsVault.Service.CommentThreads.List("snippet,replies");
|
||||||
request.Order = order;
|
request.Order = order;
|
||||||
@@ -87,7 +91,7 @@ namespace FoxTube.Pages
|
|||||||
moreLoading.Visibility = Visibility.Visible;
|
moreLoading.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
order = CommentThreadsResource.ListRequest.OrderEnum.Relevance;
|
order = CommentThreadsResource.ListRequest.OrderEnum.Relevance;
|
||||||
orderBtn.Content = "Relevance";
|
orderBtn.Content = resources.GetString("/CommentsPage/relevance/Text");
|
||||||
|
|
||||||
placeholder.Children.Clear();
|
placeholder.Children.Clear();
|
||||||
|
|
||||||
@@ -114,7 +118,7 @@ namespace FoxTube.Pages
|
|||||||
moreLoading.Visibility = Visibility.Visible;
|
moreLoading.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
order = CommentThreadsResource.ListRequest.OrderEnum.Time;
|
order = CommentThreadsResource.ListRequest.OrderEnum.Time;
|
||||||
orderBtn.Content = "Publish date";
|
orderBtn.Content = resources.GetString("/CommentsPage/publish");
|
||||||
|
|
||||||
placeholder.Children.Clear();
|
placeholder.Children.Clear();
|
||||||
|
|
||||||
|
|||||||
@@ -21,17 +21,17 @@
|
|||||||
<ColumnDefinition Width="auto"/>
|
<ColumnDefinition Width="auto"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<TextBlock Name="path" IsTextSelectionEnabled="True" TextWrapping="WrapWholeWords"/>
|
<TextBlock Name="path" IsTextSelectionEnabled="True" TextWrapping="WrapWholeWords"/>
|
||||||
<Button Grid.Column="1" Content="Open folder" Name="open" Click="Open_Click" VerticalAlignment="Center"/>
|
<Button Grid.Column="1" x:Uid="/Downloads/openFolder" Content="Open folder" Name="open" Click="Open_Click" VerticalAlignment="Center"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<ScrollViewer Grid.Row="1">
|
<ScrollViewer Grid.Row="1">
|
||||||
<StackPanel Name="stack"/>
|
<StackPanel Name="stack"/>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Name="empty" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="28" Text="You haven't downloaded anything yet" Margin="10" TextWrapping="WrapWholeWords" Foreground="Gray" FontWeight="SemiBold"/>
|
<TextBlock x:Uid="/Downloads/noItems" Grid.Row="1" Name="empty" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="28" Text="You haven't downloaded anything yet" Margin="10" TextWrapping="WrapWholeWords" Foreground="Gray" FontWeight="SemiBold"/>
|
||||||
|
|
||||||
<CommandBar DefaultLabelPosition="Right" Grid.Row="2">
|
<CommandBar DefaultLabelPosition="Right" Grid.Row="2">
|
||||||
<AppBarButton Label="Refresh" Icon="Refresh" Click="Refresh"/>
|
<AppBarButton x:Uid="/Downloads/refresh" Label="Refresh" Icon="Refresh" Click="Refresh"/>
|
||||||
</CommandBar>
|
</CommandBar>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Page>
|
</Page>
|
||||||
|
|||||||
@@ -16,12 +16,12 @@
|
|||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<Pivot Name="pivot" SelectionChanged="pivot_SelectionChanged">
|
<Pivot Name="pivot" SelectionChanged="pivot_SelectionChanged">
|
||||||
<PivotItem Header="Recommended" Name="recommended">
|
<PivotItem x:Uid="/Home/recommended" Header="Recommended" Name="recommended">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel/>
|
<StackPanel/>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</PivotItem>
|
</PivotItem>
|
||||||
<PivotItem Header="Trending" Name="trending">
|
<PivotItem x:Uid="/Home/trending" Header="Trending" Name="trending">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<pages:VideoGrid/>
|
<pages:VideoGrid/>
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</PivotItem>
|
</PivotItem>
|
||||||
<PivotItem Header="Subscriptions" Name="subscriptions">
|
<PivotItem x:Uid="/Home/subs" Header="Subscriptions" Name="subscriptions">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel/>
|
<StackPanel/>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
</Pivot>
|
</Pivot>
|
||||||
|
|
||||||
<CommandBar Grid.Row="1">
|
<CommandBar Grid.Row="1">
|
||||||
<AppBarButton Icon="Refresh" Label="Refresh page" Name="refresh" Click="refreshPage"/>
|
<AppBarButton x:Uid="/Home/refresh" Icon="Refresh" Label="Refresh page" Name="refresh" Click="refreshPage"/>
|
||||||
</CommandBar>
|
</CommandBar>
|
||||||
<local:LoadingPage Grid.RowSpan="2" Margin="0,50,0,0" Visibility="Visible" RefreshPage="refreshPage"/>
|
<local:LoadingPage Grid.RowSpan="2" Margin="0,50,0,0" Visibility="Visible" RefreshPage="refreshPage"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
x:Class="FoxTube.LoadingPage"
|
x:Class="FoxTube.LoadingPage"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="using:FoxTube"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
@@ -12,25 +11,25 @@
|
|||||||
|
|
||||||
<StackPanel Name="wifiTrouble" Visibility="Collapsed" VerticalAlignment="Center">
|
<StackPanel Name="wifiTrouble" Visibility="Collapsed" VerticalAlignment="Center">
|
||||||
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph="" FontSize="100" HorizontalAlignment="Center"/>
|
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph="" FontSize="100" HorizontalAlignment="Center"/>
|
||||||
<TextBlock Text="Check your internet connection" FontSize="48" HorizontalAlignment="Center"/>
|
<TextBlock x:Uid="/LoadingPage/checkConnection" Text="Check your internet connection" FontSize="48" HorizontalAlignment="Center"/>
|
||||||
<TextBlock Text="Please, make sure you are connected to the internet and try again." HorizontalAlignment="Center"/>
|
<TextBlock x:Uid="/LoadingPage/wifiDesc" Text="Please, make sure you are connected to the internet and try again." HorizontalAlignment="Center"/>
|
||||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
||||||
<Button Content="Open network settings" Margin="5" Name="openWifi" Click="openWifi_Click"/>
|
<Button x:Uid="/LoadingPage/openWifi" Content="Open network settings" Margin="5" Name="openWifi" Click="openWifi_Click"/>
|
||||||
<Button Content="Open troubleshooter" Background="Red" Foreground="White" Margin="5" Name="openTroubleshoot" Click="openTroubleshoot_Click"/>
|
<Button x:Uid="/LoadingPage/openTroubleshooter" Content="Open troubleshooter" Background="Red" Foreground="White" Margin="5" Name="openTroubleshoot" Click="openTroubleshoot_Click"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Text="OR" FontSize="20" HorizontalAlignment="Center"/>
|
<TextBlock x:Uid="/LoadingPage/or" Text="OR" FontSize="20" HorizontalAlignment="Center"/>
|
||||||
<Button Name="wifiRefresh" Click="wifiRefresh_Click" Content="Refresh page" HorizontalAlignment="Center" Background="Red" Foreground="White" Margin="5"/>
|
<Button x:Uid="/LoadingPage/refresh" Name="wifiRefresh" Click="wifiRefresh_Click" Content="Refresh page" HorizontalAlignment="Center" Background="Red" Foreground="White" Margin="5"/>
|
||||||
<TextBlock Name="wifiException" Foreground="Gray" Text="Exception:" HorizontalAlignment="Center" IsTextSelectionEnabled="True"/>
|
<TextBlock Name="wifiException" Foreground="Gray" Text="Exception:" HorizontalAlignment="Center" IsTextSelectionEnabled="True"/>
|
||||||
<TextBlock Name="wifiMessage" Foreground="Gray" Text="Message:" HorizontalAlignment="Center" IsTextSelectionEnabled="True"/>
|
<TextBlock Name="wifiMessage" Foreground="Gray" Text="Message:" HorizontalAlignment="Center" IsTextSelectionEnabled="True"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Name="trouble" Visibility="Collapsed" VerticalAlignment="Center">
|
<StackPanel Name="trouble" Visibility="Collapsed" VerticalAlignment="Center">
|
||||||
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph="" FontSize="100" HorizontalAlignment="Center"/>
|
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph="" FontSize="100" HorizontalAlignment="Center"/>
|
||||||
<TextBlock Text="We are unable to display the page" FontSize="48" HorizontalAlignment="Center"/>
|
<TextBlock x:Uid="/LoadingPage/err" Text="We are unable to display the page" FontSize="48" HorizontalAlignment="Center"/>
|
||||||
<TextBlock Text="It could be caused by YouTube internal server error or by application's bug. Please, try again later" HorizontalAlignment="Center"/>
|
<TextBlock x:Uid="/LoadingPage/errDescription" Text="It could be caused by YouTube internal server error or by application's bug. Please, try again later" HorizontalAlignment="Center"/>
|
||||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
||||||
<Button Name="refresh" Click="wifiRefresh_Click" Content="Refresh page" Margin="5"/>
|
<Button x:Uid="/LoadingPage/refresh" Name="refresh" Click="wifiRefresh_Click" Content="Refresh page" Margin="5"/>
|
||||||
<Button Content="Leave feedback" Background="Red" Foreground="White" Margin="5" Name="feedback" Click="feedback_Click"/>
|
<Button x:Uid="/LoadingPage/feedback" Content="Leave feedback" Background="Red" Foreground="White" Margin="5" Name="feedback" Click="feedback_Click"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Name="exception" Foreground="Gray" Text="Exception:" HorizontalAlignment="Center" IsTextSelectionEnabled="True"/>
|
<TextBlock Name="exception" Foreground="Gray" Text="Exception:" HorizontalAlignment="Center" IsTextSelectionEnabled="True"/>
|
||||||
<TextBlock Name="message" Foreground="Gray" Text="Message:" HorizontalAlignment="Center" IsTextSelectionEnabled="True"/>
|
<TextBlock Name="message" Foreground="Gray" Text="Message:" HorizontalAlignment="Center" IsTextSelectionEnabled="True"/>
|
||||||
|
|||||||
@@ -1,35 +1,25 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using Windows.ApplicationModel.Resources;
|
||||||
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;
|
||||||
using Windows.UI.Xaml.Controls;
|
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.Navigation;
|
|
||||||
|
|
||||||
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
|
|
||||||
|
|
||||||
namespace FoxTube
|
namespace FoxTube
|
||||||
{
|
{
|
||||||
public enum LoadingState { Loadnig, Loaded, Error, Blocked }
|
public enum LoadingState { Loadnig, Loaded, Error, Blocked }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An empty page that can be used on its own or navigated to within a Frame.
|
/// Loading sreen. Represents loading ring or error
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class LoadingPage : Page
|
public sealed partial class LoadingPage : Page
|
||||||
{
|
{
|
||||||
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("LoadingPage");
|
||||||
|
|
||||||
public event RoutedEventHandler RefreshPage;
|
public event RoutedEventHandler RefreshPage;
|
||||||
public LoadingState State { get; private set; } = LoadingState.Loadnig;
|
public LoadingState State { get; private set; } = LoadingState.Loadnig;
|
||||||
|
|
||||||
public LoadingPage()
|
public LoadingPage()
|
||||||
{
|
{
|
||||||
this.InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Error(string exceptionId = "Unknown", string details = "N/A", bool isWifiTrouble = false)
|
public void Error(string exceptionId = "Unknown", string details = "N/A", bool isWifiTrouble = false)
|
||||||
@@ -41,15 +31,15 @@ namespace FoxTube
|
|||||||
|
|
||||||
if (isWifiTrouble)
|
if (isWifiTrouble)
|
||||||
{
|
{
|
||||||
wifiException.Text = $"ID: {exceptionId}";
|
wifiException.Text = $"{resources.GetString("/LoadingPage/ex")}: {exceptionId}";
|
||||||
wifiMessage.Text = $"Details: {details}";
|
wifiMessage.Text = $"{resources.GetString("/LoadingPage/details")}: {details}";
|
||||||
|
|
||||||
wifiTrouble.Visibility = Visibility.Visible;
|
wifiTrouble.Visibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
exception.Text = $"ID: {exceptionId}";
|
exception.Text = $"{resources.GetString("/LoadingPage/ex")}: {exceptionId}";
|
||||||
message.Text = $"Details: {details}";
|
message.Text = $"{resources.GetString("/LoadingPage/details")}: {details}";
|
||||||
|
|
||||||
trouble.Visibility = Visibility.Visible;
|
trouble.Visibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,9 @@ using System.Net;
|
|||||||
using Windows.UI.Popups;
|
using Windows.UI.Popups;
|
||||||
using Windows.Networking.Connectivity;
|
using Windows.Networking.Connectivity;
|
||||||
using Windows.UI.Core;
|
using Windows.UI.Core;
|
||||||
using System.Threading;
|
using Windows.ApplicationModel.Resources;
|
||||||
using System.Threading.Tasks;
|
using Windows.Storage;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace FoxTube
|
namespace FoxTube
|
||||||
{
|
{
|
||||||
@@ -34,18 +35,35 @@ namespace FoxTube
|
|||||||
public sealed partial class MainPage : Page
|
public sealed partial class MainPage : Page
|
||||||
{
|
{
|
||||||
Sender s = Sender.None;
|
Sender s = Sender.None;
|
||||||
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("Main");
|
||||||
public MainPage()
|
public MainPage()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
//Comparing current version with last recorded version. If doesn't match, poping up changelog notification
|
CheckVersion();
|
||||||
|
|
||||||
|
SecretsVault.AuthorizationStateChanged += AuthorizationStateChanged;
|
||||||
|
SecretsVault.SubscriptionsChanged += SecretsVault_SubscriptionsChanged;
|
||||||
|
SecretsVault.NotPurchased += () => removeAds.Visibility = Visibility.Visible;
|
||||||
|
SecretsVault.CheckAuthorization();
|
||||||
|
SecretsVault.CheckAddons();
|
||||||
|
|
||||||
|
SetTitleBar();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Comparing current version with last recorded version. If doesn't match, poping up changelog notification
|
||||||
|
/// </summary>
|
||||||
|
public async void CheckVersion()
|
||||||
|
{
|
||||||
PackageVersion ver = Package.Current.Id.Version;
|
PackageVersion ver = Package.Current.Id.Version;
|
||||||
if(SettingsStorage.Version != $"{ver.Major}.{ver.Minor}")
|
if (SettingsStorage.Version != $"{ver.Major}.{ver.Minor}")
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
XmlDocument changelog = new XmlDocument();
|
XmlDocument changelog = new XmlDocument();
|
||||||
changelog.Load("http://foxgame-studio.000webhostapp.com/foxtube-changelog.xml");
|
StorageFile file = await (await Package.Current.InstalledLocation.GetFolderAsync(@"Assets\Data")).GetFileAsync("Patchnotes.xml");
|
||||||
|
changelog.Load(await file.OpenStreamForReadAsync());
|
||||||
XmlElement e = changelog["items"].ChildNodes[0] as XmlElement;
|
XmlElement e = changelog["items"].ChildNodes[0] as XmlElement;
|
||||||
|
|
||||||
ToastNotificationManager.CreateToastNotifier().Show(FoxTube.Background.Notification.GetChangelogToast(e.GetAttribute("version")));
|
ToastNotificationManager.CreateToastNotifier().Show(FoxTube.Background.Notification.GetChangelogToast(e.GetAttribute("version")));
|
||||||
@@ -57,14 +75,6 @@ namespace FoxTube
|
|||||||
Debug.WriteLine("Unable to retrieve changelog");
|
Debug.WriteLine("Unable to retrieve changelog");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SecretsVault.AuthorizationStateChanged += AuthorizationStateChanged;
|
|
||||||
SecretsVault.SubscriptionsChanged += SecretsVault_SubscriptionsChanged;
|
|
||||||
SecretsVault.NotPurchased += () => removeAds.Visibility = Visibility.Visible;
|
|
||||||
SecretsVault.CheckAuthorization();
|
|
||||||
SecretsVault.CheckAddons();
|
|
||||||
|
|
||||||
SetTitleBar();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Video GetCurrentItem()
|
public Video GetCurrentItem()
|
||||||
@@ -223,13 +233,13 @@ namespace FoxTube
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MessageDialog dialog = new MessageDialog("We were unabled to retrieve your account information due to weak internet connection or Google servers' problems. PLease, try again later", "Failed to connect");
|
MessageDialog dialog = new MessageDialog(resources.GetString("/Main/connectErrContent"), resources.GetString("/Main/connectErrHeader"));
|
||||||
|
|
||||||
dialog.Commands.Add(new UICommand("Try again", (command) =>
|
dialog.Commands.Add(new UICommand(resources.GetString("/Main/tryAgain"), (command) =>
|
||||||
{
|
{
|
||||||
SecretsVault.Authorize();
|
SecretsVault.Authorize();
|
||||||
}));
|
}));
|
||||||
dialog.Commands.Add(new UICommand("Quit", (command) =>
|
dialog.Commands.Add(new UICommand(resources.GetString("/Main/quit"), (command) =>
|
||||||
{
|
{
|
||||||
Methods.CloseApp();
|
Methods.CloseApp();
|
||||||
}));
|
}));
|
||||||
@@ -298,15 +308,15 @@ namespace FoxTube
|
|||||||
var connection = NetworkInformation.GetInternetConnectionProfile().GetConnectionCost();
|
var connection = NetworkInformation.GetInternetConnectionProfile().GetConnectionCost();
|
||||||
if (SettingsStorage.CheckConnection && (connection.NetworkCostType == NetworkCostType.Fixed || connection.NetworkCostType == NetworkCostType.Variable))
|
if (SettingsStorage.CheckConnection && (connection.NetworkCostType == NetworkCostType.Fixed || connection.NetworkCostType == NetworkCostType.Variable))
|
||||||
{
|
{
|
||||||
MessageDialog dialog = new MessageDialog("You are on metered connection now. Additional charges may apply. Do you want to continue?")
|
MessageDialog dialog = new MessageDialog(resources.GetString("/Main/metered"))
|
||||||
{
|
{
|
||||||
DefaultCommandIndex = 2,
|
DefaultCommandIndex = 2,
|
||||||
CancelCommandIndex = 1
|
CancelCommandIndex = 1
|
||||||
};
|
};
|
||||||
dialog.Commands.Add(new UICommand("Yes"));
|
dialog.Commands.Add(new UICommand(resources.GetString("/Main/yes")));
|
||||||
dialog.Commands.Add(new UICommand("No", (command) => cancel = true));
|
dialog.Commands.Add(new UICommand(resources.GetString("/Main/no"), (command) => cancel = true));
|
||||||
if(SecretsVault.IsAuthorized)
|
if(SecretsVault.IsAuthorized)
|
||||||
dialog.Commands.Add(new UICommand("Add to 'Watch later' playlist", (command) =>
|
dialog.Commands.Add(new UICommand(resources.GetString("/Main/addLater"), (command) =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -339,6 +349,9 @@ namespace FoxTube
|
|||||||
if (cancel)
|
if (cancel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (videoPlaceholder.Content != null)
|
||||||
|
(videoPlaceholder.Content as VideoPage).player.close_Click(this, null);
|
||||||
|
|
||||||
videoPlaceholder.Content = null;
|
videoPlaceholder.Content = null;
|
||||||
Fullscreen(false);
|
Fullscreen(false);
|
||||||
|
|
||||||
@@ -396,14 +409,14 @@ namespace FoxTube
|
|||||||
|
|
||||||
Dictionary<Type, Action> switchCase = new Dictionary<Type, Action>()
|
Dictionary<Type, Action> switchCase = new Dictionary<Type, Action>()
|
||||||
{
|
{
|
||||||
{ typeof(Settings), () => nav.Header = "Settings" },
|
{ typeof(Settings), () => nav.Header = resources.GetString("/Main/settings/Content") },
|
||||||
{ typeof(ChannelPage), () => nav.Header = "Channel" },
|
{ typeof(ChannelPage), () => nav.Header = resources.GetString("/Main/channel") },
|
||||||
{ typeof(PlaylistPage), () => nav.Header = "Playlist" },
|
{ typeof(PlaylistPage), () => nav.Header = resources.GetString("/Main/playlist") },
|
||||||
{ typeof(Search), () => nav.Header = "Search" },
|
{ typeof(Search), () => nav.Header = resources.GetString("/Main/searchPlaceholder/PlaceholderText") },
|
||||||
{ typeof(Subscriptions), () => nav.Header = "Subscriptions" },
|
{ typeof(Subscriptions), () => nav.Header = resources.GetString("/Main/subscriptions/Content") },
|
||||||
{ typeof(History), () => nav.Header = "History" },
|
{ typeof(History), () => nav.Header = resources.GetString("/Main/history/Content") },
|
||||||
{ typeof(Home), () => nav.Header = "Home" },
|
{ typeof(Home), () => nav.Header = resources.GetString("/Main/home/Content") },
|
||||||
{ typeof(Downloads), () => nav.Header = "Downloads" }
|
{ typeof(Downloads), () => nav.Header = resources.GetString("/Main/downloads/Content") }
|
||||||
};
|
};
|
||||||
|
|
||||||
if (content.SourcePageType == typeof(Home) || content.SourcePageType == typeof(Settings) || content.SourcePageType == typeof(Subscriptions))
|
if (content.SourcePageType == typeof(Home) || content.SourcePageType == typeof(Settings) || content.SourcePageType == typeof(Subscriptions))
|
||||||
@@ -431,7 +444,7 @@ namespace FoxTube
|
|||||||
|
|
||||||
if (videoPlaceholder.Content != null)
|
if (videoPlaceholder.Content != null)
|
||||||
{
|
{
|
||||||
nav.Header = "Video";
|
nav.Header = resources.GetString("/Main/video");
|
||||||
nav.ExpandedModeThresholdWidth = short.MaxValue;
|
nav.ExpandedModeThresholdWidth = short.MaxValue;
|
||||||
nav.IsPaneOpen = false;
|
nav.IsPaneOpen = false;
|
||||||
}
|
}
|
||||||
@@ -454,7 +467,10 @@ namespace FoxTube
|
|||||||
nav.ExpandedModeThresholdWidth = 1008;
|
nav.ExpandedModeThresholdWidth = 1008;
|
||||||
nav.Margin = new Thickness(0);
|
nav.Margin = new Thickness(0);
|
||||||
if (videoPlaceholder.Content != null && nav.IsPaneOpen)
|
if (videoPlaceholder.Content != null && nav.IsPaneOpen)
|
||||||
|
{
|
||||||
|
nav.IsPaneOpen = true;
|
||||||
nav.IsPaneOpen = false;
|
nav.IsPaneOpen = false;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nav.OpenPaneLength = 300;
|
nav.OpenPaneLength = 300;
|
||||||
@@ -471,7 +487,6 @@ namespace FoxTube
|
|||||||
ApplicationView.GetForCurrentView().ExitFullScreenMode();
|
ApplicationView.GetForCurrentView().ExitFullScreenMode();
|
||||||
Fullscreen(false);
|
Fullscreen(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();
|
MaximizeVideo();
|
||||||
@@ -551,14 +566,14 @@ namespace FoxTube
|
|||||||
{
|
{
|
||||||
Dictionary<Type, Action> switchCase = new Dictionary<Type, Action>()
|
Dictionary<Type, Action> switchCase = new Dictionary<Type, Action>()
|
||||||
{
|
{
|
||||||
{ typeof(Settings), () => nav.Header = "Settings" },
|
{ typeof(Settings), () => nav.Header = resources.GetString("/Main/settings/Content") },
|
||||||
{ typeof(ChannelPage), () => nav.Header = "Channel" },
|
{ typeof(ChannelPage), () => nav.Header = resources.GetString("/Main/channel") },
|
||||||
{ typeof(PlaylistPage), () => nav.Header = "Playlist" },
|
{ typeof(PlaylistPage), () => nav.Header = resources.GetString("/Main/playlist") },
|
||||||
{ typeof(Search), () => nav.Header = "Search" },
|
{ typeof(Search), () => nav.Header = resources.GetString("/Main/searchPlaceholder/PlaceholderText") },
|
||||||
{ typeof(Subscriptions), () => nav.Header = "Subscriptions" },
|
{ typeof(Subscriptions), () => nav.Header = resources.GetString("/Main/subscriptions/Content") },
|
||||||
{ typeof(History), () => nav.Header = "History" },
|
{ typeof(History), () => nav.Header = resources.GetString("/Main/history/Content") },
|
||||||
{ typeof(Home), () => nav.Header = "Home" },
|
{ typeof(Home), () => nav.Header = resources.GetString("/Main/home/Content") },
|
||||||
{ typeof(Downloads), () => nav.Header = "Downloads" }
|
{ typeof(Downloads), () => nav.Header = resources.GetString("/Main/downloads/Content") }
|
||||||
};
|
};
|
||||||
|
|
||||||
try { switchCase[e.SourcePageType](); }
|
try { switchCase[e.SourcePageType](); }
|
||||||
|
|||||||
@@ -63,16 +63,16 @@
|
|||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
||||||
<CommandBar Grid.Row="2" Grid.ColumnSpan="2">
|
<CommandBar Grid.Row="2" Grid.ColumnSpan="2">
|
||||||
<AppBarButton Icon="Globe" Label="Open in browser" Name="inBrowser" Click="inBrowser_Click"/>
|
<AppBarButton x:Uid="/Playlist/openWeb" Icon="Globe" Label="Open in browser" Name="inBrowser" Click="inBrowser_Click"/>
|
||||||
<AppBarButton Icon="Add" Label="Add to" IsEnabled="False">
|
<AppBarButton x:Uid="/Playlist/addTo" Icon="Add" Label="Add to" IsEnabled="False">
|
||||||
<AppBarButton.Flyout>
|
<AppBarButton.Flyout>
|
||||||
<MenuFlyout>
|
<MenuFlyout>
|
||||||
|
|
||||||
</MenuFlyout>
|
</MenuFlyout>
|
||||||
</AppBarButton.Flyout>
|
</AppBarButton.Flyout>
|
||||||
</AppBarButton>
|
</AppBarButton>
|
||||||
<AppBarButton Icon="Refresh" Label="Refresh" Name="refresh" Click="refresh_Click"/>
|
<AppBarButton x:Uid="/Playlist/refresh" Icon="Refresh" Label="Refresh" Name="refresh" Click="refresh_Click"/>
|
||||||
<AppBarButton Icon="Share" Label="Share" Name="share" Click="share_Click"/>
|
<AppBarButton x:Uid="/Playlist/share" Icon="Share" Label="Share" Name="share" Click="share_Click"/>
|
||||||
</CommandBar>
|
</CommandBar>
|
||||||
|
|
||||||
<foxtube:LoadingPage Grid.RowSpan="2" Visibility="Collapsed"/>
|
<foxtube:LoadingPage Grid.RowSpan="2" Visibility="Collapsed"/>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using Google.Apis.YouTube.v3;
|
|||||||
using Google.Apis.YouTube.v3.Data;
|
using Google.Apis.YouTube.v3.Data;
|
||||||
using System;
|
using System;
|
||||||
using Windows.ApplicationModel.DataTransfer;
|
using Windows.ApplicationModel.DataTransfer;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
using Windows.Foundation;
|
using Windows.Foundation;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
@@ -57,7 +58,7 @@ namespace FoxTube.Pages
|
|||||||
item = (await request.ExecuteAsync()).Items[0];
|
item = (await request.ExecuteAsync()).Items[0];
|
||||||
|
|
||||||
title.Text = item.Snippet.Title;
|
title.Text = item.Snippet.Title;
|
||||||
info.Text = $"{item.ContentDetails.ItemCount} videos";
|
info.Text = $"{item.ContentDetails.ItemCount} {ResourceLoader.GetForCurrentView("Playlist").GetString("/Playlist/videos")}";
|
||||||
description.Text = item.Snippet.Description;
|
description.Text = item.Snippet.Description;
|
||||||
|
|
||||||
channelName.Text = item.Snippet.ChannelTitle;
|
channelName.Text = item.Snippet.ChannelTitle;
|
||||||
@@ -129,7 +130,7 @@ namespace FoxTube.Pages
|
|||||||
item.Snippet.Thumbnails.Medium.Url,
|
item.Snippet.Thumbnails.Medium.Url,
|
||||||
item.Snippet.Title,
|
item.Snippet.Title,
|
||||||
$"https://www.youtube.com/playlist?list={item.Id}",
|
$"https://www.youtube.com/playlist?list={item.Id}",
|
||||||
"playlist");
|
ResourceLoader.GetForCurrentView("Cards").GetString("/Cards/playlistShare"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-30
@@ -19,52 +19,52 @@
|
|||||||
<TextBlock Name="searchTerm" Text="Search results for: [searchTerm]" FontSize="28"/>
|
<TextBlock Name="searchTerm" Text="Search results for: [searchTerm]" FontSize="28"/>
|
||||||
<TextBlock Name="resultsCount" Text="Found: [resultCount] item(s)" FontSize="14" Foreground="Gray"/>
|
<TextBlock Name="resultsCount" Text="Found: [resultCount] item(s)" FontSize="14" Foreground="Gray"/>
|
||||||
|
|
||||||
<HyperlinkButton Name="toggleFilters" Click="toggleFilters_Click" Content="Show filters " FontFamily="Default, Segoe MDL2 Assets" Visibility="Visible"/>
|
<HyperlinkButton x:Uid="/Search/filters" Name="toggleFilters" Click="toggleFilters_Click" Content="Show filters " FontFamily="Default, Segoe MDL2 Assets" Visibility="Visible"/>
|
||||||
<StackPanel Name="filters" Visibility="Collapsed">
|
<StackPanel Name="filters" Visibility="Collapsed">
|
||||||
<GridView Padding="5" SelectionMode="None">
|
<GridView Padding="5" SelectionMode="None">
|
||||||
<ComboBox Name="order" Header="Sort by" Width="150" SelectedIndex="0">
|
<ComboBox x:Uid="/Search/order" Name="order" Header="Sort by" Width="150" SelectedIndex="0">
|
||||||
<ComboBoxItem Content="Relevance"/>
|
<ComboBoxItem x:Uid="/Search/relevance" Content="Relevance"/>
|
||||||
<ComboBoxItem Content="Upload date"/>
|
<ComboBoxItem x:Uid="/Search/update" Content="Upload date"/>
|
||||||
<ComboBoxItem Content="View count"/>
|
<ComboBoxItem x:Uid="/Search/views" Content="View count"/>
|
||||||
<ComboBoxItem Content="Rating"/>
|
<ComboBoxItem x:Uid="/Search/rating" Content="Rating"/>
|
||||||
<ComboBoxItem Content="Title"/>
|
<ComboBoxItem x:Uid="/Search/title" Content="Title"/>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
<ComboBox Name="type" Header="Type" Width="150" SelectedIndex="0" SelectionChanged="type_SelectionChanged">
|
<ComboBox x:Uid="/Search/type" Name="type" Header="Type" Width="150" SelectedIndex="0" SelectionChanged="type_SelectionChanged">
|
||||||
<ComboBoxItem Content="All"/>
|
<ComboBoxItem x:Uid="/Search/all" Content="All"/>
|
||||||
<ComboBoxItem Content="Video"/>
|
<ComboBoxItem x:Uid="/Search/video" Content="Video"/>
|
||||||
<ComboBoxItem Content="Channel"/>
|
<ComboBoxItem x:Uid="/Search/channel" Content="Channel"/>
|
||||||
<ComboBoxItem Content="Playlist"/>
|
<ComboBoxItem x:Uid="/Search/playlist" Content="Playlist"/>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
<ComboBox Name="date" Header="Upload date" Width="150" SelectedIndex="0">
|
<ComboBox x:Uid="/Search/updateHeader" Name="date" Header="Upload date" Width="150" SelectedIndex="0">
|
||||||
<ComboBoxItem Content="Anytime"/>
|
<ComboBoxItem x:Uid="/Search/anytime" Content="Anytime"/>
|
||||||
<ComboBoxItem Content="Last hour"/>
|
<ComboBoxItem x:Uid="/Search/lasthr" Content="Last hour"/>
|
||||||
<ComboBoxItem Content="Today"/>
|
<ComboBoxItem x:Uid="/Search/today" Content="Today"/>
|
||||||
<ComboBoxItem Content="This week"/>
|
<ComboBoxItem x:Uid="/Search/week" Content="This week"/>
|
||||||
<ComboBoxItem Content="This month"/>
|
<ComboBoxItem x:Uid="/Search/month" Content="This month"/>
|
||||||
<ComboBoxItem Content="This year"/>
|
<ComboBoxItem x:Uid="/Search/year" Content="This year"/>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
<ComboBox Visibility="Collapsed" Name="duration" Header="Duration" Width="150" SelectedIndex="0">
|
<ComboBox x:Uid="/Search/duration" Visibility="Collapsed" Name="duration" Header="Duration" Width="150" SelectedIndex="0">
|
||||||
<ComboBoxItem Content="Any"/>
|
<ComboBoxItem x:Uid="/Search/any" Content="Any"/>
|
||||||
<ComboBoxItem Content="Long (> 20 minutes)"/>
|
<ComboBoxItem x:Uid="/Search/long" Content="Long (> 20 minutes)"/>
|
||||||
<ComboBoxItem Content="Medium"/>
|
<ComboBoxItem x:Uid="/Search/medium" Content="Medium"/>
|
||||||
<ComboBoxItem Content="Short (< 4 minutes)"/>
|
<ComboBoxItem x:Uid="/Search/short" Content="Short (< 4 minutes)"/>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
</GridView>
|
</GridView>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<Button Visibility="Collapsed" Content="Features" Name="featBtn" Margin="10,0,0,10">
|
<Button x:Uid="/Search/features" Visibility="Collapsed" Content="Features" Name="featBtn" Margin="10,0,0,10">
|
||||||
<Button.Flyout>
|
<Button.Flyout>
|
||||||
<Flyout>
|
<Flyout>
|
||||||
<ListView Name="features" SelectionMode="Multiple" Header="Features">
|
<ListView x:Uid="/Search/featuresHeader" Name="features" SelectionMode="Multiple" Header="Features">
|
||||||
<TextBlock Text="HD"/>
|
<TextBlock Text="HD"/>
|
||||||
<TextBlock Text="3D"/>
|
<TextBlock Text="3D"/>
|
||||||
<TextBlock Text="Subtitles/CC"/>
|
<TextBlock x:Uid="/Search/subs" Text="Subtitles/CC"/>
|
||||||
<TextBlock Text="Live"/>
|
<TextBlock x:Uid="/Search/live" Text="Live"/>
|
||||||
<TextBlock Text="Creative Commons"/>
|
<TextBlock x:Uid="/Search/cc" Text="Creative Commons"/>
|
||||||
</ListView>
|
</ListView>
|
||||||
</Flyout>
|
</Flyout>
|
||||||
</Button.Flyout>
|
</Button.Flyout>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Content="Apply" Margin="10,0,0,10" Name="apply" Click="apply_Click"/>
|
<Button x:Uid="/Search/apply" Content="Apply" Margin="10,0,0,10" Name="apply" Click="apply_Click"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<pages:VideoGrid/>
|
<pages:VideoGrid/>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ using Windows.UI.Xaml;
|
|||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using Windows.UI.Xaml.Navigation;
|
using Windows.UI.Xaml.Navigation;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
using System.Globalization;
|
using Windows.ApplicationModel.Resources;
|
||||||
|
|
||||||
namespace FoxTube
|
namespace FoxTube
|
||||||
{
|
{
|
||||||
@@ -17,6 +17,8 @@ namespace FoxTube
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class Search : Page
|
public sealed partial class Search : Page
|
||||||
{
|
{
|
||||||
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("Search");
|
||||||
|
|
||||||
public SearchParameters Parameters;
|
public SearchParameters Parameters;
|
||||||
SearchResource.ListRequest request;
|
SearchResource.ListRequest request;
|
||||||
string nextToken;
|
string nextToken;
|
||||||
@@ -130,8 +132,8 @@ namespace FoxTube
|
|||||||
features.SelectedItems.Add(features.Items[4]);
|
features.SelectedItems.Add(features.Items[4]);
|
||||||
|
|
||||||
SearchListResponse response = await request.ExecuteAsync();
|
SearchListResponse response = await request.ExecuteAsync();
|
||||||
searchTerm.Text = $"Search results for: {Parameters.Term}";
|
searchTerm.Text = $"{resources.GetString("/Search/header")} '{Parameters.Term}'";
|
||||||
resultsCount.Text = $"Found: {SetResults(response.PageInfo.TotalResults)} item(s)";
|
resultsCount.Text = $"{resources.GetString("/Search/found")}: {SetResults(response.PageInfo.TotalResults)} {resources.GetString("/Search/items")}";
|
||||||
if (!string.IsNullOrWhiteSpace(response.NextPageToken))
|
if (!string.IsNullOrWhiteSpace(response.NextPageToken))
|
||||||
nextToken = response.NextPageToken;
|
nextToken = response.NextPageToken;
|
||||||
else
|
else
|
||||||
@@ -158,12 +160,12 @@ namespace FoxTube
|
|||||||
if(filters.Visibility == Visibility.Collapsed)
|
if(filters.Visibility == Visibility.Collapsed)
|
||||||
{
|
{
|
||||||
filters.Visibility = Visibility.Visible;
|
filters.Visibility = Visibility.Visible;
|
||||||
toggleFilters.Content = "Hide filters \xE014";
|
toggleFilters.Content = resources.GetString("/Search/hideFilters");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
filters.Visibility = Visibility.Collapsed;
|
filters.Visibility = Visibility.Collapsed;
|
||||||
toggleFilters.Content = "Show filters \xE015";
|
toggleFilters.Content = resources.GetString("/Search/filters/Content");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
<TextBlock x:Uid="/General/notifications" Text="Notifications" FontSize="22"/>
|
<TextBlock x:Uid="/General/notifications" Text="Notifications" FontSize="22"/>
|
||||||
<ToggleSwitch x:Uid="/General/newVideo" Name="newVideo" OnContent="Notify when someone of your subscriptions uploaded new video" OffContent="Notify when someone of your subscriptions uploaded new video" Toggled="notification_IsEnabledChanged"/>
|
<ToggleSwitch x:Uid="/General/newVideo" Name="newVideo" OnContent="Notify when someone of your subscriptions uploaded new video" OffContent="Notify when someone of your subscriptions uploaded new video" Toggled="notification_IsEnabledChanged"/>
|
||||||
<ToggleSwitch Name="devNews" OnContent="Recieve messages from developers" OffContent="Recieve messages from developers" Toggled="devNews_Toggled"/>
|
<ToggleSwitch x:Uid="/General/devNotifications" Name="devNews" OnContent="Recieve messages from developers" OffContent="Recieve messages from developers" Toggled="devNews_Toggled"/>
|
||||||
|
|
||||||
<TextBlock x:Uid="/General/color" Text="Color mode" FontSize="22"/>
|
<TextBlock x:Uid="/General/color" Text="Color mode" FontSize="22"/>
|
||||||
<RadioButton x:Uid="/General/colorLight" Content="Light" Name="light" GroupName="color" Checked="RadioButton_Checked"/>
|
<RadioButton x:Uid="/General/colorLight" Content="Light" Name="light" GroupName="color" Checked="RadioButton_Checked"/>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace FoxTube.Pages.SettingsPages
|
|||||||
language.SelectedItem = language.Items.Find(i => ((ComboBoxItem)i).Tag.ToString() == SettingsStorage.Language);
|
language.SelectedItem = language.Items.Find(i => ((ComboBoxItem)i).Tag.ToString() == SettingsStorage.Language);
|
||||||
safeSearch.SelectedIndex = SettingsStorage.SafeSearch;
|
safeSearch.SelectedIndex = SettingsStorage.SafeSearch;
|
||||||
|
|
||||||
foreach (VideoQuality i in Enum.GetValues(typeof(VideoQuality)))
|
foreach (VideoQuality i in Enum.GetValues(typeof(VideoQuality)).ToReversedList())
|
||||||
quality.Items.Add(new ComboBoxItem() { Tag = i.GetVideoQualityLabel(), Content = i.GetVideoQualityLabel() });
|
quality.Items.Add(new ComboBoxItem() { Tag = i.GetVideoQualityLabel(), Content = i.GetVideoQualityLabel() });
|
||||||
quality.SelectedItem = quality.Items.ToList().Find(i => ((ComboBoxItem)i).Tag.ToString() == SettingsStorage.VideoQuality);
|
quality.SelectedItem = quality.Items.ToList().Find(i => ((ComboBoxItem)i).Tag.ToString() == SettingsStorage.VideoQuality);
|
||||||
mobileWarning.IsOn = SettingsStorage.CheckConnection;
|
mobileWarning.IsOn = SettingsStorage.CheckConnection;
|
||||||
|
|||||||
@@ -2,44 +2,34 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.InteropServices.WindowsRuntime;
|
|
||||||
using Windows.Foundation;
|
|
||||||
using Windows.Foundation.Collections;
|
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Controls;
|
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.Navigation;
|
|
||||||
using FoxTube.Classes;
|
using FoxTube.Classes;
|
||||||
using System.Xml;
|
|
||||||
using Windows.Storage;
|
using Windows.Storage;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using Windows.UI.Popups;
|
using System.Xml;
|
||||||
|
|
||||||
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
|
|
||||||
|
|
||||||
namespace FoxTube.Pages.SettingsPages
|
namespace FoxTube.Pages.SettingsPages
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An empty page that can be used on its own or navigated to within a Frame.
|
/// Page with changelogs and dev messages
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class Inbox : Page
|
public sealed partial class Inbox : Page
|
||||||
{
|
{
|
||||||
List<InboxItem> items = new List<InboxItem>();
|
List<InboxItem> items = new List<InboxItem>();
|
||||||
public Inbox()
|
public Inbox()
|
||||||
{
|
{
|
||||||
this.InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadItems()
|
public async void LoadItems()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
XmlDocument doc = new XmlDocument();
|
XmlDocument doc = new XmlDocument();
|
||||||
|
|
||||||
doc.Load("http://foxgame-studio.000webhostapp.com/foxtube-changelog.xml");
|
StorageFile file = await (await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(@"Assets\Data")).GetFileAsync("Patchnotes.xml");
|
||||||
|
doc.Load(await file.OpenStreamForReadAsync());
|
||||||
foreach (XmlElement e in doc["items"].ChildNodes)
|
foreach (XmlElement e in doc["items"].ChildNodes)
|
||||||
items.Add(new InboxItem(
|
items.Add(new InboxItem(
|
||||||
e.GetAttribute("version"),
|
e.GetAttribute("version"),
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
<StackPanel Orientation="Vertical" Grid.Column="1" Padding="5" VerticalAlignment="Center">
|
<StackPanel Orientation="Vertical" Grid.Column="1" Padding="5" VerticalAlignment="Center">
|
||||||
<TextBlock Name="channelName" Text="[Channel name]" FontSize="18"/>
|
<TextBlock Name="channelName" Text="[Channel name]" FontSize="18"/>
|
||||||
<TextBlock Name="subscribers" Text="[subscribers]" Foreground="Gray" Margin="0,0,0,5"/>
|
<TextBlock Name="subscribers" Text="[subscribers]" Foreground="Gray" Margin="0,0,0,5"/>
|
||||||
<Button Click="subscribe_Click" Grid.Column="2" Height="30" Width="200" Background="Red" Foreground="White" FontSize="14" FontWeight="SemiBold" Content="Subscirbe" Name="subscribe"/>
|
<Button x:Uid="/Cards/subscribe" Click="subscribe_Click" Grid.Column="2" Height="30" Width="200" Background="Red" Foreground="White" FontSize="14" FontWeight="SemiBold" Content="Subscirbe" Name="subscribe"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
@@ -81,12 +81,12 @@
|
|||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
||||||
<CommandBar VerticalAlignment="Bottom" Name="commandbar">
|
<CommandBar VerticalAlignment="Bottom" Name="commandbar">
|
||||||
<AppBarButton Icon="Download" Label="Download video" Name="download">
|
<AppBarButton x:Uid="/VideoPage/download" Icon="Download" Label="Download video" Name="download">
|
||||||
<AppBarButton.Flyout>
|
<AppBarButton.Flyout>
|
||||||
<MenuFlyout x:Name="downloadSelector"/>
|
<MenuFlyout x:Name="downloadSelector"/>
|
||||||
</AppBarButton.Flyout>
|
</AppBarButton.Flyout>
|
||||||
</AppBarButton>
|
</AppBarButton>
|
||||||
<AppBarButton Name="addTo" Label="Add to" Icon="Add">
|
<AppBarButton x:Uid="/VideoPage/addTo" Name="addTo" Label="Add to" Icon="Add">
|
||||||
<AppBarButton.Flyout>
|
<AppBarButton.Flyout>
|
||||||
<Flyout>
|
<Flyout>
|
||||||
<ScrollViewer Margin="-12" MaxHeight="300">
|
<ScrollViewer Margin="-12" MaxHeight="300">
|
||||||
@@ -127,14 +127,14 @@
|
|||||||
</Flyout>
|
</Flyout>
|
||||||
</AppBarButton.Flyout>
|
</AppBarButton.Flyout>
|
||||||
</AppBarButton>
|
</AppBarButton>
|
||||||
<AppBarButton Name="refresh" Click="refresh_Click" Icon="Refresh" Label="Refresh page"/>
|
<AppBarButton x:Uid="/VideoPage/refresh" Name="refresh" Click="refresh_Click" Icon="Refresh" Label="Refresh page"/>
|
||||||
<AppBarButton Name="share" Click="share_Click" Icon="Share" Label="Share"/>
|
<AppBarButton x:Uid="/VideoPage/share" Name="share" Click="share_Click" Icon="Share" Label="Share"/>
|
||||||
<AppBarButton Name="openBrowser" Click="openBrowser_Click" Icon="Globe" Label="Open in browser"/>
|
<AppBarButton x:Uid="/VideoPage/openWeb" Name="openBrowser" Click="openBrowser_Click" Icon="Globe" Label="Open in browser"/>
|
||||||
</CommandBar>
|
</CommandBar>
|
||||||
|
|
||||||
<Grid Grid.Column="1" Name="tabsPlaceholder">
|
<Grid Grid.Column="1" Name="tabsPlaceholder">
|
||||||
<Pivot Grid.Row="1" Name="pivot" SelectedIndex="0" IsHeaderItemsCarouselEnabled="False">
|
<Pivot Grid.Row="1" Name="pivot" SelectedIndex="0" IsHeaderItemsCarouselEnabled="False">
|
||||||
<PivotItem Header="Suggestions">
|
<PivotItem x:Uid="/VideoPage/related" Header="Suggestions">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<controls1:Advert/>
|
<controls1:Advert/>
|
||||||
@@ -142,10 +142,10 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</PivotItem>
|
</PivotItem>
|
||||||
<PivotItem Header="Comments" Name="commentsPlaceholder">
|
<PivotItem x:Uid="/VideoPage/comments" Header="Comments" Name="commentsPlaceholder">
|
||||||
<pages:CommentsPage/>
|
<pages:CommentsPage/>
|
||||||
</PivotItem>
|
</PivotItem>
|
||||||
<PivotItem Header="Playlist" Name="playlist">
|
<PivotItem x:Uid="/VideoPage/playlist" Header="Playlist" Name="playlist">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<StackPanel Padding="8" Background="{ThemeResource SystemControlBackgroundChromeMediumBrush}">
|
<StackPanel Padding="8" Background="{ThemeResource SystemControlBackgroundChromeMediumBrush}">
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ using System.Diagnostics;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Windows.ApplicationModel.DataTransfer;
|
using Windows.ApplicationModel.DataTransfer;
|
||||||
|
using Windows.ApplicationModel.Resources;
|
||||||
using Windows.Foundation;
|
using Windows.Foundation;
|
||||||
using Windows.Storage;
|
using Windows.Storage;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
@@ -43,7 +44,7 @@ namespace FoxTube.Pages
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class VideoPage : Page
|
public sealed partial class VideoPage : Page
|
||||||
{
|
{
|
||||||
ApplicationDataContainer settings = ApplicationData.Current.LocalSettings;
|
ResourceLoader resources = ResourceLoader.GetForCurrentView("VideoPage");
|
||||||
|
|
||||||
public string videoId;
|
public string videoId;
|
||||||
public string playlistId = null;
|
public string playlistId = null;
|
||||||
@@ -87,7 +88,7 @@ namespace FoxTube.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Player_NextClicked(object sender, params object[] e)
|
private void Player_NextClicked()
|
||||||
{
|
{
|
||||||
if (playlistId != null)
|
if (playlistId != null)
|
||||||
playlistList.SelectedIndex++;
|
playlistList.SelectedIndex++;
|
||||||
@@ -209,7 +210,7 @@ namespace FoxTube.Pages
|
|||||||
|
|
||||||
channelAvatar.ProfilePicture = new BitmapImage(new Uri(item1.Snippet.Thumbnails.Medium.Url));
|
channelAvatar.ProfilePicture = new BitmapImage(new Uri(item1.Snippet.Thumbnails.Medium.Url));
|
||||||
channelName.Text = item.Snippet.ChannelTitle;
|
channelName.Text = item.Snippet.ChannelTitle;
|
||||||
subscribers.Text = $"{item1.Statistics.SubscriberCount:0,0} subscribers";
|
subscribers.Text = $"{item1.Statistics.SubscriberCount:0,0} {resources.GetString("/Cards/subscribers")}";
|
||||||
|
|
||||||
//Setting ratings
|
//Setting ratings
|
||||||
dislikes.Text = $"{item.Statistics.DislikeCount:0,0}";
|
dislikes.Text = $"{item.Statistics.DislikeCount:0,0}";
|
||||||
@@ -242,7 +243,7 @@ namespace FoxTube.Pages
|
|||||||
{
|
{
|
||||||
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
||||||
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
||||||
subscribe.Content = "Subscribed";
|
subscribe.Content = resources.GetString("/Cards/unsubscribe");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
subscribe.Visibility = Visibility.Visible;
|
subscribe.Visibility = Visibility.Visible;
|
||||||
@@ -271,7 +272,7 @@ namespace FoxTube.Pages
|
|||||||
pivot.Items.Remove(commentsPlaceholder);
|
pivot.Items.Remove(commentsPlaceholder);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
commentsPlaceholder.Header = "Chat";
|
commentsPlaceholder.Header = resources.GetString("/VideoPage/chat");
|
||||||
commentsPlaceholder.Content = new Chat(item.LiveStreamingDetails.ActiveLiveChatId);
|
commentsPlaceholder.Content = new Chat(item.LiveStreamingDetails.ActiveLiveChatId);
|
||||||
pivot.SelectedItem = commentsPlaceholder;
|
pivot.SelectedItem = commentsPlaceholder;
|
||||||
}
|
}
|
||||||
@@ -284,12 +285,12 @@ namespace FoxTube.Pages
|
|||||||
request.Id = videoId;
|
request.Id = videoId;
|
||||||
Video video = (await request.ExecuteAsync()).Items[0];
|
Video video = (await request.ExecuteAsync()).Items[0];
|
||||||
|
|
||||||
views.Text = $"{video.LiveStreamingDetails.ConcurrentViewers} viewers";
|
views.Text = $"{video.LiveStreamingDetails.ConcurrentViewers} {resources.GetString("/Cards/viewers")}";
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadStats()
|
void LoadStats()
|
||||||
{
|
{
|
||||||
views.Text = $"{item.Statistics.ViewCount:0,0} views";
|
views.Text = $"{item.Statistics.ViewCount:0,0} {resources.GetString("/Cards/views")}";
|
||||||
|
|
||||||
comments.Initialize(item);
|
comments.Initialize(item);
|
||||||
LoadDownloads();
|
LoadDownloads();
|
||||||
@@ -313,8 +314,8 @@ namespace FoxTube.Pages
|
|||||||
|
|
||||||
MenuFlyoutItem audioItem = new MenuFlyoutItem()
|
MenuFlyoutItem audioItem = new MenuFlyoutItem()
|
||||||
{
|
{
|
||||||
Text = "Audio track",
|
Text = resources.GetString("/VideoPage/audio"),
|
||||||
Tag = new object[] { infoSet.Audio[0], "Audio only" }
|
Tag = new object[] { infoSet.Audio[0], resources.GetString("/Cards/audioOnly") }
|
||||||
};
|
};
|
||||||
audioItem.Click += downloadItemSelected;
|
audioItem.Click += downloadItemSelected;
|
||||||
downloadSelector.Items.Add(audioItem);
|
downloadSelector.Items.Add(audioItem);
|
||||||
@@ -336,7 +337,7 @@ namespace FoxTube.Pages
|
|||||||
request.RegionCode = SettingsStorage.Region;
|
request.RegionCode = SettingsStorage.Region;
|
||||||
request.RelevanceLanguage = SettingsStorage.RelevanceLanguage;
|
request.RelevanceLanguage = SettingsStorage.RelevanceLanguage;
|
||||||
request.RelatedToVideoId = videoId;
|
request.RelatedToVideoId = videoId;
|
||||||
request.SafeSearch = (SearchResource.ListRequest.SafeSearchEnum)(int)settings.Values["safeSearch"];
|
request.SafeSearch = (SearchResource.ListRequest.SafeSearchEnum)SettingsStorage.SafeSearch;
|
||||||
request.MaxResults = 20;
|
request.MaxResults = 20;
|
||||||
request.Type = "video";
|
request.Type = "video";
|
||||||
|
|
||||||
@@ -380,8 +381,8 @@ namespace FoxTube.Pages
|
|||||||
private async void openBrowser_Click(object sender, RoutedEventArgs e)
|
private async void openBrowser_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
player.Pause();
|
player.Pause();
|
||||||
string timecode = player.elapsed.TotalSeconds > 10 ?
|
string timecode = player.Elapsed.TotalSeconds > 10 ?
|
||||||
"&t=" + (int)player.elapsed.TotalSeconds + "s" : string.Empty;
|
"&t=" + (int)player.Elapsed.TotalSeconds + "s" : string.Empty;
|
||||||
|
|
||||||
await Launcher.LaunchUriAsync($"https://www.youtube.com/watch?v={videoId}{timecode}".ToUri());
|
await Launcher.LaunchUriAsync($"https://www.youtube.com/watch?v={videoId}{timecode}".ToUri());
|
||||||
}
|
}
|
||||||
@@ -433,7 +434,7 @@ namespace FoxTube.Pages
|
|||||||
item.Snippet.Thumbnails.Medium.Url,
|
item.Snippet.Thumbnails.Medium.Url,
|
||||||
item.Snippet.Title,
|
item.Snippet.Title,
|
||||||
$"https://www.youtube.com/watch?v={videoId}",
|
$"https://www.youtube.com/watch?v={videoId}",
|
||||||
"video");
|
resources.GetString("/Cards/videoShare"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void share_Click(object sender, RoutedEventArgs e)
|
private void share_Click(object sender, RoutedEventArgs e)
|
||||||
@@ -529,13 +530,13 @@ namespace FoxTube.Pages
|
|||||||
{
|
{
|
||||||
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
subscribe.Background = new SolidColorBrush(Colors.Transparent);
|
||||||
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
subscribe.Foreground = new SolidColorBrush(Colors.Gray);
|
||||||
subscribe.Content = "Subscribed";
|
subscribe.Content = resources.GetString("/Cards/unsubscribe");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
subscribe.Background = new SolidColorBrush(Colors.Red);
|
subscribe.Background = new SolidColorBrush(Colors.Red);
|
||||||
subscribe.Foreground = new SolidColorBrush(Colors.White);
|
subscribe.Foreground = new SolidColorBrush(Colors.White);
|
||||||
subscribe.Content = "Subscribe";
|
subscribe.Content = resources.GetString("/Cards/subscribe/Content");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,189 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="channel.Text" xml:space="preserve">
|
||||||
|
<value>View channel</value>
|
||||||
|
</data>
|
||||||
|
<data name="channelShare" xml:space="preserve">
|
||||||
|
<value>channel</value>
|
||||||
|
</data>
|
||||||
|
<data name="getLink.Text" xml:space="preserve">
|
||||||
|
<value>Copy link</value>
|
||||||
|
</data>
|
||||||
|
<data name="goesLive" xml:space="preserve">
|
||||||
|
<value>Goes live in</value>
|
||||||
|
</data>
|
||||||
|
<data name="incognitoPlay.Text" xml:space="preserve">
|
||||||
|
<value>Play incognito</value>
|
||||||
|
</data>
|
||||||
|
<data name="live.Text" xml:space="preserve">
|
||||||
|
<value>LIVE</value>
|
||||||
|
</data>
|
||||||
|
<data name="login.Text" xml:space="preserve">
|
||||||
|
<value>Log in</value>
|
||||||
|
</data>
|
||||||
|
<data name="more.Content" xml:space="preserve">
|
||||||
|
<value>Show more</value>
|
||||||
|
</data>
|
||||||
|
<data name="openWeb.Text" xml:space="preserve">
|
||||||
|
<value>Open in browser</value>
|
||||||
|
</data>
|
||||||
|
<data name="play.Text" xml:space="preserve">
|
||||||
|
<value>Play</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlist.Text" xml:space="preserve">
|
||||||
|
<value>View playlist</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlistShare" xml:space="preserve">
|
||||||
|
<value>playlist</value>
|
||||||
|
</data>
|
||||||
|
<data name="share.Text" xml:space="preserve">
|
||||||
|
<value>Share</value>
|
||||||
|
</data>
|
||||||
|
<data name="subscribe.Content" xml:space="preserve">
|
||||||
|
<value>Subscribe</value>
|
||||||
|
</data>
|
||||||
|
<data name="subscribers" xml:space="preserve">
|
||||||
|
<value>subscribers</value>
|
||||||
|
</data>
|
||||||
|
<data name="tomanage.Text" xml:space="preserve">
|
||||||
|
<value>to manage your subscriptions</value>
|
||||||
|
</data>
|
||||||
|
<data name="unsubscribe" xml:space="preserve">
|
||||||
|
<value>Subscribed</value>
|
||||||
|
</data>
|
||||||
|
<data name="upcoming" xml:space="preserve">
|
||||||
|
<value>Upcoming</value>
|
||||||
|
</data>
|
||||||
|
<data name="videos" xml:space="preserve">
|
||||||
|
<value>videos</value>
|
||||||
|
</data>
|
||||||
|
<data name="videoShare" xml:space="preserve">
|
||||||
|
<value>video</value>
|
||||||
|
</data>
|
||||||
|
<data name="viewers" xml:space="preserve">
|
||||||
|
<value>viewers</value>
|
||||||
|
</data>
|
||||||
|
<data name="views" xml:space="preserve">
|
||||||
|
<value>views</value>
|
||||||
|
</data>
|
||||||
|
<data name="watched.Text" xml:space="preserve">
|
||||||
|
<value>Watched</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="about.Header" xml:space="preserve">
|
||||||
|
<value>About channel</value>
|
||||||
|
</data>
|
||||||
|
<data name="aboutTitle.Text" xml:space="preserve">
|
||||||
|
<value>About this channel</value>
|
||||||
|
</data>
|
||||||
|
<data name="desc.Text" xml:space="preserve">
|
||||||
|
<value>Description</value>
|
||||||
|
</data>
|
||||||
|
<data name="openWeb.Label" xml:space="preserve">
|
||||||
|
<value>Open in browser</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlists.Header" xml:space="preserve">
|
||||||
|
<value>Playlists</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlistTitle.Text" xml:space="preserve">
|
||||||
|
<value>Playlists</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Refresh</value>
|
||||||
|
</data>
|
||||||
|
<data name="regDate.Text" xml:space="preserve">
|
||||||
|
<value>Registration date:</value>
|
||||||
|
</data>
|
||||||
|
<data name="search.PlaceholderText" xml:space="preserve">
|
||||||
|
<value>Search on channel</value>
|
||||||
|
</data>
|
||||||
|
<data name="share.Label" xml:space="preserve">
|
||||||
|
<value>Share</value>
|
||||||
|
</data>
|
||||||
|
<data name="stats.Text" xml:space="preserve">
|
||||||
|
<value>Statistics</value>
|
||||||
|
</data>
|
||||||
|
<data name="videos.Header" xml:space="preserve">
|
||||||
|
<value>Videos</value>
|
||||||
|
</data>
|
||||||
|
<data name="views.Text" xml:space="preserve">
|
||||||
|
<value>Views:</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="box.PlaceholderText" xml:space="preserve">
|
||||||
|
<value>Send a message</value>
|
||||||
|
</data>
|
||||||
|
<data name="moder" xml:space="preserve">
|
||||||
|
<value>Moderator</value>
|
||||||
|
</data>
|
||||||
|
<data name="owner" xml:space="preserve">
|
||||||
|
<value>Chat owner</value>
|
||||||
|
</data>
|
||||||
|
<data name="sponsor" xml:space="preserve">
|
||||||
|
<value>Sponsor</value>
|
||||||
|
</data>
|
||||||
|
<data name="verified" xml:space="preserve">
|
||||||
|
<value>Verified</value>
|
||||||
|
</data>
|
||||||
|
<data name="welcome.Text" xml:space="preserve">
|
||||||
|
<value>Welcome to the chat room</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -117,19 +117,64 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<data name="comments" xml:space="preserve">
|
||||||
|
<value>comments</value>
|
||||||
|
</data>
|
||||||
<data name="date.Text" xml:space="preserve">
|
<data name="date.Text" xml:space="preserve">
|
||||||
<value>Date</value>
|
<value>Date</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="deleteContent" xml:space="preserve">
|
||||||
|
<value>Are you sure? This action cannot be undone</value>
|
||||||
|
</data>
|
||||||
|
<data name="deleteHeader" xml:space="preserve">
|
||||||
|
<value>Delete comment</value>
|
||||||
|
</data>
|
||||||
|
<data name="edit.Text" xml:space="preserve">
|
||||||
|
<value>Edit</value>
|
||||||
|
</data>
|
||||||
|
<data name="edited" xml:space="preserve">
|
||||||
|
<value>(edited)</value>
|
||||||
|
</data>
|
||||||
|
<data name="editorCancel.Content" xml:space="preserve">
|
||||||
|
<value>Cancel</value>
|
||||||
|
</data>
|
||||||
|
<data name="editorDelete.Content" xml:space="preserve">
|
||||||
|
<value>Delete comment</value>
|
||||||
|
</data>
|
||||||
|
<data name="editorSubmin.Content" xml:space="preserve">
|
||||||
|
<value>Submit</value>
|
||||||
|
</data>
|
||||||
|
<data name="failedEdit" xml:space="preserve">
|
||||||
|
<value>Failed to edit your commentary. Please, try again later.</value>
|
||||||
|
</data>
|
||||||
|
<data name="failedReply" xml:space="preserve">
|
||||||
|
<value>Failed to send your reply. Please, try again later.</value>
|
||||||
|
</data>
|
||||||
<data name="more.Content" xml:space="preserve">
|
<data name="more.Content" xml:space="preserve">
|
||||||
<value>Show more</value>
|
<value>Show more</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="no" xml:space="preserve">
|
||||||
|
<value>No</value>
|
||||||
|
</data>
|
||||||
|
<data name="publish" xml:space="preserve">
|
||||||
|
<value>Publish date</value>
|
||||||
|
</data>
|
||||||
<data name="relevance.Text" xml:space="preserve">
|
<data name="relevance.Text" xml:space="preserve">
|
||||||
<value>Relevance</value>
|
<value>Relevance</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="reply.Text" xml:space="preserve">
|
||||||
|
<value>Reply</value>
|
||||||
|
</data>
|
||||||
|
<data name="replyBox.PlaceholderText" xml:space="preserve">
|
||||||
|
<value>Enter your reply...</value>
|
||||||
|
</data>
|
||||||
<data name="sortBy.Text" xml:space="preserve">
|
<data name="sortBy.Text" xml:space="preserve">
|
||||||
<value>Sort by: </value>
|
<value>Sort by: </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="textbox.PlaceholderText" xml:space="preserve">
|
<data name="textbox.PlaceholderText" xml:space="preserve">
|
||||||
<value>Add a public comment</value>
|
<value>Add a public comment</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="yes" xml:space="preserve">
|
||||||
|
<value>Yes</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="author" xml:space="preserve">
|
||||||
|
<value>Author</value>
|
||||||
|
</data>
|
||||||
|
<data name="cancel.Content" xml:space="preserve">
|
||||||
|
<value>Cancel</value>
|
||||||
|
</data>
|
||||||
|
<data name="cancelling" xml:space="preserve">
|
||||||
|
<value>Cancelling...</value>
|
||||||
|
</data>
|
||||||
|
<data name="cancellingHeader" xml:space="preserve">
|
||||||
|
<value>Cancelling download</value>
|
||||||
|
</data>
|
||||||
|
<data name="downloading.Text" xml:space="preserve">
|
||||||
|
<value>Downloading...</value>
|
||||||
|
</data>
|
||||||
|
<data name="duration" xml:space="preserve">
|
||||||
|
<value>Duration</value>
|
||||||
|
</data>
|
||||||
|
<data name="ext" xml:space="preserve">
|
||||||
|
<value>Extension</value>
|
||||||
|
</data>
|
||||||
|
<data name="gotoOrign.Content" xml:space="preserve">
|
||||||
|
<value>Go to original</value>
|
||||||
|
</data>
|
||||||
|
<data name="no" xml:space="preserve">
|
||||||
|
<value>No</value>
|
||||||
|
</data>
|
||||||
|
<data name="noItems.Text" xml:space="preserve">
|
||||||
|
<value>You haven't downloaded anything yet</value>
|
||||||
|
</data>
|
||||||
|
<data name="openFile.Content" xml:space="preserve">
|
||||||
|
<value>Open</value>
|
||||||
|
</data>
|
||||||
|
<data name="openFolder.Content" xml:space="preserve">
|
||||||
|
<value>Open folder</value>
|
||||||
|
</data>
|
||||||
|
<data name="prompt" xml:space="preserve">
|
||||||
|
<value>Are you sure?</value>
|
||||||
|
</data>
|
||||||
|
<data name="quality" xml:space="preserve">
|
||||||
|
<value>Quality</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Refresh</value>
|
||||||
|
</data>
|
||||||
|
<data name="toastCanceledHeader" xml:space="preserve">
|
||||||
|
<value>Download canceled</value>
|
||||||
|
</data>
|
||||||
|
<data name="toastCompleteHeader" xml:space="preserve">
|
||||||
|
<value>Download complete</value>
|
||||||
|
</data>
|
||||||
|
<data name="toastStartHeader" xml:space="preserve">
|
||||||
|
<value>Downloading a video</value>
|
||||||
|
</data>
|
||||||
|
<data name="yes" xml:space="preserve">
|
||||||
|
<value>Yes</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -198,4 +198,10 @@
|
|||||||
<data name="closeApp.Content" xml:space="preserve">
|
<data name="closeApp.Content" xml:space="preserve">
|
||||||
<value>Close app</value>
|
<value>Close app</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="devNotifications.OffContent" xml:space="preserve">
|
||||||
|
<value>Recieve messages from developers</value>
|
||||||
|
</data>
|
||||||
|
<data name="devNotifications.OnContent" xml:space="preserve">
|
||||||
|
<value>Recieve messages from developers</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="recommended.Header" xml:space="preserve">
|
||||||
|
<value>Recommended</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh" xml:space="preserve">
|
||||||
|
<value>Refresh page</value>
|
||||||
|
</data>
|
||||||
|
<data name="subs.Header" xml:space="preserve">
|
||||||
|
<value>Subscriptions</value>
|
||||||
|
</data>
|
||||||
|
<data name="trending.Header" xml:space="preserve">
|
||||||
|
<value>Trending</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -120,9 +120,15 @@
|
|||||||
<data name="all.Content" xml:space="preserve">
|
<data name="all.Content" xml:space="preserve">
|
||||||
<value>All</value>
|
<value>All</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="changelog" xml:space="preserve">
|
||||||
|
<value>Changelog</value>
|
||||||
|
</data>
|
||||||
<data name="changelogs.Content" xml:space="preserve">
|
<data name="changelogs.Content" xml:space="preserve">
|
||||||
<value>Changelogs</value>
|
<value>Changelogs</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="dev" xml:space="preserve">
|
||||||
|
<value>Developer's message</value>
|
||||||
|
</data>
|
||||||
<data name="filter.Header" xml:space="preserve">
|
<data name="filter.Header" xml:space="preserve">
|
||||||
<value>Filter</value>
|
<value>Filter</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -132,4 +138,7 @@
|
|||||||
<data name="select.Text" xml:space="preserve">
|
<data name="select.Text" xml:space="preserve">
|
||||||
<value>Select item from the list</value>
|
<value>Select item from the list</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="whatsnew" xml:space="preserve">
|
||||||
|
<value>What's new in v</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -117,37 +117,37 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="checkConnection" xml:space="preserve">
|
<data name="checkConnection.Text" xml:space="preserve">
|
||||||
<value>Check your internet connection</value>
|
<value>Check your internet connection</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="details" xml:space="preserve">
|
<data name="details" xml:space="preserve">
|
||||||
<value>Message:</value>
|
<value>Details</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="err" xml:space="preserve">
|
<data name="err.Text" xml:space="preserve">
|
||||||
<value>We are unable to display the page</value>
|
<value>We are unable to display the page</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="errDescription" xml:space="preserve">
|
<data name="errDescription.Text" xml:space="preserve">
|
||||||
<value>It could be caused by YouTube internal server error or by application's bug. Please, try again later</value>
|
<value>It could be caused by YouTube internal server error or by application's bug. Please, try again later</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ex" xml:space="preserve">
|
<data name="ex" xml:space="preserve">
|
||||||
<value>Exception:</value>
|
<value>Exception</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="feedback" xml:space="preserve">
|
<data name="feedback.Content" xml:space="preserve">
|
||||||
<value>Report problem</value>
|
<value>Report problem</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="openTroubeshooter" xml:space="preserve">
|
<data name="openTroubeshooter.Content" xml:space="preserve">
|
||||||
<value>Open troubleshooter</value>
|
<value>Open troubleshooter</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="openWifi" xml:space="preserve">
|
<data name="openWifi.Content" xml:space="preserve">
|
||||||
<value>Open network settings</value>
|
<value>Open network settings</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="or" xml:space="preserve">
|
<data name="or.Text" xml:space="preserve">
|
||||||
<value>OR</value>
|
<value>OR</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="refresh" xml:space="preserve">
|
<data name="refresh.Content" xml:space="preserve">
|
||||||
<value>Refresh page</value>
|
<value>Refresh page</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="wifiDescription" xml:space="preserve">
|
<data name="wifiDesc.Text" xml:space="preserve">
|
||||||
<value>Please, make sure you are connected to the internet and try again.</value>
|
<value>Please, make sure you are connected to the internet and try again.</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -117,9 +117,21 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<data name="addLater" xml:space="preserve">
|
||||||
|
<value>Add to 'Watch later' playlist</value>
|
||||||
|
</data>
|
||||||
<data name="adsFree.Content" xml:space="preserve">
|
<data name="adsFree.Content" xml:space="preserve">
|
||||||
<value>Remove ads</value>
|
<value>Remove ads</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="channel" xml:space="preserve">
|
||||||
|
<value>Channel</value>
|
||||||
|
</data>
|
||||||
|
<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>
|
||||||
|
</data>
|
||||||
|
<data name="connectErrHeader" xml:space="preserve">
|
||||||
|
<value>Failed to connect</value>
|
||||||
|
</data>
|
||||||
<data name="downloads.Content" xml:space="preserve">
|
<data name="downloads.Content" xml:space="preserve">
|
||||||
<value>Downloads</value>
|
<value>Downloads</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -138,6 +150,9 @@
|
|||||||
<data name="liked.Content" xml:space="preserve">
|
<data name="liked.Content" xml:space="preserve">
|
||||||
<value>Liked videos</value>
|
<value>Liked videos</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="metered" xml:space="preserve">
|
||||||
|
<value>"You are on metered connection now. Additional charges may apply. Do you want to continue?"</value>
|
||||||
|
</data>
|
||||||
<data name="myAccount.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
<data name="myAccount.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||||
<value>My account</value>
|
<value>My account</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -150,9 +165,18 @@
|
|||||||
<data name="myLibrary.Content" xml:space="preserve">
|
<data name="myLibrary.Content" xml:space="preserve">
|
||||||
<value>My library</value>
|
<value>My library</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="no" xml:space="preserve">
|
||||||
|
<value>No</value>
|
||||||
|
</data>
|
||||||
<data name="notifications.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
<data name="notifications.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||||
<value>Notifications</value>
|
<value>Notifications</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="playlist" xml:space="preserve">
|
||||||
|
<value>Playlist</value>
|
||||||
|
</data>
|
||||||
|
<data name="quit" xml:space="preserve">
|
||||||
|
<value>Quit</value>
|
||||||
|
</data>
|
||||||
<data name="searchPlaceholder.PlaceholderText" xml:space="preserve">
|
<data name="searchPlaceholder.PlaceholderText" xml:space="preserve">
|
||||||
<value>Search</value>
|
<value>Search</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -174,4 +198,13 @@
|
|||||||
<data name="subscriptions.Content" xml:space="preserve">
|
<data name="subscriptions.Content" xml:space="preserve">
|
||||||
<value>Subscriptions</value>
|
<value>Subscriptions</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="tryAgain" xml:space="preserve">
|
||||||
|
<value>Try again</value>
|
||||||
|
</data>
|
||||||
|
<data name="video" xml:space="preserve">
|
||||||
|
<value>Video</value>
|
||||||
|
</data>
|
||||||
|
<data name="yes" xml:space="preserve">
|
||||||
|
<value>Yes</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -0,0 +1,162 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="days" xml:space="preserve">
|
||||||
|
<value>days ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="hrs" xml:space="preserve">
|
||||||
|
<value>hours ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="minutes" xml:space="preserve">
|
||||||
|
<value>minutes ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="months" xml:space="preserve">
|
||||||
|
<value>months ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="now" xml:space="preserve">
|
||||||
|
<value>Just now</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneDay" xml:space="preserve">
|
||||||
|
<value>1 day ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneHr" xml:space="preserve">
|
||||||
|
<value>1 hour ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneMinute" xml:space="preserve">
|
||||||
|
<value>1 minute ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneMonth" xml:space="preserve">
|
||||||
|
<value>1 month ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneWeek" xml:space="preserve">
|
||||||
|
<value>1 week ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneYear" xml:space="preserve">
|
||||||
|
<value>1 year ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="sharing" xml:space="preserve">
|
||||||
|
<value>Sharing a</value>
|
||||||
|
</data>
|
||||||
|
<data name="weeks" xml:space="preserve">
|
||||||
|
<value>weeks ago</value>
|
||||||
|
</data>
|
||||||
|
<data name="years" xml:space="preserve">
|
||||||
|
<value>years ago</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="addTo.Label" xml:space="preserve">
|
||||||
|
<value>Add to</value>
|
||||||
|
</data>
|
||||||
|
<data name="openWeb.Label" xml:space="preserve">
|
||||||
|
<value>Open in browser</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Refresh</value>
|
||||||
|
</data>
|
||||||
|
<data name="share.Label" xml:space="preserve">
|
||||||
|
<value>Share</value>
|
||||||
|
</data>
|
||||||
|
<data name="videos" xml:space="preserve">
|
||||||
|
<value>videos</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,228 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="all.Content" xml:space="preserve">
|
||||||
|
<value>All</value>
|
||||||
|
</data>
|
||||||
|
<data name="any.Content" xml:space="preserve">
|
||||||
|
<value>Any</value>
|
||||||
|
</data>
|
||||||
|
<data name="anytime.Content" xml:space="preserve">
|
||||||
|
<value>Anytime</value>
|
||||||
|
</data>
|
||||||
|
<data name="apply.Content" xml:space="preserve">
|
||||||
|
<value>Apply</value>
|
||||||
|
</data>
|
||||||
|
<data name="cc.Text" xml:space="preserve">
|
||||||
|
<value>Creative Commons</value>
|
||||||
|
</data>
|
||||||
|
<data name="channel.Content" xml:space="preserve">
|
||||||
|
<value>Channel</value>
|
||||||
|
</data>
|
||||||
|
<data name="duration.Header" xml:space="preserve">
|
||||||
|
<value>Duration</value>
|
||||||
|
</data>
|
||||||
|
<data name="features.Content" xml:space="preserve">
|
||||||
|
<value>Features</value>
|
||||||
|
</data>
|
||||||
|
<data name="featuresHeader.Header" xml:space="preserve">
|
||||||
|
<value>Features</value>
|
||||||
|
</data>
|
||||||
|
<data name="filters.Content" xml:space="preserve">
|
||||||
|
<value>Show filters </value>
|
||||||
|
</data>
|
||||||
|
<data name="found" xml:space="preserve">
|
||||||
|
<value>Found</value>
|
||||||
|
</data>
|
||||||
|
<data name="header" xml:space="preserve">
|
||||||
|
<value>Search results for:</value>
|
||||||
|
</data>
|
||||||
|
<data name="hideFilters" xml:space="preserve">
|
||||||
|
<value>Hide filters </value>
|
||||||
|
</data>
|
||||||
|
<data name="items" xml:space="preserve">
|
||||||
|
<value>item(s)</value>
|
||||||
|
</data>
|
||||||
|
<data name="lasthr.Content" xml:space="preserve">
|
||||||
|
<value>Last hour</value>
|
||||||
|
</data>
|
||||||
|
<data name="live.Text" xml:space="preserve">
|
||||||
|
<value>Live</value>
|
||||||
|
</data>
|
||||||
|
<data name="long.Content" xml:space="preserve">
|
||||||
|
<value>Long (> 20 minutes)</value>
|
||||||
|
</data>
|
||||||
|
<data name="medium.Content" xml:space="preserve">
|
||||||
|
<value>Medium</value>
|
||||||
|
</data>
|
||||||
|
<data name="month.Content" xml:space="preserve">
|
||||||
|
<value>This month</value>
|
||||||
|
</data>
|
||||||
|
<data name="openWeb.Label" xml:space="preserve">
|
||||||
|
<value>Open in browser</value>
|
||||||
|
</data>
|
||||||
|
<data name="order.Header" xml:space="preserve">
|
||||||
|
<value>Sort by</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlist.Content" xml:space="preserve">
|
||||||
|
<value>Playlist</value>
|
||||||
|
</data>
|
||||||
|
<data name="rating.Content" xml:space="preserve">
|
||||||
|
<value>Rating</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Refresh</value>
|
||||||
|
</data>
|
||||||
|
<data name="relevance.Content" xml:space="preserve">
|
||||||
|
<value>Relevance</value>
|
||||||
|
</data>
|
||||||
|
<data name="short.Content" xml:space="preserve">
|
||||||
|
<value>Short (< 4 minutes)</value>
|
||||||
|
</data>
|
||||||
|
<data name="subs.Text" xml:space="preserve">
|
||||||
|
<value>Subtitles/CC</value>
|
||||||
|
</data>
|
||||||
|
<data name="title.Content" xml:space="preserve">
|
||||||
|
<value>Title</value>
|
||||||
|
</data>
|
||||||
|
<data name="today.Content" xml:space="preserve">
|
||||||
|
<value>Today</value>
|
||||||
|
</data>
|
||||||
|
<data name="type.Header" xml:space="preserve">
|
||||||
|
<value>Type</value>
|
||||||
|
</data>
|
||||||
|
<data name="update.Content" xml:space="preserve">
|
||||||
|
<value>Upload date</value>
|
||||||
|
</data>
|
||||||
|
<data name="updateHeader.Header" xml:space="preserve">
|
||||||
|
<value>Upload date</value>
|
||||||
|
</data>
|
||||||
|
<data name="video.Content" xml:space="preserve">
|
||||||
|
<value>Video</value>
|
||||||
|
</data>
|
||||||
|
<data name="views.Content" xml:space="preserve">
|
||||||
|
<value>View count</value>
|
||||||
|
</data>
|
||||||
|
<data name="week.Content" xml:space="preserve">
|
||||||
|
<value>This week</value>
|
||||||
|
</data>
|
||||||
|
<data name="year.Content" xml:space="preserve">
|
||||||
|
<value>This year</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -117,28 +117,40 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="description" xml:space="preserve">
|
<data name="addTo.Label" xml:space="preserve">
|
||||||
<value>You can help us make this app even better by contributing to its development by translating this app. You can choose a brand new language to translate or edit mistakes in existing translations.</value>
|
<value>Add to</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="export" xml:space="preserve">
|
<data name="audio" xml:space="preserve">
|
||||||
<value>Export to PC (.zip)</value>
|
<value>Audio track</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="guide0" xml:space="preserve">
|
<data name="audioOnly" xml:space="preserve">
|
||||||
<value>It's quite simple:</value>
|
<value>Audio only</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="guide1" xml:space="preserve">
|
<data name="chat" xml:space="preserve">
|
||||||
<value>1. Choose language you you want to translate on</value>
|
<value>Chat</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="guide2" xml:space="preserve">
|
<data name="comments.Header" xml:space="preserve">
|
||||||
<value>2. Import language pack to your PC</value>
|
<value>Comments</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="header" xml:space="preserve">
|
<data name="desc" xml:space="preserve">
|
||||||
<value>Help us translate this app</value>
|
<value>Description</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="langPlaceholder" xml:space="preserve">
|
<data name="download.Label" xml:space="preserve">
|
||||||
<value>Choose language...</value>
|
<value>Download video</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="warning" xml:space="preserve">
|
<data name="openWeb.Label" xml:space="preserve">
|
||||||
<value>Attention! This tool is used to help us to provide our app to more people from other countries. Please, don't send not done language packs. Thanks in advance ;)</value>
|
<value>Open in browser</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlist.Header" xml:space="preserve">
|
||||||
|
<value>Playlist</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Refresh page</value>
|
||||||
|
</data>
|
||||||
|
<data name="related.Header" xml:space="preserve">
|
||||||
|
<value>Suggestons</value>
|
||||||
|
</data>
|
||||||
|
<data name="share.Label" xml:space="preserve">
|
||||||
|
<value>Share</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -0,0 +1,189 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="channel.Text" xml:space="preserve">
|
||||||
|
<value>Посмотреть канал</value>
|
||||||
|
</data>
|
||||||
|
<data name="channelShare" xml:space="preserve">
|
||||||
|
<value>каналом</value>
|
||||||
|
</data>
|
||||||
|
<data name="getLink.Text" xml:space="preserve">
|
||||||
|
<value>Скопировать ссылку</value>
|
||||||
|
</data>
|
||||||
|
<data name="goesLive" xml:space="preserve">
|
||||||
|
<value>Начало через</value>
|
||||||
|
</data>
|
||||||
|
<data name="incognitoPlay.Text" xml:space="preserve">
|
||||||
|
<value>Открыть в режиме инкогнито</value>
|
||||||
|
</data>
|
||||||
|
<data name="live.Text" xml:space="preserve">
|
||||||
|
<value>Прямой эфир</value>
|
||||||
|
</data>
|
||||||
|
<data name="login.Text" xml:space="preserve">
|
||||||
|
<value>Войдите</value>
|
||||||
|
</data>
|
||||||
|
<data name="more.Content" xml:space="preserve">
|
||||||
|
<value>Показать еще</value>
|
||||||
|
</data>
|
||||||
|
<data name="openWeb.Text" xml:space="preserve">
|
||||||
|
<value>Открыть в браузере</value>
|
||||||
|
</data>
|
||||||
|
<data name="play.Text" xml:space="preserve">
|
||||||
|
<value>Открыть</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlist.Text" xml:space="preserve">
|
||||||
|
<value>Посмотреть плейлист</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlistShare" xml:space="preserve">
|
||||||
|
<value>плейлистом</value>
|
||||||
|
</data>
|
||||||
|
<data name="share.Text" xml:space="preserve">
|
||||||
|
<value>Поделиться</value>
|
||||||
|
</data>
|
||||||
|
<data name="subscribe.Content" xml:space="preserve">
|
||||||
|
<value>Подписаться</value>
|
||||||
|
</data>
|
||||||
|
<data name="subscribers" xml:space="preserve">
|
||||||
|
<value>подписчиков</value>
|
||||||
|
</data>
|
||||||
|
<data name="tomanage.Text" xml:space="preserve">
|
||||||
|
<value>чтобы управлять подписками</value>
|
||||||
|
</data>
|
||||||
|
<data name="unsubscribe" xml:space="preserve">
|
||||||
|
<value>Вы подписаны</value>
|
||||||
|
</data>
|
||||||
|
<data name="upcoming" xml:space="preserve">
|
||||||
|
<value>Запланирован</value>
|
||||||
|
</data>
|
||||||
|
<data name="videos" xml:space="preserve">
|
||||||
|
<value>видео</value>
|
||||||
|
</data>
|
||||||
|
<data name="videoShare" xml:space="preserve">
|
||||||
|
<value>видео</value>
|
||||||
|
</data>
|
||||||
|
<data name="viewers" xml:space="preserve">
|
||||||
|
<value>зрителей</value>
|
||||||
|
</data>
|
||||||
|
<data name="views" xml:space="preserve">
|
||||||
|
<value>просмотров</value>
|
||||||
|
</data>
|
||||||
|
<data name="watched.Text" xml:space="preserve">
|
||||||
|
<value>Просмотрено</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="about.Header" xml:space="preserve">
|
||||||
|
<value>О канале</value>
|
||||||
|
</data>
|
||||||
|
<data name="aboutTitle.Text" xml:space="preserve">
|
||||||
|
<value>Об этом канале</value>
|
||||||
|
</data>
|
||||||
|
<data name="desc.Text" xml:space="preserve">
|
||||||
|
<value>Описание</value>
|
||||||
|
</data>
|
||||||
|
<data name="openWeb.Label" xml:space="preserve">
|
||||||
|
<value>Открыть в браузере</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlists.Header" xml:space="preserve">
|
||||||
|
<value>Плейлисты</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlistTitle.Text" xml:space="preserve">
|
||||||
|
<value>Плейлисты</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Обновить</value>
|
||||||
|
</data>
|
||||||
|
<data name="regDate.Text" xml:space="preserve">
|
||||||
|
<value>Дата регистрации:</value>
|
||||||
|
</data>
|
||||||
|
<data name="search.PlaceholderText" xml:space="preserve">
|
||||||
|
<value>Искать на канале</value>
|
||||||
|
</data>
|
||||||
|
<data name="share.Label" xml:space="preserve">
|
||||||
|
<value>Поделиться</value>
|
||||||
|
</data>
|
||||||
|
<data name="stats.Text" xml:space="preserve">
|
||||||
|
<value>Статистика</value>
|
||||||
|
</data>
|
||||||
|
<data name="videos.Header" xml:space="preserve">
|
||||||
|
<value>Видео</value>
|
||||||
|
</data>
|
||||||
|
<data name="views.Text" xml:space="preserve">
|
||||||
|
<value>Просмотры: </value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="box.PlaceholderText" xml:space="preserve">
|
||||||
|
<value>Отправить сообщение</value>
|
||||||
|
</data>
|
||||||
|
<data name="moder" xml:space="preserve">
|
||||||
|
<value>Модератор</value>
|
||||||
|
</data>
|
||||||
|
<data name="owner" xml:space="preserve">
|
||||||
|
<value>Владелец чата</value>
|
||||||
|
</data>
|
||||||
|
<data name="sponsor" xml:space="preserve">
|
||||||
|
<value>Спонсор</value>
|
||||||
|
</data>
|
||||||
|
<data name="verified" xml:space="preserve">
|
||||||
|
<value>Подтвержден</value>
|
||||||
|
</data>
|
||||||
|
<data name="welcome.Text" xml:space="preserve">
|
||||||
|
<value>Добро пожаловать в чат!</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,180 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="comments" xml:space="preserve">
|
||||||
|
<value>комментариев</value>
|
||||||
|
</data>
|
||||||
|
<data name="date.Text" xml:space="preserve">
|
||||||
|
<value>Дате</value>
|
||||||
|
</data>
|
||||||
|
<data name="deleteContent" xml:space="preserve">
|
||||||
|
<value>Вы уверены? Это действие нельзя отменить</value>
|
||||||
|
</data>
|
||||||
|
<data name="deleteHeader" xml:space="preserve">
|
||||||
|
<value>Удалить комментарий</value>
|
||||||
|
</data>
|
||||||
|
<data name="edit.Text" xml:space="preserve">
|
||||||
|
<value>Редактировать</value>
|
||||||
|
</data>
|
||||||
|
<data name="edited" xml:space="preserve">
|
||||||
|
<value>(изменен)</value>
|
||||||
|
</data>
|
||||||
|
<data name="editorCancel.Content" xml:space="preserve">
|
||||||
|
<value>Отмена</value>
|
||||||
|
</data>
|
||||||
|
<data name="editorDelete.Content" xml:space="preserve">
|
||||||
|
<value>Удалить комментарий</value>
|
||||||
|
</data>
|
||||||
|
<data name="editorSubmin.Content" xml:space="preserve">
|
||||||
|
<value>Отправить</value>
|
||||||
|
</data>
|
||||||
|
<data name="failedEdit" xml:space="preserve">
|
||||||
|
<value>Не удалось изменить комментарий. Пожалуйста, попробуйте позже</value>
|
||||||
|
</data>
|
||||||
|
<data name="failedReply" xml:space="preserve">
|
||||||
|
<value>Не удалось отправить ответ. Пожалуйста, попробуйте позже</value>
|
||||||
|
</data>
|
||||||
|
<data name="more.Content" xml:space="preserve">
|
||||||
|
<value>Показать еще</value>
|
||||||
|
</data>
|
||||||
|
<data name="no" xml:space="preserve">
|
||||||
|
<value>Нет</value>
|
||||||
|
</data>
|
||||||
|
<data name="publish" xml:space="preserve">
|
||||||
|
<value>Дате публикации</value>
|
||||||
|
</data>
|
||||||
|
<data name="relevance.Text" xml:space="preserve">
|
||||||
|
<value>Популярности</value>
|
||||||
|
</data>
|
||||||
|
<data name="reply.Text" xml:space="preserve">
|
||||||
|
<value>Ответить</value>
|
||||||
|
</data>
|
||||||
|
<data name="replyBox.PlaceholderText" xml:space="preserve">
|
||||||
|
<value>Введите свой ответ...</value>
|
||||||
|
</data>
|
||||||
|
<data name="sortBy.Text" xml:space="preserve">
|
||||||
|
<value>Сортировать по:</value>
|
||||||
|
</data>
|
||||||
|
<data name="textbox.PlaceholderText" xml:space="preserve">
|
||||||
|
<value>Оставить комментарий</value>
|
||||||
|
</data>
|
||||||
|
<data name="yes" xml:space="preserve">
|
||||||
|
<value>Да</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="author" xml:space="preserve">
|
||||||
|
<value>Автор</value>
|
||||||
|
</data>
|
||||||
|
<data name="cancel.Content" xml:space="preserve">
|
||||||
|
<value>Отмена</value>
|
||||||
|
</data>
|
||||||
|
<data name="cancelling" xml:space="preserve">
|
||||||
|
<value>Отмена...</value>
|
||||||
|
</data>
|
||||||
|
<data name="cancellingHeader" xml:space="preserve">
|
||||||
|
<value>Отмена загрузки</value>
|
||||||
|
</data>
|
||||||
|
<data name="downloading.Text" xml:space="preserve">
|
||||||
|
<value>Загрузка...</value>
|
||||||
|
</data>
|
||||||
|
<data name="duration" xml:space="preserve">
|
||||||
|
<value>Длительность</value>
|
||||||
|
</data>
|
||||||
|
<data name="ext" xml:space="preserve">
|
||||||
|
<value>Расширение</value>
|
||||||
|
</data>
|
||||||
|
<data name="gotoOrign.Content" xml:space="preserve">
|
||||||
|
<value>Открыть оригинал</value>
|
||||||
|
</data>
|
||||||
|
<data name="no" xml:space="preserve">
|
||||||
|
<value>Нет</value>
|
||||||
|
</data>
|
||||||
|
<data name="noItems.Text" xml:space="preserve">
|
||||||
|
<value>Вы еще ничего не скачивали</value>
|
||||||
|
</data>
|
||||||
|
<data name="openFile.Content" xml:space="preserve">
|
||||||
|
<value>Открыть</value>
|
||||||
|
</data>
|
||||||
|
<data name="openFolder.Content" xml:space="preserve">
|
||||||
|
<value>Открыть папку</value>
|
||||||
|
</data>
|
||||||
|
<data name="prompt" xml:space="preserve">
|
||||||
|
<value>Вы уверены?</value>
|
||||||
|
</data>
|
||||||
|
<data name="quality" xml:space="preserve">
|
||||||
|
<value>Качество</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Обновить</value>
|
||||||
|
</data>
|
||||||
|
<data name="toastCanceledHeader" xml:space="preserve">
|
||||||
|
<value>Загрузка отменена</value>
|
||||||
|
</data>
|
||||||
|
<data name="toastCompleteHeader" xml:space="preserve">
|
||||||
|
<value>Загрузка завершена</value>
|
||||||
|
</data>
|
||||||
|
<data name="toastStartHeader" xml:space="preserve">
|
||||||
|
<value>Загрузка виде</value>
|
||||||
|
</data>
|
||||||
|
<data name="yes" xml:space="preserve">
|
||||||
|
<value>Да</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -198,4 +198,10 @@
|
|||||||
<data name="closeApp.Content" xml:space="preserve">
|
<data name="closeApp.Content" xml:space="preserve">
|
||||||
<value>Закрыть приложение</value>
|
<value>Закрыть приложение</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="devNotifications.OffContent" xml:space="preserve">
|
||||||
|
<value>Получать уведомления от разработчиков</value>
|
||||||
|
</data>
|
||||||
|
<data name="devNotifications.OnContent" xml:space="preserve">
|
||||||
|
<value>Получать уведомления от разработчиков</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="recommended.Header" xml:space="preserve">
|
||||||
|
<value>Рекомендуемое</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh" xml:space="preserve">
|
||||||
|
<value>Обновить страницу</value>
|
||||||
|
</data>
|
||||||
|
<data name="subs.Header" xml:space="preserve">
|
||||||
|
<value>Подписки</value>
|
||||||
|
</data>
|
||||||
|
<data name="trending.Header" xml:space="preserve">
|
||||||
|
<value>Популярное</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -120,9 +120,15 @@
|
|||||||
<data name="all.Content" xml:space="preserve">
|
<data name="all.Content" xml:space="preserve">
|
||||||
<value>Все</value>
|
<value>Все</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="changelog" xml:space="preserve">
|
||||||
|
<value>Список изменений</value>
|
||||||
|
</data>
|
||||||
<data name="changelogs.Content" xml:space="preserve">
|
<data name="changelogs.Content" xml:space="preserve">
|
||||||
<value>"Что нового?"</value>
|
<value>"Что нового?"</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="dev" xml:space="preserve">
|
||||||
|
<value>Сообщение от разработчиков</value>
|
||||||
|
</data>
|
||||||
<data name="filter.Header" xml:space="preserve">
|
<data name="filter.Header" xml:space="preserve">
|
||||||
<value>Фильтр</value>
|
<value>Фильтр</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -132,4 +138,7 @@
|
|||||||
<data name="select.Text" xml:space="preserve">
|
<data name="select.Text" xml:space="preserve">
|
||||||
<value>Выберите сообщение из списка</value>
|
<value>Выберите сообщение из списка</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="whatsnew" xml:space="preserve">
|
||||||
|
<value>Что нового в версии </value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -117,37 +117,37 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="checkConnection" xml:space="preserve">
|
<data name="checkConnection.Text" xml:space="preserve">
|
||||||
<value>Проверте интернет-соединение</value>
|
<value>Проверте интернет-соединение</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="details" xml:space="preserve">
|
<data name="details" xml:space="preserve">
|
||||||
<value>Сообщение:</value>
|
<value>Сообщение</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="err" xml:space="preserve">
|
<data name="err.Text" xml:space="preserve">
|
||||||
<value>Мы не можем отобразить страницу</value>
|
<value>Мы не можем отобразить страницу</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="errDescription" xml:space="preserve">
|
<data name="errDescription.Text" xml:space="preserve">
|
||||||
<value>Это может происходить из-за проблем на серверах YouTube или из-за ошибок приложения. Пожалуйста, попробуйте позже</value>
|
<value>Это может происходить из-за проблем на серверах YouTube или из-за ошибок приложения. Пожалуйста, попробуйте позже</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ex" xml:space="preserve">
|
<data name="ex" xml:space="preserve">
|
||||||
<value>Ошибка:</value>
|
<value>Ошибка</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="feedback" xml:space="preserve">
|
<data name="feedback.Content" xml:space="preserve">
|
||||||
<value>Сообщить об ошибке</value>
|
<value>Сообщить об ошибке</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="openTroubeshooter" xml:space="preserve">
|
<data name="openTroubeshooter.Content" xml:space="preserve">
|
||||||
<value>Устранение неполадок</value>
|
<value>Устранение неполадок</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="openWifi" xml:space="preserve">
|
<data name="openWifi.Content" xml:space="preserve">
|
||||||
<value>Открыть настройки сети</value>
|
<value>Открыть настройки сети</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="or" xml:space="preserve">
|
<data name="or.Text" xml:space="preserve">
|
||||||
<value>ИЛИ</value>
|
<value>ИЛИ</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="refresh" xml:space="preserve">
|
<data name="refresh.Content" xml:space="preserve">
|
||||||
<value>Обновить страницу</value>
|
<value>Обновить страницу</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="wifiDescription" xml:space="preserve">
|
<data name="wifiDesc.Text" xml:space="preserve">
|
||||||
<value>Пожалуйста, убедитесь, что вы подключены к Интернету и попробуйте обновить страницу</value>
|
<value>Пожалуйста, убедитесь, что вы подключены к Интернету и попробуйте обновить страницу</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -117,9 +117,21 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<data name="addLater" xml:space="preserve">
|
||||||
|
<value>Добавить в плейлист 'Посмотреть позже'</value>
|
||||||
|
</data>
|
||||||
<data name="adsFree.Content" xml:space="preserve">
|
<data name="adsFree.Content" xml:space="preserve">
|
||||||
<value>Убрать рекламу</value>
|
<value>Убрать рекламу</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="channel" xml:space="preserve">
|
||||||
|
<value>Канал</value>
|
||||||
|
</data>
|
||||||
|
<data name="connectErrContent" xml:space="preserve">
|
||||||
|
<value>Нам не удалось подключиться к серверу из-за плохого соединения или проблем на стороне YouTube. Пожалуйста, попробуйте позже</value>
|
||||||
|
</data>
|
||||||
|
<data name="connectErrHeader" 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>
|
||||||
@@ -138,6 +150,9 @@
|
|||||||
<data name="liked.Content" xml:space="preserve">
|
<data name="liked.Content" xml:space="preserve">
|
||||||
<value>Понравившиеся</value>
|
<value>Понравившиеся</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="metered" xml:space="preserve">
|
||||||
|
<value>"You are on metered connection now. Additional charges may apply. Do you want to continue?"</value>
|
||||||
|
</data>
|
||||||
<data name="myAccount.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
<data name="myAccount.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||||
<value>Мой аккаунт</value>
|
<value>Мой аккаунт</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -150,9 +165,18 @@
|
|||||||
<data name="myLibrary.Content" xml:space="preserve">
|
<data name="myLibrary.Content" xml:space="preserve">
|
||||||
<value>Библиотека</value>
|
<value>Библиотека</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="no" xml:space="preserve">
|
||||||
|
<value>Нет</value>
|
||||||
|
</data>
|
||||||
<data name="notifications.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
<data name="notifications.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||||
<value>Уведомления</value>
|
<value>Уведомления</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="playlist" xml:space="preserve">
|
||||||
|
<value>Плейлист</value>
|
||||||
|
</data>
|
||||||
|
<data name="quit" 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>
|
||||||
@@ -174,4 +198,13 @@
|
|||||||
<data name="subscriptions.Content" xml:space="preserve">
|
<data name="subscriptions.Content" xml:space="preserve">
|
||||||
<value>Подписки</value>
|
<value>Подписки</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="tryAgain" xml:space="preserve">
|
||||||
|
<value>Попробовать снова</value>
|
||||||
|
</data>
|
||||||
|
<data name="video" xml:space="preserve">
|
||||||
|
<value>Видео</value>
|
||||||
|
</data>
|
||||||
|
<data name="yes" xml:space="preserve">
|
||||||
|
<value>Да</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -0,0 +1,162 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="days" xml:space="preserve">
|
||||||
|
<value>дней назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="hrs" xml:space="preserve">
|
||||||
|
<value>часов назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="minutes" xml:space="preserve">
|
||||||
|
<value>минут назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="months" xml:space="preserve">
|
||||||
|
<value>месяцев назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="now" xml:space="preserve">
|
||||||
|
<value>Только что</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneDay" xml:space="preserve">
|
||||||
|
<value>1 день назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneHr" xml:space="preserve">
|
||||||
|
<value>1 час назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneMinute" xml:space="preserve">
|
||||||
|
<value>1 минуту назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneMonth" xml:space="preserve">
|
||||||
|
<value>1 месяц назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneWeek" xml:space="preserve">
|
||||||
|
<value>1 неделю назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="oneYear" xml:space="preserve">
|
||||||
|
<value>1 год назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="sharing" xml:space="preserve">
|
||||||
|
<value>Поделиться</value>
|
||||||
|
</data>
|
||||||
|
<data name="weeks" xml:space="preserve">
|
||||||
|
<value>недель назад</value>
|
||||||
|
</data>
|
||||||
|
<data name="years" xml:space="preserve">
|
||||||
|
<value>лет назад</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="addTo.Label" xml:space="preserve">
|
||||||
|
<value>Добавить в</value>
|
||||||
|
</data>
|
||||||
|
<data name="openWeb.Label" xml:space="preserve">
|
||||||
|
<value>Открыть в браузере</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Обновить</value>
|
||||||
|
</data>
|
||||||
|
<data name="share.Label" xml:space="preserve">
|
||||||
|
<value>Поделиться</value>
|
||||||
|
</data>
|
||||||
|
<data name="videos" xml:space="preserve">
|
||||||
|
<value>видео</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,228 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="all.Content" xml:space="preserve">
|
||||||
|
<value>Все</value>
|
||||||
|
</data>
|
||||||
|
<data name="any.Content" xml:space="preserve">
|
||||||
|
<value>Любая</value>
|
||||||
|
</data>
|
||||||
|
<data name="anytime.Content" xml:space="preserve">
|
||||||
|
<value>Любое</value>
|
||||||
|
</data>
|
||||||
|
<data name="apply.Content" xml:space="preserve">
|
||||||
|
<value>Применить</value>
|
||||||
|
</data>
|
||||||
|
<data name="cc.Text" xml:space="preserve">
|
||||||
|
<value>Лицензия Creative Commons</value>
|
||||||
|
</data>
|
||||||
|
<data name="channel.Content" xml:space="preserve">
|
||||||
|
<value>Канал</value>
|
||||||
|
</data>
|
||||||
|
<data name="duration.Header" xml:space="preserve">
|
||||||
|
<value>Длительность</value>
|
||||||
|
</data>
|
||||||
|
<data name="features.Content" xml:space="preserve">
|
||||||
|
<value>Особенности</value>
|
||||||
|
</data>
|
||||||
|
<data name="featuresHeader.Header" xml:space="preserve">
|
||||||
|
<value>Особенности</value>
|
||||||
|
</data>
|
||||||
|
<data name="filters.Content" xml:space="preserve">
|
||||||
|
<value>Показать фильтры </value>
|
||||||
|
</data>
|
||||||
|
<data name="found" xml:space="preserve">
|
||||||
|
<value>Найдено</value>
|
||||||
|
</data>
|
||||||
|
<data name="header" xml:space="preserve">
|
||||||
|
<value>Результаты поиска по запросу</value>
|
||||||
|
</data>
|
||||||
|
<data name="hideFilters" xml:space="preserve">
|
||||||
|
<value>Скрыть фильтры </value>
|
||||||
|
</data>
|
||||||
|
<data name="items" xml:space="preserve">
|
||||||
|
<value>результатов</value>
|
||||||
|
</data>
|
||||||
|
<data name="lasthr.Content" xml:space="preserve">
|
||||||
|
<value>За последний час</value>
|
||||||
|
</data>
|
||||||
|
<data name="live.Text" xml:space="preserve">
|
||||||
|
<value>Прямой эфир</value>
|
||||||
|
</data>
|
||||||
|
<data name="long.Content" xml:space="preserve">
|
||||||
|
<value>Большая (> 20 минут)</value>
|
||||||
|
</data>
|
||||||
|
<data name="medium.Content" xml:space="preserve">
|
||||||
|
<value>Средняя</value>
|
||||||
|
</data>
|
||||||
|
<data name="month.Content" xml:space="preserve">
|
||||||
|
<value>За этот месяц</value>
|
||||||
|
</data>
|
||||||
|
<data name="openWeb.Label" xml:space="preserve">
|
||||||
|
<value>Открыть в браузере</value>
|
||||||
|
</data>
|
||||||
|
<data name="order.Header" xml:space="preserve">
|
||||||
|
<value>Сортировать по</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlist.Content" xml:space="preserve">
|
||||||
|
<value>Плейлист</value>
|
||||||
|
</data>
|
||||||
|
<data name="rating.Content" xml:space="preserve">
|
||||||
|
<value>Рейтингу</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Обновить</value>
|
||||||
|
</data>
|
||||||
|
<data name="relevance.Content" xml:space="preserve">
|
||||||
|
<value>Популярности</value>
|
||||||
|
</data>
|
||||||
|
<data name="short.Content" xml:space="preserve">
|
||||||
|
<value>Короткая (< 4 минут)</value>
|
||||||
|
</data>
|
||||||
|
<data name="subs.Text" xml:space="preserve">
|
||||||
|
<value>Субтитры</value>
|
||||||
|
</data>
|
||||||
|
<data name="title.Content" xml:space="preserve">
|
||||||
|
<value>Названию</value>
|
||||||
|
</data>
|
||||||
|
<data name="today.Content" xml:space="preserve">
|
||||||
|
<value>Сегодня</value>
|
||||||
|
</data>
|
||||||
|
<data name="type.Header" xml:space="preserve">
|
||||||
|
<value>Тип</value>
|
||||||
|
</data>
|
||||||
|
<data name="update.Content" xml:space="preserve">
|
||||||
|
<value>Дате публикации</value>
|
||||||
|
</data>
|
||||||
|
<data name="updateHeader.Header" xml:space="preserve">
|
||||||
|
<value>Дата публикации</value>
|
||||||
|
</data>
|
||||||
|
<data name="video.Content" xml:space="preserve">
|
||||||
|
<value>Видео</value>
|
||||||
|
</data>
|
||||||
|
<data name="views.Content" xml:space="preserve">
|
||||||
|
<value>Количеству просмотров</value>
|
||||||
|
</data>
|
||||||
|
<data name="week.Content" xml:space="preserve">
|
||||||
|
<value>За эту неделю</value>
|
||||||
|
</data>
|
||||||
|
<data name="year.Content" xml:space="preserve">
|
||||||
|
<value>За этот год</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="addTo.Label" xml:space="preserve">
|
||||||
|
<value>Добавить в</value>
|
||||||
|
</data>
|
||||||
|
<data name="audio" xml:space="preserve">
|
||||||
|
<value>Аудио дорожка</value>
|
||||||
|
</data>
|
||||||
|
<data name="audioOnly" xml:space="preserve">
|
||||||
|
<value>Аудио дорожка</value>
|
||||||
|
</data>
|
||||||
|
<data name="chat" xml:space="preserve">
|
||||||
|
<value>Чат</value>
|
||||||
|
</data>
|
||||||
|
<data name="comments.Header" xml:space="preserve">
|
||||||
|
<value>Комментарии</value>
|
||||||
|
</data>
|
||||||
|
<data name="desc" xml:space="preserve">
|
||||||
|
<value>Описание</value>
|
||||||
|
</data>
|
||||||
|
<data name="download.Label" xml:space="preserve">
|
||||||
|
<value>Скачать видео</value>
|
||||||
|
</data>
|
||||||
|
<data name="openWeb.Label" xml:space="preserve">
|
||||||
|
<value>Открыть в браузере</value>
|
||||||
|
</data>
|
||||||
|
<data name="playlist.Header" xml:space="preserve">
|
||||||
|
<value>Плейлист</value>
|
||||||
|
</data>
|
||||||
|
<data name="refresh.Label" xml:space="preserve">
|
||||||
|
<value>Обновить страницу</value>
|
||||||
|
</data>
|
||||||
|
<data name="related.Header" xml:space="preserve">
|
||||||
|
<value>Похожее</value>
|
||||||
|
</data>
|
||||||
|
<data name="share.Label" xml:space="preserve">
|
||||||
|
<value>Поделиться</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
Reference in New Issue
Block a user