Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
 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;
 }
Ejemplo n.º 5
0
 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();
 }
Ejemplo n.º 6
0
 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;
        }