96 lines
2.8 KiB
C#
96 lines
2.8 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Diagnostics;
|
|
using Gtk;
|
|
|
|
namespace GridProxyGUI
|
|
{
|
|
class MainClass
|
|
{
|
|
public static void Main(string[] args)
|
|
{
|
|
try
|
|
{
|
|
InitLogging();
|
|
StartGtkApp();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (ex is TypeInitializationException || ex is TypeLoadException || ex is System.IO.FileNotFoundException)
|
|
{
|
|
NativeApi.ExitWithMessage("Failed to start", ex.Message + "\n\nMake sure tha application install isn't missing accompanied files and that Gtk# is installed.", 1);
|
|
}
|
|
throw;
|
|
}
|
|
}
|
|
|
|
static void StartGtkApp()
|
|
{
|
|
Gtk.Application.Init();
|
|
MainWindow win = new MainWindow();
|
|
win.Show();
|
|
Application.Run();
|
|
}
|
|
|
|
static bool InitLogging()
|
|
{
|
|
try
|
|
{
|
|
string userDir = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "GridProxyGUI");
|
|
|
|
if (!Directory.Exists(userDir))
|
|
{
|
|
Directory.CreateDirectory(userDir);
|
|
}
|
|
|
|
string settingsFile = Path.Combine(userDir, "Settings.xml");
|
|
Options.CreateInstance(settingsFile);
|
|
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static class NativeApi
|
|
{
|
|
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
|
|
public static extern int MessageBox(IntPtr hWnd, String text, String caption, int options);
|
|
|
|
public static void LinuxMessageBox(string title, string msg, string type)
|
|
{
|
|
try
|
|
{
|
|
ProcessStartInfo p = new ProcessStartInfo("zenity", string.Format("--{0} --title=\"{1}\" --text=\"{2}\"", type, title.Replace("\"", "\\\""), msg.Replace("\"", "\\\"")));
|
|
p.CreateNoWindow = true;
|
|
p.ErrorDialog = false;
|
|
p.UseShellExecute = true;
|
|
var process = Process.Start(p);
|
|
process.WaitForExit();
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
public static void ExitWithMessage(string title, string msg, int exitCode)
|
|
{
|
|
Console.Error.WriteLine(title + ": " + msg);
|
|
if (PlatformDetection.IsWindows)
|
|
{
|
|
MessageBox(IntPtr.Zero, msg, title, 0x10);
|
|
}
|
|
else if (PlatformDetection.IsMac)
|
|
{
|
|
}
|
|
else
|
|
{
|
|
LinuxMessageBox(title, msg, "error");
|
|
}
|
|
|
|
Environment.Exit(exitCode);
|
|
}
|
|
}
|
|
}
|