//Video playing. void TimerTick(object sender, EventArgs e) { if (_play) { slDurration.Value = mainVideo.Position.TotalSeconds; try { foreach (Panel item in stWords.Items) { item.Opacity = 0.4; foreach (Label val in item.Children) { val.FontWeight = FontWeights.Normal; } } SubTitle ind = _subs.Find(new Predicate <SubTitle>(i => i.TimeStart.TimeOfDay <= mainVideo.Position && i.TimeEnd.TimeOfDay >= mainVideo.Position)); if (ind != null) { Panel tmp = stWords.Items[ind.Num - 1] as Panel; tmp.Opacity = 1; foreach (Label val in tmp.Children) { val.FontWeight = FontWeights.Bold; } stWords.SelectedItem = tmp; if (_scroll) { stWords.ScrollIntoView(stWords.SelectedItem); } } if (_sub) { lSub.Text = ind != null ? ind.Phrase : ""; lSub.Visibility = ind != null && _fullScreen ? Visibility.Visible : Visibility.Collapsed; } slDurration.ToolTip = (mainVideo.Position.Hours < 10 ? "0" : "") + $"{mainVideo.Position.Hours}:" + (mainVideo.Position.Minutes < 10 ? "0" : "") + $"{mainVideo.Position.Minutes}:" + (mainVideo.Position.Seconds < 10 ? "0" : "") + $"{mainVideo.Position.Seconds}/" + (mainVideo.NaturalDuration.TimeSpan.Hours < 10 ? "0" : "") + $"{mainVideo.NaturalDuration.TimeSpan.Hours}:" + (mainVideo.NaturalDuration.TimeSpan.Minutes < 10 ? "0" : "") + $"{mainVideo.NaturalDuration.TimeSpan.Minutes}:" + (mainVideo.NaturalDuration.TimeSpan.Seconds < 10 ? "0" : "") + $"{mainVideo.NaturalDuration.TimeSpan.Seconds}"; } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
/// <summary> /// Load subtitles into listbox. /// </summary> /// <returns>FALSE - if fails.</returns> bool LoadVideo() { try { string subs = _proxy.GetItemProperty(videoId, ServerData.Video, PropertyData.SubPath); if (!Directory.Exists(@"Temp\Subtitles")) { Directory.CreateDirectory(@"Temp\Subtitles"); } byte[] res = _proxy.DownloadAsync(subs, FilesType.Subtitles).Result; subs = $@"Temp\Subtitles\{subs}"; if (res != null) { using (FileStream fs = File.OpenWrite(subs)) { Task.WaitAll(fs.WriteAsync(res, 0, res.Length)); fs.Dispose(); } } if (!File.Exists(subs)) { throw new ArgumentNullException("There are no subtitles for this video!"); } string str; using (FileStream fs = new FileStream(subs, FileMode.Open)) { using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { str = sr.ReadToEndAsync().Result; } } Thread thd = new Thread(new ThreadStart(() => { foreach (string item in str.Split(new string[] { "\n\r\n" }, StringSplitOptions.RemoveEmptyEntries)) { try { SubTitle sub = new SubTitle { Num = Convert.ToInt32(item.Split('\n')[0]) }; string time = item.Split('\n')[1]; for (int i = 2; i < item.Split('\n').Length; i++) { sub.Phrase += item.Split('\n')[i]; } sub.TimeStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(time.Split(':')[0]), Convert.ToInt32(time.Split(':')[1]), Convert.ToInt32(time.Split(':')[2].Split(',')[0]), Convert.ToInt32(time.Split(',')[1].Split(' ')[0])); sub.TimeEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(time.Split(new string[] { "> " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(':')[0]), Convert.ToInt32(time.Split(new string[] { "> " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(':')[1]), Convert.ToInt32(time.Split(new string[] { "> " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(':')[2].Split(',')[0]), Convert.ToInt32(time.Split(new string[] { "> " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(':')[2].Split(',')[1])); _subs.Add(sub); } catch (Exception ex) { MessageBox.Show(ex.Message); } } Dispatcher.Invoke(new Action(() => { foreach (SubTitle item in _subs) { WrapPanel tmp = new WrapPanel { Margin = new Thickness(2) }; foreach (string word in item.Phrase.Split(" .,\"\\/=+-/)*^:;<>?!@$%({}|&\n\r\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)) { Label lb = new Label { Content = word, Style = TryFindResource("lbSub") as Style }; lb.PreviewMouseDown += Lb_PreviewMouseDown; lb.MouseEnter += Lb_MouseEnter; tmp.Children.Add(lb); } tmp.Background = Brushes.White; tmp.MouseEnter += Label_MouseEnter; tmp.MouseLeave += Label_MouseLeave; tmp.MouseDown += Label_MouseDown; stWords.Items.Add(tmp); } })); })); thd.IsBackground = true; thd.Start(); } catch (ArgumentNullException ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); return(false); } catch (Exception ex) { MessageBox.Show(ex.Message); return(false); } return(true); }