From 7f4eaa0c7a1c798e07e3847ee285fce7bd5f3a1e Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Mon, 31 Dec 2018 00:52:16 +0300 Subject: [PATCH] Regions and languagaes improved. Video cards duration display fixed. Added settings updating system Related Work Items: #236 --- FoxTube/Classes/Methods.cs | 21 +++++++++ FoxTube/Classes/SettingsStorage.cs | 36 +++++++++++---- FoxTube/Controls/VideoCard.xaml.cs | 5 +-- FoxTube/Pages/Home.xaml.cs | 6 +-- FoxTube/Pages/Search.xaml.cs | 4 +- FoxTube/Pages/SettingsPages/General.xaml | 1 + FoxTube/Pages/SettingsPages/General.xaml.cs | 50 ++++++++++++++++----- FoxTube/Pages/VideoPage.xaml.cs | 4 +- 8 files changed, 95 insertions(+), 32 deletions(-) diff --git a/FoxTube/Classes/Methods.cs b/FoxTube/Classes/Methods.cs index feae342..54c2a08 100644 --- a/FoxTube/Classes/Methods.cs +++ b/FoxTube/Classes/Methods.cs @@ -7,6 +7,7 @@ using System.IO; using System.Linq; using System.Text.RegularExpressions; using System.Web; +using System.Xml; using Windows.ApplicationModel.Core; using Windows.ApplicationModel.DataTransfer; using Windows.Storage; @@ -68,6 +69,26 @@ namespace FoxTube return arr[arr.Length - 1]; } + public static TimeSpan GetDuration(this string str) + { + try + { + return XmlConvert.ToTimeSpan(str); + } + catch (FormatException) + { + TimeSpan time = XmlConvert.ToTimeSpan("PT" + str.Split('T')[1]); + TimeSpan date = TimeSpan.FromDays(int.Parse(str.Split('W')[0].Replace("P", "")) * 7); + date.Add(time); + + return date; + } + catch + { + return TimeSpan.FromMilliseconds(0); + } + } + public static string GetAgo(DateTime dateTime) { TimeSpan span = DateTime.Now - dateTime; diff --git a/FoxTube/Classes/SettingsStorage.cs b/FoxTube/Classes/SettingsStorage.cs index 675b03f..1c7a6a8 100644 --- a/FoxTube/Classes/SettingsStorage.cs +++ b/FoxTube/Classes/SettingsStorage.cs @@ -86,7 +86,7 @@ namespace FoxTube SaveData(); } } - public static string Region + public static string RelevanceLanguage { get { return (string)settings[8]; } set @@ -95,17 +95,16 @@ namespace FoxTube SaveData(); } } - public static int SafeSearch + public static string Region { - get { return Convert.ToInt32(settings[9]); } + get { return (string)settings[9]; } set { settings[9] = value; SaveData(); } } - - public static int Theme + public static int SafeSearch { get { return Convert.ToInt32(settings[10]); } set @@ -114,15 +113,25 @@ namespace FoxTube SaveData(); } } - public static bool HasAccount + + public static int Theme { - get { return (bool)settings[11]; } + get { return Convert.ToInt32(settings[11]); } set { settings[11] = value; SaveData(); } } + public static bool HasAccount + { + get { return (bool)settings[12]; } + set + { + settings[12] = value; + SaveData(); + } + } public static string Version { @@ -175,7 +184,8 @@ namespace FoxTube 100, (new[] { "ua", "ru", "by", "kz", "kg", "md", "lv", "ee" }).Contains(CultureInfo.InstalledUICulture.TwoLetterISOLanguageName) ? "ru-RU" : "en-US", - CultureInfo.CurrentCulture.Name, + (new[] { "ua", "ru", "by", "kz", "kg", "md", "lv", "ee" }).Contains(CultureInfo.InstalledUICulture.TwoLetterISOLanguageName) ? "ru" : "en", + (new[] { "ua", "ru", "by", "kz", "kg", "md", "lv", "ee" }).Contains(CultureInfo.InstalledUICulture.TwoLetterISOLanguageName) ? "ru" : "US", 0, 2, @@ -186,7 +196,15 @@ namespace FoxTube { try { - settings = JsonConvert.DeserializeObject(storage.Values["settings"] as string); + object[] saved = JsonConvert.DeserializeObject(storage.Values["settings"] as string); + if (settings.Length > saved.Length) + { + for (int i = 0; i < saved.Length; i++) + settings[i] = saved[i]; + + SaveData(); + } + else settings = saved; } catch (ArgumentNullException) { } } diff --git a/FoxTube/Controls/VideoCard.xaml.cs b/FoxTube/Controls/VideoCard.xaml.cs index 092c312..27cb2e2 100644 --- a/FoxTube/Controls/VideoCard.xaml.cs +++ b/FoxTube/Controls/VideoCard.xaml.cs @@ -65,10 +65,7 @@ namespace FoxTube.Controls else { views.Text = $"{item.Statistics.ViewCount:0,0} views"; - string dur = string.Empty; - try { XmlConvert.ToTimeSpan(item.ContentDetails.Duration); } - catch { } - info.Text = $"{dur} | {Methods.GetAgo(item.Snippet.PublishedAt.Value)}"; + info.Text = $"{item.ContentDetails.Duration.GetDuration()} | {Methods.GetAgo(item.Snippet.PublishedAt.Value)}"; embed = false; } diff --git a/FoxTube/Pages/Home.xaml.cs b/FoxTube/Pages/Home.xaml.cs index 42574ae..4da57d8 100644 --- a/FoxTube/Pages/Home.xaml.cs +++ b/FoxTube/Pages/Home.xaml.cs @@ -25,12 +25,10 @@ namespace FoxTube string trendToken; Dictionary subsTokens = new Dictionary(); - string reg; public Home() { InitializeComponent(); - reg = CultureInfo.GetCultures(CultureTypes.AllCultures).Find(i => i.IetfLanguageTag == SettingsStorage.Region).IetfLanguageTag.Remove(0, 3); trendGrid = ((trending.Content as ScrollViewer).Content as StackPanel).Children[0] as VideoGrid; trendMore = ((trending.Content as ScrollViewer).Content as StackPanel).Children[1] as ShowMore; @@ -54,7 +52,7 @@ namespace FoxTube request.PageToken = trendToken; request.Chart = VideosResource.ListRequest.ChartEnum.MostPopular; - request.RegionCode = reg; + request.RegionCode = SettingsStorage.Region; VideoListResponse response = await request.ExecuteAsync(); if (!string.IsNullOrWhiteSpace(response.NextPageToken)) @@ -108,7 +106,7 @@ namespace FoxTube request.MaxResults = 48; request.Chart = VideosResource.ListRequest.ChartEnum.MostPopular; - request.RegionCode = reg; + request.RegionCode = SettingsStorage.Region; VideoListResponse response = await request.ExecuteAsync(); if (!string.IsNullOrWhiteSpace(response.NextPageToken)) diff --git a/FoxTube/Pages/Search.xaml.cs b/FoxTube/Pages/Search.xaml.cs index 32842b2..1fa0e11 100644 --- a/FoxTube/Pages/Search.xaml.cs +++ b/FoxTube/Pages/Search.xaml.cs @@ -97,8 +97,8 @@ namespace FoxTube request.Q = arg.Term; request.SafeSearch = (SearchResource.ListRequest.SafeSearchEnum)(int)settings.Values["safeSearch"]; - request.RegionCode = CultureInfo.GetCultures(CultureTypes.AllCultures).Find(i => i.IetfLanguageTag == SettingsStorage.Region).IetfLanguageTag.Remove(0, 3); - request.RelevanceLanguage = CultureInfo.GetCultures(CultureTypes.AllCultures).Find(i => i.IetfLanguageTag == SettingsStorage.Region).TwoLetterISOLanguageName; + request.RegionCode = SettingsStorage.Region; + request.RelevanceLanguage = SettingsStorage.RelevanceLanguage; request.MaxResults = 48; try diff --git a/FoxTube/Pages/SettingsPages/General.xaml b/FoxTube/Pages/SettingsPages/General.xaml index 1f9d57f..4955e99 100644 --- a/FoxTube/Pages/SettingsPages/General.xaml +++ b/FoxTube/Pages/SettingsPages/General.xaml @@ -19,6 +19,7 @@