public async Task ProcessTasksAsync(ICollection <ThumbnailTask> tasks, bool regenerate, Action <ThumbnailTaskProgress> progressCallback, ICancellationToken token)
        {
            var progressInfo = new ThumbnailTaskProgress {
                Message = "Reading the tasks..."
            };

            if (_imageChangesProvider.IsTotalCountSupported)
            {
                foreach (var task in tasks)
                {
                    var changedSince = regenerate ? null : task.LastRun;
                    progressInfo.TotalCount = await _imageChangesProvider.GetTotalChangesCount(task, changedSince, token);
                }
            }

            progressCallback(progressInfo);

            var pageSize = _settingsManager.GetValue(ModuleConstants.Settings.General.ProcessBatchSize.Name, 50);

            foreach (var task in tasks)
            {
                progressInfo.Message = $"Procesing task {task.Name}...";
                progressCallback(progressInfo);

                var skip = 0;
                while (true)
                {
                    var changes = await _imageChangesProvider.GetNextChangesBatch(task, regenerate?null : task.LastRun, skip, pageSize, token);

                    if (!changes.Any())
                    {
                        break;
                    }

                    foreach (var fileChange in changes)
                    {
                        var result = await _generator.GenerateThumbnailsAsync(fileChange.Url, task.WorkPath, task.ThumbnailOptions, token);

                        progressInfo.ProcessedCount++;

                        if (!result.Errors.IsNullOrEmpty())
                        {
                            progressInfo.Errors.AddRange(result.Errors);
                        }
                    }

                    skip += changes.Length;

                    progressCallback(progressInfo);
                    token?.ThrowIfCancellationRequested();
                }
            }

            progressInfo.Message = "Finished generating thumbnails!";
            progressCallback(progressInfo);
        }
Ejemplo n.º 2
0
        public async Task <IHttpActionResult> GenerateAsync(GenerateThumbnailsRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            var setting = _settingsManager.GetSettingByName("ImageTools.Thumbnails.Parameters");

            if (setting == null)
            {
                return(Ok(new GenerateThumbnailsResponse()));
            }

            var settings = setting.ArrayValues ?? new string[] { };
            var options  = settings.Select(x => JsonConvert.DeserializeObject <ThumbnailOption>(x, new SettingJsonConverter())).ToList();
            var result   = await _thumbnailsGenerator.GenerateThumbnailsAsync(request.ImageUrl, null, options, null);

            return(Ok(new GenerateThumbnailsResponse()));
        }