using System;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using VBASync.Localization;
using Forms = System.Windows.Forms;
namespace VBASync
{
internal static class Program
{
[STAThread]
private static void Main(string[] args)
{
try
{
var exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var exeBaseName = Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location);
var generalIni = new Model.AppIniFile(Path.Combine(exeDir, "VBASync.ini"));
if (!string.Equals(exeBaseName, "VBASync", StringComparison.InvariantCultureIgnoreCase))
{
generalIni.AddFile(Path.Combine(exeDir, exeBaseName + ".ini"));
}
var appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var lastSessionPath = generalIni.GetBool("General", "Portable") ?? false
? Path.Combine(exeDir, "LastSession.ini")
: Path.Combine(appDataDir, "VBA Sync Tool", "LastSession.ini");
generalIni.AddFile(lastSessionPath);
var startup = new Model.Startup { LastSessionPath = lastSessionPath };
startup.ProcessIni(generalIni, false);
var sessionIni = new Model.AppIniFile(Path.Combine(Environment.CurrentDirectory, "VBASync.ini"));
sessionIni.AddFile(Path.Combine(Environment.CurrentDirectory, "VBASync.ini.local"));
if (!string.Equals(exeBaseName, "VBASync", StringComparison.InvariantCultureIgnoreCase))
{
sessionIni.AddFile(Path.Combine(Environment.CurrentDirectory, exeBaseName + ".ini"));
sessionIni.AddFile(Path.Combine(Environment.CurrentDirectory, exeBaseName + ".ini.local"));
}
startup.ProcessIni(sessionIni, true);
startup.ProcessArgs(args);
if (!string.IsNullOrEmpty(startup.Language))
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(startup.Language);
}
if (startup.AutoRun)
{
using (var actor = new Model.ActiveSession(startup, startup))
{
actor.Apply(actor.GetPatches().ToList());
}
}
else
{
try
{
Assembly.Load("VBASync.WPF")
.GetType("VBASync.WPF.WpfManager")
.GetMethod("RunWpf", BindingFlags.Public | BindingFlags.Static)
.Invoke(null, new object[] { startup, !File.Exists(lastSessionPath) });
}
catch
{
throw new ApplicationException(VBASyncResources.ErrorCannotLoadGUI);
}
}
}
catch (Exception ex)
{
Forms.MessageBox.Show(ex.Message, VBASyncResources.MWTitle,
Forms.MessageBoxButtons.OK, Forms.MessageBoxIcon.Error);
}
}
}
}