private void CommandBinding_RefreshSeries(object sender, ExecutedRoutedEventArgs e) { object obj = e.Parameter; if (obj == null) { return; } if (obj.GetType() == typeof(TraktSeriesData)) { TraktSeriesData traktSer = obj as TraktSeriesData; // Refresh Trakt links List <VM_CrossRef_AniDB_TraktV2> links = VM_ShokoServer.Instance.ShokoServices.GetTraktCrossRefV2(traktSer.AnimeID).CastList <VM_CrossRef_AniDB_TraktV2>(); traktSer.SetUserTraktLinks(links); traktSer.CompareTraktLinks(); } }
void dataWorker_DoWork(object sender, DoWorkEventArgs e) { TraktWorkerJob job = e.Argument as TraktWorkerJob; BackgroundWorker worker = sender as BackgroundWorker; // Get all the seies data List <VM_AnimeSeries_User> allSeries = VM_ShokoServer.Instance.ShokoServices.GetAllSeries(VM_ShokoServer.Instance.CurrentUser.JMMUserID).CastList <VM_AnimeSeries_User>().OrderBy(a => a.SeriesName).ToList(); if (stopWorker) { return; } Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action) delegate() { WorkerStatus = Shoko.Commons.Properties.Resources.Community_TraktRef; }); // get all the trakt links List <VM_CrossRef_AniDB_TraktV2> allTraktCrossRefs = VM_ShokoServer.Instance.ShokoServices.GetAllTraktCrossRefs().CastList <VM_CrossRef_AniDB_TraktV2>(); if (stopWorker) { return; } int counter = 0; int problemCount = 0; foreach (VM_AnimeSeries_User ser in allSeries) { counter++; //Thread.Sleep(200); dataWorker.ReportProgress(0, new TraktWorkerStatusContainer(Shoko.Commons.Properties.Resources.Community_TraktPopulating, allSeries.Count, counter, ser.SeriesName)); TraktSeriesData trakt = new TraktSeriesData(ser); // populate the Trakt data trakt.SetUserTraktLinks(allTraktCrossRefs.Where(x => x.AnimeID == ser.AniDB_ID)); Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action) delegate() { job.TraktData.Add(trakt); }); if (stopWorker) { return; } } if (stopWorker) { return; } int curFile = 0; foreach (TraktSeriesData data in job.TraktData) { if (stopWorker) { return; } //Thread.Sleep(250); if (problemCount == job.MaxProblems) { return; } curFile++; dataWorker.ReportProgress(0, new TraktWorkerStatusContainer(Shoko.Commons.Properties.Resources.Community_TraktSeriesCheck, job.TraktData.Count, curFile, data.SeriesName)); if (stopWorker) { return; } if (job.CheckTraktLinks) { data.Status = Shoko.Commons.Properties.Resources.Community_TraktDataCheck; bool valid = true; if (data.HasUserTraktLink) { foreach (VM_CrossRef_AniDB_TraktV2 xref in data.UserTraktLinks) { bool thisValid = VM_ShokoServer.Instance.ShokoServices.CheckTraktLinkValidity(xref.TraktID, job.FixTraktLinks); if (!thisValid) { valid = false; problemCount++; } } data.IsTraktLinkValid = valid; } } if (stopWorker) { return; } if (job.CheckCommunityLinks) { data.Status = Shoko.Commons.Properties.Resources.Community_TraktCompare; List <Azure_CrossRef_AniDB_Trakt> xrefs = VM_ShokoServer.Instance.ShokoServices.GetTraktCrossRefWebCache(data.AnimeID, false); List <VM_CrossRef_AniDB_TraktV2> commTraktLinks = new List <VM_CrossRef_AniDB_TraktV2>(); foreach (Azure_CrossRef_AniDB_Trakt xref in xrefs) { commTraktLinks.Add((VM_CrossRef_AniDB_TraktV2)xref); } data.SetCommTraktLinks(commTraktLinks); if (data.HasUserTraktLink) { data.CompareTraktLinks(); if (!data.UserTraktLinkMatch && data.HasCommTraktLink) { problemCount++; } } else { } } } }