Esempio n. 1
0
 public override void Init()
 {
     base.Init();
     QueueState = new QueueStateStruct
     {
         queueState  = QueueStateEnum.StartingImages,
         extraParams = new string[0]
     };
 }
Esempio n. 2
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;
        }
Esempio n. 3
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();
        }
Esempio n. 4
0
        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();
            }
        }
Esempio n. 8
0
        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();
            }
        }
Esempio n. 11
0
        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();
            }
        }
Esempio n. 12
0
        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}");
            }
        }
Esempio n. 13
0
 public QueueStateEventArgs(QueueStateStruct queueState)
 {
     QueueState = queueState;
 }
Esempio n. 14
0
        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();
            }
        }