Files
flowframes/Code/Program.cs

123 lines
4.9 KiB
C#
Raw Normal View History

2020-11-23 16:51:05 +01:00
using Flowframes.Data;
using Flowframes.IO;
using Flowframes.MiscUtils;
using Flowframes.OS;
2020-11-23 16:51:05 +01:00
using System;
using System.Collections.Generic;
using System.Net;
2021-05-03 12:41:11 +02:00
using System.Threading;
2020-11-23 16:51:05 +01:00
using System.Threading.Tasks;
using System.Windows.Forms;
[assembly: System.Windows.Media.DisableDpiAwareness] // Disable Dpi awareness in the application assembly.
2020-11-23 16:51:05 +01:00
namespace Flowframes
{
static class Program
{
public static Form1 mainForm;
public static bool busy = false;
public static string lastInputPath;
public static bool lastInputPathIsSsd;
2020-12-17 11:32:45 +01:00
public static Queue<InterpSettings> batchQueue = new Queue<InterpSettings>();
2020-11-23 16:51:05 +01:00
[STAThread]
static void Main()
{
Config.Init();
if (Config.GetBool(Config.Key.delLogsOnStartup))
IOUtils.DeleteContentsOfDir(Paths.GetLogPath()); // Clear out older logs from previous session
2020-11-23 16:51:05 +01:00
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
2020-11-23 16:51:05 +01:00
Networks.Init();
2021-03-09 19:20:47 +01:00
Task.Run(() => DiskSpaceCheckLoop());
2020-11-23 16:51:05 +01:00
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
2021-05-03 12:41:11 +02:00
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
2020-11-23 16:51:05 +01:00
mainForm = new Form1();
Application.Run(mainForm);
2021-03-09 19:20:47 +01:00
}
2021-05-03 12:41:11 +02:00
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
string text = $"Unhandled Thread Exception!\n\n{e.Exception.Message}\n\nStack Trace:\n{e.Exception.StackTrace}\n\n" +
$"The error has been copied to the clipboard. Please inform the developer about this.";
ShowUnhandledError(text);
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = e.ExceptionObject as Exception;
string text = $"Unhandled UI Exception!\n\n{ex.Message}\n\nStack Trace:\n{ex.StackTrace}\n\n" +
$"The error has been copied to the clipboard. Please inform the developer about this.";
ShowUnhandledError(text);
}
static void ShowUnhandledError (string text)
{
MessageBox.Show(text, "Unhandled Error");
Clipboard.SetText(text);
}
2021-03-09 19:20:47 +01:00
static async Task DiskSpaceCheckLoop ()
{
while (true)
{
if (busy)
{
try
{
if (Interpolate.current == null || Interpolate.current.tempFolder.Length < 3)
return;
string drivePath = Interpolate.current.tempFolder.Substring(0, 2);
long mb = IOUtils.GetDiskSpace(Interpolate.current.tempFolder);
2021-03-09 19:20:47 +01:00
Logger.Log($"Disk space check for '{drivePath}/': {(mb / 1024f).ToString("0.0")} GB free.", true);
2021-03-09 19:20:47 +01:00
bool lowDiskSpace = mb < (Config.GetInt(Config.Key.lowDiskSpacePauseGb, 5) * 1024);
bool tooLowDiskSpace = mb < (Config.GetInt(Config.Key.lowDiskSpaceCancelGb, 2) * 1024);
string spaceGb = (mb / 1024f).ToString("0.0");
if (!Interpolate.canceled && (AiProcess.lastAiProcess != null && !AiProcess.lastAiProcess.HasExited) && lowDiskSpace)
{
if (tooLowDiskSpace)
{
Interpolate.Cancel($"Not enough disk space on '{drivePath}/' ({spaceGb} GB)!");
}
else
{
bool showMsg = !AiProcessSuspend.aiProcFrozen;
AiProcessSuspend.SuspendIfRunning();
if (showMsg)
{
MessageBox.Show($"Interpolation has been paused because you are running out of disk space on '{drivePath}/' ({spaceGb} GB)!\n\n" +
$"Please either clear up some disk space or cancel the interpolation.", "Warning");
}
}
}
}
catch (Exception e)
{
Logger.Log($"Disk space check failed: {e.Message}", true);
}
2021-03-09 19:20:47 +01:00
}
2020-11-23 16:51:05 +01:00
2021-03-09 19:20:47 +01:00
await Task.Delay(15000);
}
2020-11-23 16:51:05 +01:00
}
}
}