public override void Init() { base.Init(); QueueState = new QueueStateStruct { queueState = QueueStateEnum.StartingImages, extraParams = new string[0] }; }
void WorkerCommands_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture); processingCommands = false; paused = false; QueueState = new QueueStateStruct { queueState = QueueStateEnum.Idle, extraParams = new string[0] }; QueueCount = 0; }
public void Init() { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture); processingCommands = true; QueueState = new QueueStateStruct { queueState = QueueStateEnum.StartingHasher, extraParams = new string[0] }; workerCommands.RunWorkerAsync(); }
void workerCommands_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture); processingCommands = false; //logger.Trace("Stopping command worker (images)..."); QueueState = new QueueStateStruct() { queueState = QueueStateEnum.Idle, extraParams = new string[0] }; QueueCount = 0; }
public void Init() { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture); processingCommands = true; //logger.Trace("Starting command worker..."); QueueState = new QueueStateStruct() { queueState = QueueStateEnum.StartingGeneral, extraParams = new string[0] }; this.workerCommands.RunWorkerAsync(); }
public void Init() { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Instance.Culture); processingCommands = true; QueueState = new QueueStateStruct { queueState = QueueStateEnum.StartingImages, extraParams = new string[0] }; if (!workerCommands.IsBusy) { workerCommands.RunWorkerAsync(); } }
void WorkerCommands_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture); processingCommands = false; paused = false; QueueState = new QueueStateStruct { queueState = QueueStateEnum.Idle, extraParams = new string[0] }; QueueCount = RepoFactory.CommandRequest.GetQueuedCommandCountHasher(); if (QueueCount > 0) { workerCommands.RunWorkerAsync(); } }
protected void WorkerCommands_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { CurrentCommand = null; _processingCommands = false; _paused = false; if (e.Cancelled) { Logger.Warn($"The {QueueType} Queue was cancelled with {QueueCount} commands left"); } QueueState = new QueueStateStruct { queueState = QueueStateEnum.Idle, extraParams = new string[0] }; UpdateQueueCount(); }
void WorkerCommands_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture); CurrentCommand = null; processingCommands = false; paused = false; if (e.Cancelled) { logger.Warn($"The General Queue was cancelled with {QueueCount} commands left"); } QueueState = new QueueStateStruct { queueState = QueueStateEnum.Idle, extraParams = new string[0] }; QueueCount = RepoFactory.CommandRequest.GetQueuedCommandCountGeneral(); }
void WorkerCommands_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Instance.Culture); CurrentCommand = null; processingCommands = false; paused = false; QueueState = new QueueStateStruct { queueState = QueueStateEnum.Idle, extraParams = new string[0] }; QueueCount = Repo.Instance.CommandRequest.GetQueuedCommandCountImages(); if (QueueCount > 0 && !workerCommands.IsBusy) { processingCommands = true; workerCommands.RunWorkerAsync(); } }
void WorkerCommands_DoWork(object sender, DoWorkEventArgs e) { while (true) { if (workerCommands.CancellationPending) { e.Cancel = true; return; } // if paused we will sleep for 5 seconds, and the try again // we will remove the pause if it was set more than 6 hours ago // the pause is initiated when banned from AniDB or manually by the user if (Paused) { try { if (workerCommands.CancellationPending) { e.Cancel = true; return; } TimeSpan ts = DateTime.Now - pauseTime.Value; if (ts.TotalHours >= 6) { Paused = false; } } catch { // ignore } Thread.Sleep(200); continue; } CommandRequest crdb = RepoFactory.CommandRequest.GetNextDBCommandRequestHasher(); if (crdb == null) { return; } if (workerCommands.CancellationPending) { e.Cancel = true; return; } CommandRequest icr = CommandHelper.GetCommand(crdb); if (icr == null) { logger.Trace("No implementation found for command: {0}-{1}", crdb.CommandType, crdb.CommandID); return; } QueueState = icr.PrettyDescription; if (workerCommands.CancellationPending) { e.Cancel = true; return; } icr.ProcessCommand(); RepoFactory.CommandRequest.Delete(crdb.CommandRequestID); QueueCount = RepoFactory.CommandRequest.GetQueuedCommandCountHasher(); } }
public override void ProcessCommand() { logger.Info("Processing CommandRequest_ValidateAllImages"); try { QueueStateStruct queueState = PrettyDescription; queueState.extraParams = new[] { Resources.Command_ValidateAllImages_TvDBEpisodes }; ShokoService.CmdProcessorImages.QueueState = queueState; int count = 0; logger.Info("Scanning TvDB Episode thumbs for corrupted images"); var episodes = RepoFactory.TvDB_Episode.GetAll().Where(fanart => !string.IsNullOrEmpty(fanart.GetFullImagePath()) && !Misc.IsImageValid(fanart.GetFullImagePath())).ToList(); logger.Info($"Found {episodes.Count} corrupted TvDB Episode {(episodes.Count == 1 ? "thumb" : "thumbs")}"); foreach (var fanart in episodes) { logger.Trace($"Corrupt image found! Attempting Redownload: {fanart.GetFullImagePath()}"); RemoveImageAndQueueRedownload(ImageEntityType.TvDB_Episode, fanart.TvDB_EpisodeID, fanart); count++; if (count % 10 == 0) { logger.Info($"Deleting and queueing for redownload {count}/{episodes.Count}"); queueState.extraParams = new[] { $"{Resources.Command_ValidateAllImages_TvDBEpisodes} - {count}/{episodes.Count}" }; ShokoService.CmdProcessorImages.QueueState = queueState; } } if (ServerSettings.Instance.TvDB.AutoFanart) { count = 0; queueState.extraParams = new[] { Resources.Command_ValidateAllImages_TvDBFanarts }; ShokoService.CmdProcessorImages.QueueState = queueState; logger.Info("Scanning TvDB Fanarts for corrupted images"); var fanarts = RepoFactory.TvDB_ImageFanart.GetAll().Where(fanart => !string.IsNullOrEmpty(fanart.GetFullImagePath()) && !Misc.IsImageValid(fanart.GetFullImagePath())).ToList(); logger.Info($"Found {fanarts.Count} corrupted TvDB {(fanarts.Count == 1 ? "Fanart" : "Fanarts")}"); foreach (var fanart in fanarts) { logger.Trace($"Corrupt image found! Attempting Redownload: {fanart.GetFullImagePath()}"); RemoveImageAndQueueRedownload(ImageEntityType.TvDB_FanArt, fanart.TvDB_ImageFanartID, fanart); count++; if (count % 10 == 0) { logger.Info($"Deleting and queueing for redownload {count}/{fanarts.Count}"); queueState.extraParams = new[] { $"{Resources.Command_ValidateAllImages_TvDBFanarts} - {count}/{fanarts.Count}" }; ShokoService.CmdProcessorImages.QueueState = queueState; } } } if (ServerSettings.Instance.TvDB.AutoPosters) { count = 0; queueState.extraParams = new[] { Resources.Command_ValidateAllImages_TvDBPosters }; ShokoService.CmdProcessorImages.QueueState = queueState; logger.Info("Scanning TvDB Posters for corrupted images"); var fanarts = RepoFactory.TvDB_ImagePoster.GetAll().Where(fanart => !string.IsNullOrEmpty(fanart.GetFullImagePath()) && !Misc.IsImageValid(fanart.GetFullImagePath())).ToList(); logger.Info($"Found {fanarts.Count} corrupted TvDB {(fanarts.Count == 1 ? "Poster" : "Posters")}"); foreach (var fanart in fanarts) { logger.Trace($"Corrupt image found! Attempting Redownload: {fanart.GetFullImagePath()}"); RemoveImageAndQueueRedownload(ImageEntityType.TvDB_Cover, fanart.TvDB_ImagePosterID, fanart); count++; if (count % 10 == 0) { logger.Info($"Deleting and queueing for redownload {count}/{fanarts.Count}"); queueState.extraParams = new[] { $"{Resources.Command_ValidateAllImages_TvDBPosters} - {count}/{fanarts.Count}" }; ShokoService.CmdProcessorImages.QueueState = queueState; } } } if (ServerSettings.Instance.TvDB.AutoWideBanners) { count = 0; logger.Info("Scanning TvDB Banners for corrupted images"); queueState.extraParams = new[] { Resources.Command_ValidateAllImages_TvDBBanners }; ShokoService.CmdProcessorImages.QueueState = queueState; var fanarts = RepoFactory.TvDB_ImageWideBanner.GetAll().Where(fanart => !string.IsNullOrEmpty(fanart.GetFullImagePath()) && !Misc.IsImageValid(fanart.GetFullImagePath())).ToList(); logger.Info($"Found {fanarts.Count} corrupted TvDB {(fanarts.Count == 1 ? "Banner" : "Banners")}"); foreach (var fanart in fanarts) { logger.Trace($"Corrupt image found! Attempting Redownload: {fanart.GetFullImagePath()}"); RemoveImageAndQueueRedownload(ImageEntityType.TvDB_Banner, fanart.TvDB_ImageWideBannerID, fanart); count++; if (count % 10 == 0) { logger.Info($"Deleting and queueing for redownload {count}/{fanarts.Count}"); queueState.extraParams = new[] { $"{Resources.Command_ValidateAllImages_TvDBBanners} - {count}/{fanarts.Count}" }; ShokoService.CmdProcessorImages.QueueState = queueState; } } } if (ServerSettings.Instance.MovieDb.AutoPosters) { queueState.extraParams = new[] { Resources.Command_ValidateAllImages_MovieDBPosters }; ShokoService.CmdProcessorImages.QueueState = queueState; count = 0; logger.Info("Scanning MovieDB Posters for corrupted images"); var fanarts = RepoFactory.MovieDB_Poster.GetAll().Where(fanart => !string.IsNullOrEmpty(fanart.GetFullImagePath()) && !Misc.IsImageValid(fanart.GetFullImagePath())).ToList(); logger.Info($"Found {fanarts.Count} corrupted MovieDB {(fanarts.Count == 1 ? "Poster" : "Posters")}"); foreach (var fanart in fanarts) { logger.Trace($"Corrupt image found! Attempting Redownload: {fanart.GetFullImagePath()}"); RemoveImageAndQueueRedownload(ImageEntityType.MovieDB_Poster, fanart.MovieDB_PosterID, fanart); count++; if (count % 10 == 0) { logger.Info($"Deleting and queueing for redownload {count}/{fanarts.Count}"); queueState.extraParams = new[] { $"{Resources.Command_ValidateAllImages_MovieDBPosters} - {count}/{fanarts.Count}" }; ShokoService.CmdProcessorImages.QueueState = queueState; } } } if (ServerSettings.Instance.MovieDb.AutoFanart) { queueState.extraParams = new[] { Resources.Command_ValidateAllImages_MovieDBFanarts }; ShokoService.CmdProcessorImages.QueueState = queueState; count = 0; logger.Info("Scanning MovieDB Fanarts for corrupted images"); var fanarts = RepoFactory.MovieDB_Fanart.GetAll().Where(fanart => !string.IsNullOrEmpty(fanart.GetFullImagePath()) && !Misc.IsImageValid(fanart.GetFullImagePath())).ToList(); logger.Info($"Found {fanarts.Count} corrupted MovieDB {(fanarts.Count == 1 ? "Fanart" : "Fanarts")}"); foreach (var fanart in fanarts) { logger.Trace($"Corrupt image found! Attempting Redownload: {fanart.GetFullImagePath()}"); RemoveImageAndQueueRedownload(ImageEntityType.MovieDB_FanArt, fanart.MovieDB_FanartID, fanart); count++; if (count % 10 == 0) { logger.Info($"Deleting and queueing for redownload {count}/{fanarts.Count}"); queueState.extraParams = new[] { $"{Resources.Command_ValidateAllImages_MovieDBFanarts} - {count}/{fanarts.Count}" }; ShokoService.CmdProcessorImages.QueueState = queueState; } } } queueState.extraParams = new[] { Resources.Command_ValidateAllImages_AniDBPosters }; ShokoService.CmdProcessorImages.QueueState = queueState; count = 0; logger.Info("Scanning AniDB Posters for corrupted images"); var posters = RepoFactory.AniDB_Anime.GetAll().Where(fanart => !string.IsNullOrEmpty(fanart.PosterPath) && !Misc.IsImageValid(fanart.PosterPath)).ToList(); logger.Info($"Found {posters.Count} corrupted AniDB {(posters.Count == 1 ? "Poster" : "Posters")}"); foreach (var fanart in posters) { logger.Trace($"Corrupt image found! Attempting Redownload: {fanart.PosterPath}"); RemoveImageAndQueueRedownload(ImageEntityType.AniDB_Cover, fanart.AnimeID, fanart); count++; if (count % 10 == 0) { logger.Info($"Deleting and queueing for redownload {count}/{posters.Count}"); queueState.extraParams = new[] { $"{Resources.Command_ValidateAllImages_AniDBPosters} - {count}/{posters.Count}" }; ShokoService.CmdProcessorImages.QueueState = queueState; } } if (ServerSettings.Instance.AniDb.DownloadCharacters) { queueState.extraParams = new[] { Resources.Command_ValidateAllImages_AniDBCharacters }; ShokoService.CmdProcessorImages.QueueState = queueState; count = 0; logger.Info("Scanning AniDB Characters for corrupted images"); var fanarts = RepoFactory.AniDB_Character.GetAll().Where(fanart => !string.IsNullOrEmpty(fanart.GetPosterPath()) && !Misc.IsImageValid(fanart.GetPosterPath())) .ToList(); logger.Info($"Found {fanarts.Count} corrupted AniDB Character {(fanarts.Count == 1 ? "image" : "images")}"); foreach (var fanart in fanarts) { logger.Trace($"Corrupt image found! Attempting Redownload: {fanart.GetPosterPath()}"); RemoveImageAndQueueRedownload(ImageEntityType.AniDB_Character, fanart.AniDB_CharacterID, fanart); count++; if (count % 10 == 0) { logger.Info($"Deleting and queueing for redownload {count}/{fanarts.Count}"); queueState.extraParams = new[] { $"{Resources.Command_ValidateAllImages_AniDBCharacters} - {count}/{fanarts.Count}" }; ShokoService.CmdProcessorImages.QueueState = queueState; } } } if (ServerSettings.Instance.AniDb.DownloadCreators) { queueState.extraParams = new[] { Resources.Command_ValidateAllImages_AniDBSeiyuus }; ShokoService.CmdProcessorImages.QueueState = queueState; count = 0; logger.Info("Scanning AniDB Seiyuus for corrupted images"); var fanarts = RepoFactory.AniDB_Seiyuu.GetAll().Where(fanart => !string.IsNullOrEmpty(fanart.GetPosterPath()) && !Misc.IsImageValid(fanart.GetPosterPath())).ToList(); logger.Info($"Found {fanarts.Count} corrupted AniDB Seiyuu {(fanarts.Count == 1 ? "image" : "images")}"); foreach (var fanart in fanarts) { logger.Trace($"Corrupt image found! Attempting Redownload: {fanart.GetPosterPath()}"); RemoveImageAndQueueRedownload(ImageEntityType.AniDB_Creator, fanart.SeiyuuID, fanart); count++; if (count % 10 == 0) { logger.Info($"Deleting and queueing for redownload {count}/{fanarts.Count}"); queueState.extraParams = new[] { $"{Resources.Command_ValidateAllImages_AniDBSeiyuus} - {count}/{fanarts.Count}" }; ShokoService.CmdProcessorImages.QueueState = queueState; } } } } catch (Exception ex) { logger.Warn($"Error processing CommandRequest_ValidateAllImages: {ex.Message}"); } }
public QueueStateEventArgs(QueueStateStruct queueState) { QueueState = queueState; }
void WorkerCommands_DoWork(object sender, DoWorkEventArgs e) { while (true) { if (workerCommands.CancellationPending) { e.Cancel = true; return; } // if paused we will sleep for 5 seconds, and the try again // we will remove the pause if it was set more than 12 hours ago // the pause is initiated when banned from AniDB or manually by the user if (Paused) { try { if (workerCommands.CancellationPending) { e.Cancel = true; return; } TimeSpan ts = DateTime.Now - pauseTime.Value; if (ts.TotalHours >= 12) { Paused = false; } } catch { // ignore } Thread.Sleep(200); continue; } CommandRequest crdb = RepoFactory.CommandRequest.GetNextDBCommandRequestGeneral(); if (crdb == null) { if (QueueCount > 0) { logger.Error($"No command returned from repo, but there are {QueueCount} commands left"); } return; } if (workerCommands.CancellationPending) { e.Cancel = true; return; } ICommandRequest icr = CommandHelper.GetCommand(crdb); if (icr == null) { logger.Error("No implementation found for command: {0}-{1}", crdb.CommandType, crdb.CommandID); } else { QueueState = icr.PrettyDescription; if (workerCommands.CancellationPending) { e.Cancel = true; return; } logger.Trace("Processing command request: {0}", crdb.CommandID); try { icr.ProcessCommand(); } catch (Exception ex) { logger.Error(ex, "ProcessCommand exception: {0}\n{1}", crdb.CommandID, ex); } } logger.Trace("Deleting command request: {0}", crdb.CommandID); RepoFactory.CommandRequest.Delete(crdb.CommandRequestID); QueueCount = RepoFactory.CommandRequest.GetQueuedCommandCountGeneral(); } }