public static List <Raw_AniDB_Episode> ProcessEpisodes(XmlDocument docAnime, int animeID) { List <Raw_AniDB_Episode> eps = new List <Raw_AniDB_Episode>(); XmlNodeList episodeItems = docAnime?["anime"]?["episodes"]?.GetElementsByTagName("episode"); if (episodeItems == null) { return(eps); } foreach (XmlNode node in episodeItems) { try { Raw_AniDB_Episode ep = new Raw_AniDB_Episode(); if (!ep.ProcessEpisodeSource(node, animeID)) { logger.Error($"AniDB Episode raw data had invalid return data:\n {node}"); continue; } eps.Add(ep); } catch (Exception exc) { logger.Error(exc, $"Error in ProcessEpisodes: {exc}"); } } return(eps); }
public override void ProcessCommand() { logger.Info("Get AniDB episode info: {0}", EpisodeID); try { // we don't use this command to update episode info // we actually use it to update the cross ref info instead // and we only use it for the "Other Episodes" section of the FILE command // because that field doesn't tell you what anime it belongs to CrossRef_File_EpisodeRepository repCrossRefs = new CrossRef_File_EpisodeRepository(); List <CrossRef_File_Episode> xrefs = repCrossRefs.GetByEpisodeID(EpisodeID); if (xrefs.Count == 0) { return; } Raw_AniDB_Episode epInfo = JMMService.AnidbProcessor.GetEpisodeInfo(EpisodeID); if (epInfo != null) { AnimeSeriesRepository repSeries = new AnimeSeriesRepository(); //Change, AniDB_File do not create Series Episodes does. foreach (CrossRef_File_Episode xref in xrefs) { int oldAnimeID = xref.AnimeID; xref.AnimeID = epInfo.AnimeID; repCrossRefs.Save(xref); AnimeSeries ser = repSeries.GetByAnimeID(oldAnimeID); if (ser != null) { ser.QueueUpdateStats(); } //StatsCache.Instance.UpdateUsingAnime(oldAnimeID); ser = repSeries.GetByAnimeID(epInfo.AnimeID); if (ser != null) { ser.QueueUpdateStats(); } //StatsCache.Instance.UpdateUsingAnime(epInfo.AnimeID); } } } catch (Exception ex) { logger.Error("Error processing CommandRequest_GetEpisode: {0} - {1}", EpisodeID, ex.ToString()); return; } }
public virtual enHelperActivityType Process(ref Socket soUDP, ref IPEndPoint remoteIpEndPoint, string sessionID, Encoding enc) { ProcessCommand(ref soUDP, ref remoteIpEndPoint, sessionID, enc); // handle 555 BANNED and 598 - UNKNOWN COMMAND if (ResponseCode == 598) { return(enHelperActivityType.UnknownCommand_598); } if (ResponseCode == 555) { return(enHelperActivityType.Banned_555); } if (errorOccurred) { return(enHelperActivityType.NoSuchEpisode); } //BaseConfig.MyAnimeLog.Write("AniDBCommand_GetEpisodeInfo.Process: Response: {0}", socketResponse); // Process Response string sMsgType = socketResponse.Substring(0, 3); switch (sMsgType) { case "240": { // 240 EPISODE INFO // the first 11 characters should be "240 EPISODE" // the rest of the information should be the data list episodeInfo = new Raw_AniDB_Episode(socketResponse, enEpisodeSourceType.Episode); return(enHelperActivityType.GotEpisodeInfo); // Response: 240 EPISODE 99297|6267|25|539|5|01|The Girl Returns|Shoujo Kikan|????|1238976000 } case "340": { return(enHelperActivityType.NoSuchEpisode); } case "501": { return(enHelperActivityType.LoginRequired); } } return(enHelperActivityType.NoSuchEpisode); }
public static void Populate(this AniDB_Episode episode, Raw_AniDB_Episode epInfo) { episode.AirDate = epInfo.AirDate; episode.AnimeID = epInfo.AnimeID; episode.DateTimeUpdated = DateTime.Now; episode.EpisodeID = epInfo.EpisodeID; episode.EpisodeNumber = epInfo.EpisodeNumber; episode.EpisodeType = epInfo.EpisodeType; episode.LengthSeconds = epInfo.LengthSeconds; episode.Rating = epInfo.Rating.ToString(CultureInfo.InvariantCulture); episode.Votes = epInfo.Votes.ToString(CultureInfo.InvariantCulture); episode.Description = epInfo.Description ?? string.Empty; }
public void Populate(Raw_AniDB_Episode epInfo) { this.AirDate = epInfo.AirDate; this.AnimeID = epInfo.AnimeID; this.DateTimeUpdated = DateTime.Now; this.EnglishName = epInfo.EnglishName; this.EpisodeID = epInfo.EpisodeID; this.EpisodeNumber = epInfo.EpisodeNumber; this.EpisodeType = epInfo.EpisodeType; this.LengthSeconds = epInfo.LengthSeconds; this.Rating = epInfo.Rating.ToString(); this.RomajiName = epInfo.RomajiName; this.Votes = epInfo.Votes.ToString(); }
public static void Populate(this AniDB_Episode episode, Raw_AniDB_Episode epInfo) { episode.AirDate = epInfo.AirDate; episode.AnimeID = epInfo.AnimeID; episode.DateTimeUpdated = DateTime.Now; episode.EnglishName = epInfo.EnglishName; episode.EpisodeID = epInfo.EpisodeID; episode.EpisodeNumber = epInfo.EpisodeNumber; episode.EpisodeType = epInfo.EpisodeType; episode.LengthSeconds = epInfo.LengthSeconds; episode.Rating = epInfo.Rating.ToString(); episode.RomajiName = epInfo.RomajiName; episode.Votes = epInfo.Votes.ToString(); }
public virtual enHelperActivityType Process(ref Socket soUDP, ref IPEndPoint remoteIpEndPoint, string sessionID, Encoding enc) { ProcessCommand(ref soUDP, ref remoteIpEndPoint, sessionID, enc); // handle 555 BANNED and 598 - UNKNOWN COMMAND if (ResponseCode == 598) return enHelperActivityType.UnknownCommand_598; if (ResponseCode == 555) return enHelperActivityType.Banned_555; if (errorOccurred) return enHelperActivityType.NoSuchEpisode; //BaseConfig.MyAnimeLog.Write("AniDBCommand_GetEpisodeInfo.Process: Response: {0}", socketResponse); // Process Response string sMsgType = socketResponse.Substring(0, 3); switch (sMsgType) { case "240": { // 240 EPISODE INFO // the first 11 characters should be "240 EPISODE" // the rest of the information should be the data list episodeInfo = new Raw_AniDB_Episode(socketResponse, enEpisodeSourceType.Episode); return enHelperActivityType.GotEpisodeInfo; // Response: 240 EPISODE 99297|6267|25|539|5|01|The Girl Returns|Shoujo Kikan|????|1238976000 } case "340": { return enHelperActivityType.NoSuchEpisode; } case "501": { return enHelperActivityType.LoginRequired; } } return enHelperActivityType.NoSuchEpisode; }