public override void ProcessCommand() { logger.Info("Processing CommandRequest_MALDownloadStatusFromMAL"); try { if (string.IsNullOrEmpty(ServerSettings.MAL_Username) || string.IsNullOrEmpty(ServerSettings.MAL_Password)) return; // find the latest eps to update AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); myanimelist mal = MALHelper.GetMALAnimeList(); if (mal == null) return; if (mal.anime == null) return; CrossRef_AniDB_MALRepository repCrossRef = new CrossRef_AniDB_MALRepository(); AniDB_EpisodeRepository repAniEps = new AniDB_EpisodeRepository(); AnimeEpisodeRepository repEp = new AnimeEpisodeRepository(); // find the anidb user JMMUserRepository repUsers = new JMMUserRepository(); List<JMMUser> aniDBUsers = repUsers.GetAniDBUsers(); if (aniDBUsers.Count == 0) return; JMMUser user = aniDBUsers[0]; foreach (myanimelistAnime malAnime in mal.anime) { // look up the anime CrossRef_AniDB_MAL xref = repCrossRef.GetByMALID(malAnime.series_animedb_id); if (xref == null) continue; if (malAnime.series_animedb_id == 8107 || malAnime.series_animedb_id == 10737) { Console.Write(""); } // check if this anime has any other links List<CrossRef_AniDB_MAL> allXrefs = repCrossRef.GetByAnimeID(xref.AnimeID); if (allXrefs.Count == 0) continue; // find the range of watched episodes that this applies to int startEpNumber = xref.StartEpisodeNumber; int endEpNumber = GetUpperEpisodeLimit(allXrefs, xref); List<AniDB_Episode> aniEps = repAniEps.GetByAnimeID(xref.AnimeID); foreach (AniDB_Episode aniep in aniEps) { if (aniep.EpisodeType != xref.StartEpisodeType) continue; AnimeEpisode ep = repEp.GetByAniDBEpisodeID(aniep.EpisodeID); if (ep == null) continue; int adjustedWatchedEps = malAnime.my_watched_episodes + xref.StartEpisodeNumber - 1; int epNum = aniep.EpisodeNumber; if (epNum < startEpNumber || epNum > endEpNumber) continue; AnimeEpisode_User usrRec = ep.GetUserRecord(user.JMMUserID); if (epNum <= adjustedWatchedEps) { // update if the user doesn't have a record (means not watched) // or it is currently un-watched bool update = false; if (usrRec == null) update = true; else { if (!usrRec.WatchedDate.HasValue) update = true; } if (update) ep.ToggleWatchedStatus(true, true, DateTime.Now, user.JMMUserID, false); } else { bool update = false; if (usrRec != null) { if (usrRec.WatchedDate.HasValue) update = true; } if (update) ep.ToggleWatchedStatus(false, true, DateTime.Now, user.JMMUserID, false); } } } } catch (Exception ex) { logger.Error("Error processing CommandRequest_MALDownloadStatusFromMAL: {0}", ex.ToString()); return; } }
public string LinkAniDBMAL(int animeID, int malID, string malTitle, int epType, int epNumber) { try { CrossRef_AniDB_MALRepository repCrossRef = new CrossRef_AniDB_MALRepository(); CrossRef_AniDB_MAL xrefTemp = repCrossRef.GetByMALID(malID); if (xrefTemp != null) return string.Format("Not using MAL link as this MAL ID ({0}) is already in use by {1}", malID, xrefTemp.AnimeID); xrefTemp = repCrossRef.GetByAnimeConstraint(animeID, epType, epNumber); if (xrefTemp != null) return string.Format("Not using MAL link as this Anime ID ({0}) is already in use by {1}/{2}/{3} ({4})", animeID, xrefTemp.MALID, epType, epNumber, xrefTemp.MALTitle); MALHelper.LinkAniDBMAL(animeID, malID, malTitle, epType, epNumber, false); return ""; } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return ex.Message; } }
public string LinkAniDBMAL(int animeID, int malID, string malTitle, int epType, int epNumber) { try { CrossRef_AniDB_MALRepository repCrossRef = new CrossRef_AniDB_MALRepository(); CrossRef_AniDB_MAL xrefTemp = repCrossRef.GetByMALID(malID); if (xrefTemp != null) { string animeName = ""; try { AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); AniDB_Anime anime = repAnime.GetByAnimeID(xrefTemp.AnimeID); if (anime != null) animeName = anime.MainTitle; } catch { } return string.Format("Not using MAL link as this MAL ID ({0}) is already in use by {1} ({2})", malID, xrefTemp.AnimeID, animeName); } xrefTemp = repCrossRef.GetByAnimeConstraint(animeID, epType, epNumber); if (xrefTemp != null) { // delete the link first because we are over-writing it repCrossRef.Delete(xrefTemp.CrossRef_AniDB_MALID); //return string.Format("Not using MAL link as this Anime ID ({0}) is already in use by {1}/{2}/{3} ({4})", animeID, xrefTemp.MALID, epType, epNumber, xrefTemp.MALTitle); } MALHelper.LinkAniDBMAL(animeID, malID, malTitle, epType, epNumber, false); return ""; } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return ex.Message; } }
public static void LinkAniDBMAL(int animeID, int malID, string malTitle, int epType, int epNumber, bool fromWebCache) { CrossRef_AniDB_MALRepository repCrossRef = new CrossRef_AniDB_MALRepository(); CrossRef_AniDB_MAL xrefTemp = repCrossRef.GetByMALID(malID); if (xrefTemp != null) { string msg = string.Format("Not using MAL link as this MAL ID ({0}) is already in use by {1}", malID, xrefTemp.AnimeID); logger.Warn(msg); return; } CrossRef_AniDB_MAL xref = new CrossRef_AniDB_MAL(); xref.AnimeID = animeID; xref.MALID = malID; xref.MALTitle = malTitle; xref.StartEpisodeType = epType; xref.StartEpisodeNumber = epNumber; if (fromWebCache) xref.CrossRefSource = (int)CrossRefSource.WebCache; else xref.CrossRefSource = (int)CrossRefSource.User; repCrossRef.Save(xref); StatsCache.Instance.UpdateUsingAnime(animeID); logger.Trace("Changed MAL association: {0}", animeID); CommandRequest_MALUpdatedWatchedStatus cmd = new CommandRequest_MALUpdatedWatchedStatus(animeID); cmd.Save(); CommandRequest_WebCacheSendXRefAniDBMAL req = new CommandRequest_WebCacheSendXRefAniDBMAL(xref.CrossRef_AniDB_MALID); req.Save(); }