ttrss-co-pilot/tasks/Convert.cs

51 lines
2.2 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)
{
2023-04-10 15:25:47 -04:00
var conversionFilenameTarget = wo.data["path"].Substring(0, wo.data["path"].LastIndexOf('.')) + wo.data["conversion-target"];
if(conversionFilenameTarget == wo.data["path"])
{
Console.WriteLine("no conversion needed");
return new Tuple<TaskStatus, WorkOrder>(TaskStatus.ContinueNow, wo);
}
2023-04-07 23:54:09 -04:00
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();
2023-04-10 15:25:47 -04:00
var conversionProc = Process.Start("ffmpeg", $"-y -loglevel quiet -i \"{wo.data["path"]}\" \"{conversionFilenameTarget}\"");
2023-04-07 23:54:09 -04:00
conversionProc.WaitForExit();
sw.Stop();
2023-04-10 15:25:47 -04:00
if(File.Exists(conversionFilenameTarget))
2023-04-07 23:54:09 -04:00
{
2023-04-10 15:25:47 -04:00
Console.WriteLine($" converted {wo.data["path"]} -> {conversionFilenameTarget}");
2023-04-07 23:54:09 -04:00
File.Delete(wo.data["path"]);
2023-04-10 15:25:47 -04:00
wo.data["path"] =conversionFilenameTarget;
2023-04-07 23:54:09 -04:00
}
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;
}
}
}