-
-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathProgram.cs
112 lines (106 loc) · 4.28 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
using NickvisionMoney.GNOME.Views;
using NickvisionMoney.Shared.Controllers;
using NickvisionMoney.Shared.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Reflection;
using static NickvisionMoney.Shared.Helpers.Gettext;
namespace NickvisionMoney.GNOME;
/// <summary>
/// The Program
/// </summary>
public partial class Program
{
private readonly Adw.Application _application;
private MainWindow? _mainWindow;
private MainWindowController _mainWindowController;
/// <summary>
/// Main method
/// </summary>
/// <param name="args">string[]</param>
/// <returns>Return code from Adw.Application.Run()</returns>
public static int Main(string[] args) => new Program(args).Run();
/// <summary>
/// Constructs a Program
/// </summary>
public Program(string[] args)
{
if (CultureInfo.CurrentCulture.Equals(CultureInfo.InvariantCulture))
{
CultureInfo.CurrentCulture = new CultureInfo("en-US"); // Fix #465
}
else if (CultureInfo.CurrentCulture.ToString() == "ar-RG")
{
CultureInfo.CurrentCulture = new CultureInfo("ar-EG"); // Fix #211
}
_application = Adw.Application.New("org.nickvision.money", Gio.ApplicationFlags.NonUnique);
_mainWindow = null;
_mainWindowController = new MainWindowController(args);
_mainWindowController.AppInfo.Changelog =
@"* Fixed an issue where the currency conversion service would provide the wrong conversion rate
* Fixed an issue where small converted currency amounts would show as 0
* Improved UX in Currency Converter dialog
* Fixed incorrect display of amounts for locales that use Cape Verdean escudo as currency
* Updated and added translations (Thanks to everyone on Weblate)!";
_application.OnActivate += OnActivate;
if (File.Exists(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)) + "/org.nickvision.money.gresource"))
{
//Load file from program directory, required for `dotnet run`
Gio.Functions.ResourcesRegister(Gio.Functions.ResourceLoad(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)) + "/org.nickvision.money.gresource"));
}
else
{
var prefixes = new List<string> {
Directory.GetParent(Directory.GetParent(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))).FullName).FullName,
Directory.GetParent(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))).FullName,
"/usr"
};
foreach (var prefix in prefixes)
{
if (File.Exists(prefix + "/share/org.nickvision.money/org.nickvision.money.gresource"))
{
Gio.Functions.ResourcesRegister(Gio.Functions.ResourceLoad(Path.GetFullPath(prefix + "/share/org.nickvision.money/org.nickvision.money.gresource")));
break;
}
}
}
}
/// <summary>
/// Runs the program
/// </summary>
/// <returns>Return code from Adw.Application.Run()</returns>
public int Run()
{
try
{
return _application.RunWithSynchronizationContext();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine($"\n\n{ex.StackTrace}");
return -1;
}
}
/// <summary>
/// Occurs when the application is activated
/// </summary>
/// <param name="sender">Gio.Application</param>
/// <param name="e">EventArgs</param>
private async void OnActivate(Gio.Application sender, EventArgs e)
{
//Set Adw Theme
_application.StyleManager!.ColorScheme = _mainWindowController.Theme switch
{
Theme.System => Adw.ColorScheme.PreferLight,
Theme.Light => Adw.ColorScheme.ForceLight,
Theme.Dark => Adw.ColorScheme.ForceDark,
_ => Adw.ColorScheme.PreferLight
};
//Main Window
_mainWindow = new MainWindow(_mainWindowController, _application);
await _mainWindow.StartupAsync();
}
}