45 lines
1.9 KiB
C#
45 lines
1.9 KiB
C#
using System.Diagnostics;
|
|
using ttrss_co_client.ttrss;
|
|
using ttrss_co_client.ttrss.datastructures;
|
|
|
|
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 -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, 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;
|
|
}
|
|
}
|
|
} |