private void SetupDownloadedSubtitleAndIMDbInfo(Uri uri, string resultSub, IMDb imdb, object param2) { OnlineSubtitleChoices.Clear(); if (HasVideo == false) { return; } IMDb = imdb; if (param2 is List <SubtitleMatch> ) { foreach (var st in (List <SubtitleMatch>)param2) { OnlineSubtitleChoices.Add(st); } Main.ShowOsdMessage(string.Format("{0} subtitles found.", OnlineSubtitleChoices.Count)); } FillSubs(uri); if (SubtitleStreams.Any(s => s.Path.ToLowerInvariant() == resultSub.ToLowerInvariant()) == false) { SubtitleStreams.Add(new SubtitleItem(SubtitleItem.SubtitleType.File, SubtitleItem.SubtitleSubType.Srt, resultSub, "Subtitle")); } var loadSub = (DownloadedSubtitle = SubtitleStreams.FirstOrDefault(s => s.Path.ToLowerInvariant() == resultSub.ToLowerInvariant())); ServiceLocator.GetService <IMainView>().DelayedInvoke(() => { SelectedSubtitle = loadSub; }, 200); }
public void LoadSelectedOnlineSubtitle() { ShowOnlineSubtitles = false; BackgroundWorker b = new BackgroundWorker(); b.DoWork += (sender, args) => { DateTime start = DateTime.Now; Monitor.Enter(_subtitleSearchLocker); try { args.Result = SubtitleUtil.DownloadSubtitle(SelectedOnlineSubtitle, Source.LocalPath); } catch (WebException) { Main.ShowOsdMessage("Failed to download subtitle: Internet connection unavailable"); } catch (Exception) { Main.ShowOsdMessage("Failed to download subtitle from '" + SelectedOnlineSubtitle.Service + "'"); } finally { Monitor.Exit(_subtitleSearchLocker); if (DateTime.Now - start > TimeSpan.FromSeconds(15)) { args.Cancel = true; } } }; b.RunWorkerCompleted += (sender, args) => { if (!args.Cancelled && args.Error == null && args.Result is string && Source != null) { FillSubs(Source); string resultSub = (string)args.Result; if (SubtitleStreams.Any(s => s.Path.ToLowerInvariant() == resultSub.ToLowerInvariant()) == false) { SubtitleStreams.Add(new SubtitleItem(SubtitleItem.SubtitleType.File, SubtitleItem.SubtitleSubType.Srt, resultSub, "Subtitle")); } var loadSub = (DownloadedSubtitle = SubtitleStreams.FirstOrDefault(s => s.Path.ToLowerInvariant() == (resultSub).ToLowerInvariant())); ServiceLocator.GetService <IMainView>().DelayedInvoke(() => { SelectedSubtitle = loadSub; }, 200); } }; b.RunWorkerAsync(); }