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.NoGroupsFound); } //BaseConfig.MyAnimeLog.Write("AniDBCommand_GetGroupStatus.Process: Response: {0}", socketResponse); // Process Response string sMsgType = socketResponse.Substring(0, 3); switch (sMsgType) { case "225": { // 225 GROUPSTATUS grpStatus = new GroupStatusCollection(animeID, socketResponse); return(enHelperActivityType.GotGroupStatus); } case "330": { return(enHelperActivityType.NoSuchAnime); } case "325": // no such description { return(enHelperActivityType.NoGroupsFound); } case "501": { return(enHelperActivityType.LoginRequired); } } return(enHelperActivityType.FileDoesNotExist); }
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.NoGroupsFound; //BaseConfig.MyAnimeLog.Write("AniDBCommand_GetGroupStatus.Process: Response: {0}", socketResponse); // Process Response string sMsgType = socketResponse.Substring(0, 3); switch (sMsgType) { case "225": { // 225 GROUPSTATUS grpStatus = new GroupStatusCollection(animeID, socketResponse); return enHelperActivityType.GotGroupStatus; } case "330": { return enHelperActivityType.NoSuchAnime; } case "325": // no such description { return enHelperActivityType.NoGroupsFound; } case "501": { return enHelperActivityType.LoginRequired; } } return enHelperActivityType.FileDoesNotExist; }
public override void ProcessCommand() { logger.Info("Processing CommandRequest_GetReleaseGroupStatus: {0}", AnimeID); try { // only get group status if we have an associated series AnimeSeriesRepository repSeries = new AnimeSeriesRepository(); AnimeSeries series = repSeries.GetByAnimeID(AnimeID); if (series == null) { return; } AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); AniDB_Anime anime = repAnime.GetByAnimeID(AnimeID); if (anime == null) { return; } // don't get group status if the anime has already ended more than 50 days ago bool skip = false; if (!ForceRefresh) { if (anime.EndDate.HasValue) { if (anime.EndDate.Value < DateTime.Now) { TimeSpan ts = DateTime.Now - anime.EndDate.Value; if (ts.TotalDays > 50) { // don't skip if we have never downloaded this info before AniDB_GroupStatusRepository repGrpStatus = new AniDB_GroupStatusRepository(); List <AniDB_GroupStatus> grpStatuses = repGrpStatus.GetByAnimeID(AnimeID); if (grpStatuses != null && grpStatuses.Count > 0) { skip = true; } } } } } if (skip) { logger.Info("Skipping group status command because anime has already ended: {0}", anime.ToString()); return; } GroupStatusCollection grpCol = JMMService.AnidbProcessor.GetReleaseGroupStatusUDP(AnimeID); if (ServerSettings.AniDB_DownloadReleaseGroups) { // save in bulk to improve performance using (var session = JMMService.SessionFactory.OpenSession()) { using (var transaction = session.BeginTransaction()) { foreach (Raw_AniDB_GroupStatus grpStatus in grpCol.Groups) { CommandRequest_GetReleaseGroup cmdRelgrp = new CommandRequest_GetReleaseGroup(grpStatus.GroupID, false); cmdRelgrp.Save(session); } transaction.Commit(); } } } } catch (Exception ex) { logger.Error("Error processing CommandRequest_GetReleaseGroupStatus: {0} - {1}", AnimeID, ex.ToString()); return; } }
public override void ProcessCommand() { logger.Info("Processing CommandRequest_GetReleaseGroupStatus: {0}", AnimeID); try { // only get group status if we have an associated series SVR_AnimeSeries series = Repo.Instance.AnimeSeries.GetByAnimeID(AnimeID); if (series == null) { return; } SVR_AniDB_Anime anime = Repo.Instance.AniDB_Anime.GetByAnimeID(AnimeID); if (anime == null) { return; } // don't get group status if the anime has already ended more than 50 days ago bool skip = false; if (!ForceRefresh) { if (anime.EndDate.HasValue) { if (anime.EndDate.Value < DateTime.Now) { TimeSpan ts = DateTime.Now - anime.EndDate.Value; if (ts.TotalDays > 50) { // don't skip if we have never downloaded this info before List <AniDB_GroupStatus> grpStatuses = Repo.Instance.AniDB_GroupStatus.GetByAnimeID(AnimeID); if (grpStatuses != null && grpStatuses.Count > 0) { skip = true; } } } } } if (skip) { logger.Info("Skipping group status command because anime has already ended: {0}", anime); return; } GroupStatusCollection grpCol = ShokoService.AnidbProcessor.GetReleaseGroupStatusUDP(AnimeID); if (ServerSettings.Instance.AniDb.DownloadReleaseGroups && grpCol != null && grpCol.Groups != null && grpCol.Groups.Count > 0) { grpCol.Groups.DistinctBy(a => a.GroupID) .Select(a => new CommandRequest_GetReleaseGroup(a.GroupID, false)).ForEach(a => a.Save()); } } catch (Exception ex) { logger.Error("Error processing CommandRequest_GetReleaseGroupStatus: {0} - {1}", AnimeID, ex); } }
public override void Run(IProgress <ICommand> progress = null) { logger.Info("Processing CommandRequest_GetReleaseGroupStatus: {0}", AnimeID); try { ReportInit(progress); // only get group status if we have an associated series SVR_AnimeSeries series = Repo.Instance.AnimeSeries.GetByAnimeID(AnimeID); if (series == null) { ReportFinish(progress); return; } ReportUpdate(progress, 20); SVR_AniDB_Anime anime = Repo.Instance.AniDB_Anime.GetByAnimeID(AnimeID); if (anime == null) { ReportFinish(progress); return; } ReportUpdate(progress, 40); // don't get group status if the anime has already ended more than 50 days ago bool skip = false; if (!ForceRefresh) { if (anime.EndDate.HasValue) { if (anime.EndDate.Value < DateTime.Now) { TimeSpan ts = DateTime.Now - anime.EndDate.Value; if (ts.TotalDays > 50) { // don't skip if we have never downloaded this info before List <AniDB_GroupStatus> grpStatuses = Repo.Instance.AniDB_GroupStatus.GetByAnimeID(AnimeID); ReportUpdate(progress, 60); if (grpStatuses != null && grpStatuses.Count > 0) { skip = true; } } } } } if (skip) { logger.Info("Skipping group status command because anime has already ended: {0}", anime); ReportFinish(progress); return; } GroupStatusCollection grpCol = ShokoService.AnidbProcessor.GetReleaseGroupStatusUDP(AnimeID); ReportUpdate(progress, 80); if (ServerSettings.Instance.AniDb.DownloadReleaseGroups && grpCol != null && grpCol.Groups != null && grpCol.Groups.Count > 0) { Queue.Instance.AddRange(grpCol.Groups.DistinctBy(a => a.GroupID).Select(a => new CmdAniDBGetReleaseGroup(a.GroupID, false))); } ReportFinish(progress); } catch (Exception ex) { ReportError(progress, $"Error processing Command AniDb.GetReleaseGroupStatus: {AnimeID} - {ex}", ex); } }