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); }
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())); }