public static Azure_CrossRef_AniDB_MAL Get_CrossRefAniDBMAL(int animeID) { if (!ServerSettings.WebCache_MAL_Get) { return(null); } string username = ServerSettings.AniDB_Username; if (ServerSettings.WebCache_Anonymous) { username = Constants.AnonWebCacheUsername; } string uri = string.Format(@"http://{0}/api/CrossRef_AniDB_MAL/{1}?p={2}", azureHostBaseAddress, animeID, username); string msg = string.Format("Getting AniDB/MAL Cross Ref From Cache: {0}", animeID); DateTime start = DateTime.Now; ShokoService.LogToSystem(Constants.DBLogType.APIAzureHTTP, msg); string json = GetDataJson(uri); TimeSpan ts = DateTime.Now - start; msg = string.Format("Got AniDB/MAL Cross Ref From Cache: {0} - {1}", animeID, ts.TotalMilliseconds); ShokoService.LogToSystem(Constants.DBLogType.APIAzureHTTP, msg); Azure_CrossRef_AniDB_MAL xref = JSONHelper.Deserialize <Azure_CrossRef_AniDB_MAL>(json); xref.Self = string.Format(CultureInfo.CurrentCulture, "api/crossRef_anidb_mal/{0}", xref.CrossRef_AniDB_MALID); return(xref); }
public override void ProcessCommand() { logger.Info("Processing CommandRequest_MALSearchAnime: {0}", AnimeID); try { // first check if the user wants to use the web cache if (ServerSettings.WebCache_MAL_Get) { try { Azure_CrossRef_AniDB_MAL crossRef = AzureWebAPI.Get_CrossRefAniDBMAL(AnimeID); if (crossRef != null) { logger.Trace("Found MAL match on web cache for {0} - id = {1} ({2}/{3})", AnimeID, crossRef.MALID, crossRef.StartEpisodeType, crossRef.StartEpisodeNumber); MALHelper.LinkAniDBMAL(AnimeID, crossRef.MALID, crossRef.MALTitle, crossRef.StartEpisodeType, crossRef.StartEpisodeNumber, true); return; } } catch (Exception) { } } if (!ServerSettings.MAL_AutoLink) { return; } string searchCriteria = ""; SVR_AniDB_Anime anime = RepoFactory.AniDB_Anime.GetByAnimeID(AnimeID); if (anime == null) { return; } searchCriteria = anime.MainTitle; // if not wanting to use web cache, or no match found on the web cache go to TvDB directly anime malResults = MALHelper.SearchAnimesByTitle(searchCriteria); if (malResults.entry.Length == 1) { logger.Trace("Using MAL search result for search on {0} : {1} ({2})", searchCriteria, malResults.entry[0].id, malResults.entry[0].title); MALHelper.LinkAniDBMAL(AnimeID, malResults.entry[0].id, malResults.entry[0].title, (int)enEpisodeType.Episode, 1, false); } else if (malResults.entry.Length == 0) { logger.Trace("ZERO MAL search result results for: {0}", searchCriteria); } else { // if the title's match exactly and they have the same amount of episodes, we will use it foreach (animeEntry res in malResults.entry) { if (res.title.Equals(anime.MainTitle, StringComparison.InvariantCultureIgnoreCase) && res.episodes == anime.EpisodeCountNormal) { logger.Trace("Using MAL search result for search on {0} : {1} ({2})", searchCriteria, res.id, res.title); MALHelper.LinkAniDBMAL(AnimeID, res.id, res.title, (int)enEpisodeType.Episode, 1, false); } } logger.Trace("Too many MAL search result results for, skipping: {0}", searchCriteria); } } catch (Exception ex) { logger.Error("Error processing CommandRequest_MALSearchAnime: {0} - {1}", AnimeID, ex.ToString()); return; } }