public string RemoveLinkAniDBTvDBForAnime(int animeID) { try { SVR_AnimeSeries ser = Repo.Instance.AnimeSeries.GetByAnimeID(animeID); if (ser == null) { return("Could not find Series for Anime!"); } // check if there are default images used associated Repo.Instance.AniDB_Anime_DefaultImage.FindAndDelete(() => Repo.Instance.AniDB_Anime_DefaultImage.GetByAnimeID(animeID).Where(a => a.ImageParentType == (int)ImageEntityType.TvDB_Banner || a.ImageParentType == (int)ImageEntityType.TvDB_Cover || a.ImageParentType == (int)ImageEntityType.TvDB_FanArt).ToList()); TvDBApiHelper.RemoveAllAniDBTvDBLinks(animeID, true); return(string.Empty); } catch (Exception ex) { logger.Error(ex, ex.ToString()); return(ex.Message); } }
public override void Run(IProgress <ICommand> progress = null) { logger.Info("Processing CommandRequest_TvDBSearchAnime: {0}", AnimeID); try { ReportInit(progress); // first check if the user wants to use the web cache if (ServerSettings.Instance.WebCache.TvDB_Get) { try { List <WebCache_CrossRef_AniDB_Provider> resultsCache = WebCacheAPI.Instance.GetCrossRef_AniDB_Provider(AnimeID, CrossRefType.TvDB); ReportUpdate(progress, 30); if (resultsCache != null && resultsCache.Count > 0) { List <WebCache_CrossRef_AniDB_Provider> best = resultsCache.BestProvider(); if (best.Count > 0) { TvDBApiHelper.RemoveAllAniDBTvDBLinks(AnimeID, false); ReportUpdate(progress, 70); foreach (WebCache_CrossRef_AniDB_Provider xref in best) { TvDBApiHelper.LinkAniDBTvDBFromWebCache(xref); } SVR_AniDB_Anime.UpdateStatsByAnimeID(AnimeID); logger.Trace("Changed trakt association: {0}", AnimeID); ReportFinish(progress); return; } } } catch (Exception ex) { logger.Error(ex, ex.ToString()); } } if (!ServerSettings.Instance.TvDB.AutoLink) { ReportFinish(progress); return; } // try to pull a link from a prequel/sequel var relations = Repo.Instance.AniDB_Anime_Relation.GetFullLinearRelationTree(AnimeID); string tvDBID = relations.SelectMany(a => Repo.Instance.CrossRef_AniDB_Provider.GetByAnimeIDAndType(a, CrossRefType.TvDB)) .FirstOrDefault(a => a != null)?.CrossRefID; ReportUpdate(progress, 25); if (tvDBID != null) { TvDBApiHelper.LinkAniDBTvDB(AnimeID, int.Parse(tvDBID), true); ReportFinish(progress); return; } ReportUpdate(progress, 50); // search TvDB SVR_AniDB_Anime anime = Repo.Instance.AniDB_Anime.GetByAnimeID(AnimeID); if (anime == null) { ReportFinish(progress); return; } var searchCriteria = anime.MainTitle; // if not wanting to use web cache, or no match found on the web cache go to TvDB directly List <TVDB_Series_Search_Response> results = TvDBApiHelper.SearchSeries(searchCriteria); logger.Trace("Found {0} tvdb results for {1} on TheTvDB", results.Count, searchCriteria); if (ProcessSearchResults(results, searchCriteria)) { ReportFinish(progress); return; } if (results.Count != 0) { ReportFinish(progress); return; } bool foundResult = false; ReportUpdate(progress, 75); foreach (AniDB_Anime_Title title in anime.GetTitles()) { if (!title.TitleType.Equals(Shoko.Models.Constants.AnimeTitleType.Official, StringComparison.InvariantCultureIgnoreCase)) { continue; } if (!title.Language.Equals(Shoko.Models.Constants.AniDBLanguageType.English, StringComparison.InvariantCultureIgnoreCase) && !title.Language.Equals(Shoko.Models.Constants.AniDBLanguageType.Romaji, StringComparison.InvariantCultureIgnoreCase)) { continue; } if (searchCriteria.Equals(title.Title, StringComparison.InvariantCultureIgnoreCase)) { continue; } searchCriteria = title.Title; results = TvDBApiHelper.SearchSeries(searchCriteria); if (results.Count > 0) { foundResult = true; } logger.Trace("Found {0} tvdb results for search on {1}", results.Count, title.Title); if (ProcessSearchResults(results, title.Title)) { ReportFinish(progress); return; } } if (!foundResult) { logger.Warn("Unable to find a matching TvDB series for {0}", anime.MainTitle); } ReportFinish(progress); } catch (Exception ex) { ReportError(progress, $"Error processing CommandRequest_TvDBSearchAnime: {AnimeID} - {ex}", ex); } }