public static async Task ManuallyForcePreviewJobs(HttpContext context) { if (!Program.HasValidFFMPEG) { context.Response.StatusCode = 500; await context.Response.WriteAsync("No ffmpeg installation found"); return; } if (Program.Args.CacheDir == null) { context.Response.StatusCode = 500; await context.Response.WriteAsync("No cache directory specified"); return; } var selector1 = (string)context.Request.RouteValues["selector1"]; var selector2 = (string)context.Request.RouteValues["selector2"]; List <(string json, Dictionary <string, JObject> obj)> selection1; if (selector1.ToLower() == "all" || selector1.ToLower() == "*") { selection1 = (await Task.WhenAll(Program.Args.DataDirs.Select(async(_, i) => await Program.GetData(i)))).ToList(); } else { selection1 = new[] { (await Program.GetData(int.Parse(selector1))) }.ToList(); } List <JObject> selection2; if (selector2.ToLower() == "all" || selector2.ToLower() == "*") { selection2 = selection1.Select(p => p.obj).SelectMany(p => p.Values).ToList(); } else { selection2 = selection1.SelectMany(p => p.obj).Where(p => p.Key == selector2).Select(p => p.Value).ToList(); } var count = 0; foreach (var obj in selection2) { var pathVideo = obj["meta"]?.Value <string>("path_video"); if (pathVideo == null) { continue; } var pathCache = ThumbnailController.GetPreviewCachePath(pathVideo); if (File.Exists(pathCache)) { continue; } count++; JobRegistry.PreviewGenJobs.StartOrQueue((man) => new PreviewGenJob(man, pathVideo, pathCache, null, obj["meta"].Value <int>("datadirindex"), obj["meta"].Value <string>("uid")), false); } await context.Response.WriteAsync($"Started/Attached {count} new jobs"); }
public static async Task ManuallyForceThumbnailJobs(HttpContext context) { context.Response.Headers.Add(HeaderNames.ContentType, "text/plain"); if (!Program.Args.CreateResizedThumbnails) { context.Response.StatusCode = 500; await context.Response.WriteAsync("Thumbnail generation is disabled"); return; } if (Program.Args.CacheDir == null) { context.Response.StatusCode = 500; await context.Response.WriteAsync("No cache directory specified"); return; } var selector1 = (string)context.Request.RouteValues["selector1"]; var selector2 = (string)context.Request.RouteValues["selector2"]; List <DataDirData> selection1; if (selector1.ToLower() == "all" || selector1.ToLower() == "*") { selection1 = (await Task.WhenAll(Program.Args.DataDirs.Select(async(_, i) => await Program.GetData(i)))).ToList(); } else { selection1 = new[] { (await Program.GetData(int.Parse(selector1))) }.ToList(); } List <VideoData> selection2; if (selector2.ToLower() == "all" || selector2.ToLower() == "*") { selection2 = selection1.SelectMany(p => p.Videos.Values).ToList(); } else { selection2 = selection1.SelectMany(p => p.Videos).Where(p => p.Key == selector2).Select(p => p.Value).ToList(); } var count = 0; foreach (var vid in selection2) { if (vid.PathVideo == null) { continue; } if (vid.PathThumbnail == null) { continue; } var pathCache = ThumbnailController.GetThumbnailCachePath(vid.PathVideo); if (File.Exists(pathCache)) { continue; } count++; JobRegistry.ThumbGenJobs.StartOrQueue((man) => new ThumbnailGenJob(man, vid, pathCache), false); } await context.Response.WriteAsync($"Started/Attached {count} new jobs"); }