ttrss-co-pilot/tasks/Convert.cs

45 lines
1.9 KiB
C#
Raw Normal View History

2023-04-07 23:54:09 -04:00
using System.Diagnostics;
using ttrss_co_client.ttrss;
using ttrss_co_client.ttrss.datastructures;
2023-04-07 23:54:09 -04:00
namespace ttrss_co_client.tasks
{
///<summary>ffmpegify</summary>
public class Convert : Phase2Task
{
public override string TaskName => "convert";
public override async Task<Tuple<TaskStatus, WorkOrder>> 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"]}\"");
2023-04-07 23:54:09 -04:00
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"];
}
2023-04-07 23:54:09 -04:00
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, WorkOrder>(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, WorkOrder>(TaskStatus.Done, null);
}
return toReturn;
}
}
}