diff --git a/Code/Extensions/ExtensionMethods.cs b/Code/Extensions/ExtensionMethods.cs index 1209a14..66c141b 100644 --- a/Code/Extensions/ExtensionMethods.cs +++ b/Code/Extensions/ExtensionMethods.cs @@ -113,6 +113,9 @@ namespace Flowframes public static string[] SplitIntoLines(this string str) { + if (string.IsNullOrWhiteSpace(str)) + return new string[0]; + return Regex.Split(str, "\r\n|\r|\n"); } diff --git a/Code/IO/Logger.cs b/Code/IO/Logger.cs index 895533b..5c47bfe 100644 --- a/Code/IO/Logger.cs +++ b/Code/IO/Logger.cs @@ -18,6 +18,11 @@ namespace Flowframes public const string defaultLogName = "sessionlog"; public static long id; + private static string _lastUi = ""; + public static string LastUiLine { get { return _lastUi; } } + private static string _lastLog = ""; + public static string LastLogLine { get { return _lastLog; } } + public struct LogEntry { public string logMessage; @@ -55,7 +60,14 @@ namespace Flowframes if (string.IsNullOrWhiteSpace(entry.logMessage)) return; - Console.WriteLine(entry.logMessage); + string msg = entry.logMessage; + + _lastLog = msg; + + if (!entry.hidden) + _lastUi = msg; + + Console.WriteLine(msg); try { @@ -68,21 +80,21 @@ namespace Flowframes } catch { } - entry.logMessage = entry.logMessage.Replace("\n", Environment.NewLine); + msg = msg.Replace("\n", Environment.NewLine); if (!entry.hidden && textbox != null) - textbox.AppendText((textbox.Text.Length > 1 ? Environment.NewLine : "") + entry.logMessage); + textbox.AppendText((textbox.Text.Length > 1 ? Environment.NewLine : "") + msg); if (entry.replaceLastLine) { textbox.Resume(); - entry.logMessage = "[REPL] " + entry.logMessage; + msg = "[REPL] " + msg; } if (!entry.hidden) - entry.logMessage = "[UI] " + entry.logMessage; + msg = "[UI] " + msg; - LogToFile(entry.logMessage, false, entry.filename); + LogToFile(msg, false, entry.filename); } public static void LogToFile(string logStr, bool noLineBreak, string filename) diff --git a/Code/Os/AiProcess.cs b/Code/Os/AiProcess.cs index 61c2df2..5596ec8 100644 --- a/Code/Os/AiProcess.cs +++ b/Code/Os/AiProcess.cs @@ -88,18 +88,31 @@ namespace Flowframes.Os return; } - while (Interpolate.currentlyUsingAutoEnc && Program.busy) + try { - if (AvProcess.lastAvProcess != null && !AvProcess.lastAvProcess.HasExited) + while (Interpolate.currentlyUsingAutoEnc && Program.busy) { - string lastLine = AvProcess.lastOutputFfmpeg.SplitIntoLines().Last(); - Logger.Log(FormatUtils.BeautifyFfmpegStats(lastLine), false, Logger.GetLastLine().ToLower().Contains("frame")); + Logger.Log($"Interpolate.currentlyUsingAutoEnc && Program.busy"); + + if (AvProcess.lastAvProcess != null && !AvProcess.lastAvProcess.HasExited) + { + string lastLine = Logger.LastLogLine; + + if(lastLine.Contains("frame")) + Logger.Log(FormatUtils.BeautifyFfmpegStats(lastLine), false, Logger.LastUiLine.ToLower().Contains("frame")); + } + + Logger.Log($"will break if AvProcess.lastAvProcess.HasExited ({AvProcess.lastAvProcess.HasExited}) && !AutoEncode.HasWorkToDo() ({!AutoEncode.HasWorkToDo()})"); + + if (AvProcess.lastAvProcess.HasExited && !AutoEncode.HasWorkToDo()) // Stop logging if ffmpeg is not running & AE is done + break; + + await Task.Delay(500); } - - if (AvProcess.lastAvProcess.HasExited && !AutoEncode.HasWorkToDo()) // Stop logging if ffmpeg is not running & AE is done - break; - - await Task.Delay(500); + } + catch(Exception e) + { + Logger.Log($"AiFinished encoder logging error: {e.Message}\n{e.StackTrace}", true); } }