示例#1
0
        public GroupStatusCollection GetReleaseGroupStatusUDP(int animeID)
        {
            if (!Login())
            {
                return(null);
            }

            enHelperActivityType        ev     = enHelperActivityType.NoSuchCreator;
            AniDBCommand_GetGroupStatus getCmd = null;

            lock (lockAniDBConnections)
            {
                Pause();

                getCmd = new AniDBCommand_GetGroupStatus();
                getCmd.Init(animeID);
                SetWaitingOnResponse(true);
                ev = getCmd.Process(ref soUdp, ref remoteIpEndPoint, curSessionID, new UnicodeEncoding(true, false));
                SetWaitingOnResponse(false);
            }

            if (ev == enHelperActivityType.GotGroupStatus && getCmd.GrpStatusCollection != null)
            {
                // delete existing records
                AniDB_GroupStatusRepository repGrpStat = new AniDB_GroupStatusRepository();
                AniDB_AnimeRepository       repAnime   = new AniDB_AnimeRepository();
                AniDB_EpisodeRepository     repAniEp   = new AniDB_EpisodeRepository();
                AnimeSeriesRepository       repSeries  = new AnimeSeriesRepository();

                repGrpStat.DeleteForAnime(animeID);

                // save the records
                foreach (Raw_AniDB_GroupStatus raw in getCmd.GrpStatusCollection.Groups)
                {
                    AniDB_GroupStatus grpstat = new AniDB_GroupStatus(raw);
                    repGrpStat.Save(grpstat);
                }

                // updated cached stats
                // we don't do it in the save method as it would be too many unecessary updates
                logger.Trace("Updating group stats by anime from GetReleaseGroupStatusUDP: {0}", animeID);
                StatsCache.Instance.UpdateUsingAnime(animeID);

                if (getCmd.GrpStatusCollection.LatestEpisodeNumber > 0)
                {
                    // update the anime with a record of the latest subbed episode
                    AniDB_Anime anime = repAnime.GetByAnimeID(animeID);
                    if (anime != null)
                    {
                        anime.LatestEpisodeNumber = getCmd.GrpStatusCollection.LatestEpisodeNumber;
                        repAnime.Save(anime);

                        // check if we have this episode in the database
                        // if not get it now by updating the anime record
                        List <AniDB_Episode> eps = repAniEp.GetByAnimeIDAndEpisodeNumber(animeID, getCmd.GrpStatusCollection.LatestEpisodeNumber);
                        if (eps.Count == 0)
                        {
                            CommandRequest_GetAnimeHTTP cr_anime = new CommandRequest_GetAnimeHTTP(animeID, true, false);
                            cr_anime.Save();
                        }

                        // update the missing episode stats on groups and children
                        AnimeSeries series = repSeries.GetByAnimeID(animeID);
                        if (series != null)
                        {
                            series.UpdateStats(true, true, true);
                            //series.TopLevelAnimeGroup.UpdateStatsFromTopLevel(true, true, true);
                        }
                    }
                }
            }

            return(getCmd.GrpStatusCollection);
        }