using System.Diagnostics; using ttrss_co_client.ttrss; using ttrss_co_client.ttrss.datastructures; namespace ttrss_co_client.tasks { ///ffmpegify public class Convert : Phase2Task { public override string TaskName => "convert"; public override async Task> ActOn(WorkOrder wo) { var article = (await TtrssClient.GetArticles(wo.articleId))?.FirstOrDefault(); if(article == null){ Console.Error.WriteLine($"article {wo.articleId} couldn't be retrieved!"); return null; } var sw = new Stopwatch(); sw.Start(); var conversionProc = Process.Start("ffmpeg", $"-y -loglevel quiet -i \"{wo.data["path"]}\" \"{wo.data["conversion-target"]}\""); conversionProc.WaitForExit(); sw.Stop(); if(File.Exists(wo.data["conversion-target"])) { Console.WriteLine($" converted {wo.data["path"]} -> {wo.data["conversion-target"]}"); File.Delete(wo.data["path"]); wo.data["path"] = wo.data["conversion-target"]; } var outputStr = $"converted in {sw.Elapsed}"; Console.WriteLine(outputStr); //re-get, in case conversion took a long time article = (await TtrssClient.GetArticles(wo.articleId))?.FirstOrDefault(); await TtrssClient.UpdateArticleNote($"{article.note}\n{outputStr}", article.id); var toReturn = new Tuple(TaskStatus.ContinueNow, wo); if(!wo.Phase2TaskList.Any()) { Console.Error.WriteLine($"work order {wo.guid} came to conversion, but thinks its done?"); return new Tuple(TaskStatus.Done, null); } return toReturn; } } }