diff --git a/FoxTube/Classes/Caption.cs b/FoxTube/Classes/Caption.cs index 14567bc..f971aa1 100644 --- a/FoxTube/Classes/Caption.cs +++ b/FoxTube/Classes/Caption.cs @@ -22,5 +22,12 @@ namespace FoxTube.Classes Duration = TimeSpan.FromMilliseconds(duration); Text = text; } + + public Caption(double startTime, double duration, string text) + { + Start = TimeSpan.FromSeconds(startTime); + Duration = TimeSpan.FromSeconds(duration); + Text = text; + } } } diff --git a/FoxTube/Controls/LiveCaptions.xaml.cs b/FoxTube/Controls/LiveCaptions.xaml.cs index 8bbd12b..2d21e8d 100644 --- a/FoxTube/Controls/LiveCaptions.xaml.cs +++ b/FoxTube/Controls/LiveCaptions.xaml.cs @@ -58,24 +58,27 @@ namespace FoxTube.Controls } } - public void Initialize(string source) + public void Initialize(string source, bool isAutoGenerated = false) { XmlDocument doc = new XmlDocument(); doc.Load(source); - foreach (XmlElement i in doc["timedtext"]["body"].ChildNodes) - captions.Add(new Caption(int.Parse(i.GetAttribute("t")), int.Parse(i.GetAttribute("d")), i.InnerText)); + if (!isAutoGenerated) + 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("", "").Replace("", "").Replace("", "").Replace("'", "'"))); - if(!isClosed) - captions.ForEach((x) => + captions.ForEach((x) => + { + if (Player.Position > x.Start && Player.Position < x.End) { - if(Player.Position > x.Start && Player.Position < x.End) - { - currentCaption = x; - text.Text = currentCaption.Text; - Visibility = Visibility.Visible; - } - }); + currentCaption = x; + text.Text = currentCaption.Text; + Visibility = Visibility.Visible; + } + }); timer.Start(); } diff --git a/FoxTube/Controls/VideoPlayer.xaml.cs b/FoxTube/Controls/VideoPlayer.xaml.cs index 7d50ab6..f003749 100644 --- a/FoxTube/Controls/VideoPlayer.xaml.cs +++ b/FoxTube/Controls/VideoPlayer.xaml.cs @@ -30,11 +30,13 @@ using Windows.ApplicationModel.Core; using Windows.UI; using Windows.Graphics.Display; using Windows.Media.Casting; +using MyToolkit.Multimedia; using YoutubeExplode.Models.MediaStreams; using YoutubeExplode; using YoutubeExplode.Models.ClosedCaptions; using System.Globalization; using FoxTube.Controls; +using Windows.System; // The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236 @@ -152,11 +154,13 @@ namespace FoxTube //Loading captions ccInfo = await client.GetVideoClosedCaptionTrackInfosAsync(item.Id); foreach (ClosedCaptionTrackInfo cc in ccInfo) + { subsLang.Items.Add(new ComboBoxItem() { - Content = string.Format("{1}{0}", 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 }); + } if(ccInfo.Count > 0) subsLang.SelectedIndex = 0; else @@ -393,8 +397,10 @@ namespace FoxTube { if (subsSwitch.IsOn) { - - captions.Initialize(ccInfo[subsLang.SelectedIndex].Url); + 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 captions.Close(); @@ -703,15 +709,15 @@ namespace FoxTube { switch(e.Key) { - case Windows.System.VirtualKey.Escape: - case Windows.System.VirtualKey.F11: + case VirtualKey.Escape: + case VirtualKey.F11: if (fullScreen) fullscreen_Click(this, null); break; - case Windows.System.VirtualKey.Space: + case VirtualKey.Space: play_Click(this, null); break; - case Windows.System.VirtualKey.Left: + case VirtualKey.Left: back10_Click(this, null); break; case Windows.System.VirtualKey.Right: @@ -722,8 +728,7 @@ namespace FoxTube private void subsLang_SelectionChanged(object sender, SelectionChangedEventArgs e) { - if (subsSwitch.IsOn) - captions.Initialize(ccInfo[subsLang.SelectedIndex].Url); + LoadTrack(); } } }