2020-07-03 00:24:31 -07:00
|
|
|
using Microsoft.Win32;
|
|
|
|
using System;
|
|
|
|
using System.IO;
|
2020-12-16 19:55:06 -08:00
|
|
|
using System.Text.Json;
|
2020-07-03 00:24:31 -07:00
|
|
|
using System.Windows;
|
|
|
|
|
|
|
|
namespace SourceGit {
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Application.
|
|
|
|
/// </summary>
|
|
|
|
public partial class App : Application {
|
|
|
|
/// <summary>
|
2020-12-16 19:55:06 -08:00
|
|
|
/// Getter/Setter for application user setting.
|
2020-07-03 00:24:31 -07:00
|
|
|
/// </summary>
|
2020-12-16 19:55:06 -08:00
|
|
|
public static Preference Setting { get; set; }
|
2020-07-03 00:24:31 -07:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Check if GIT has been configured.
|
|
|
|
/// </summary>
|
|
|
|
public static bool IsGitConfigured {
|
|
|
|
get {
|
2020-12-16 19:55:06 -08:00
|
|
|
return !string.IsNullOrEmpty(Setting.Tools.GitExecutable)
|
|
|
|
&& File.Exists(Setting.Tools.GitExecutable);
|
2020-07-03 00:24:31 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Raise error message.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="message"></param>
|
2020-08-06 00:41:25 -07:00
|
|
|
public static void RaiseError(string msg) {
|
2020-08-07 08:40:23 -07:00
|
|
|
Current.Dispatcher.Invoke(() => {
|
|
|
|
(Current.MainWindow as UI.Launcher).Errors.Add(msg);
|
|
|
|
});
|
2020-08-04 18:32:24 -07:00
|
|
|
}
|
|
|
|
|
2020-12-23 04:40:12 -08:00
|
|
|
/// <summary>
|
|
|
|
/// Open repository.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="repo"></param>
|
|
|
|
public static void Open(Git.Repository repo) {
|
|
|
|
(Current.MainWindow as UI.Launcher).Open(repo);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Save settings.
|
|
|
|
/// </summary>
|
|
|
|
public static void SaveSetting() {
|
|
|
|
var settingFile = Path.Combine(
|
|
|
|
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
|
|
|
|
"SourceGit",
|
|
|
|
"preference.json");
|
|
|
|
|
|
|
|
var dir = Path.GetDirectoryName(settingFile);
|
|
|
|
if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);
|
|
|
|
|
|
|
|
var data = JsonSerializer.Serialize(Setting, new JsonSerializerOptions() { WriteIndented = true });
|
|
|
|
File.WriteAllText(settingFile, data);
|
|
|
|
}
|
|
|
|
|
2020-07-03 00:24:31 -07:00
|
|
|
/// <summary>
|
|
|
|
/// Startup event.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
/// <param name="e"></param>
|
|
|
|
private void OnAppStartup(object sender, StartupEventArgs e) {
|
2020-07-22 23:04:42 -07:00
|
|
|
// Use this app as a sequence editor?
|
2020-12-23 04:40:12 -08:00
|
|
|
if (OpenAsEditor(e)) return;
|
2020-07-22 23:04:42 -07:00
|
|
|
|
2020-12-16 19:55:06 -08:00
|
|
|
// Load settings.
|
|
|
|
var settingFile = Path.Combine(
|
|
|
|
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
|
|
|
|
"SourceGit",
|
|
|
|
"preference.json");
|
|
|
|
if (!File.Exists(settingFile)) {
|
|
|
|
Setting = new Preference();
|
|
|
|
} else {
|
|
|
|
Setting = JsonSerializer.Deserialize<Preference>(File.ReadAllText(settingFile));
|
|
|
|
}
|
|
|
|
|
2020-07-03 00:24:31 -07:00
|
|
|
// Try auto configure git via registry.
|
|
|
|
if (!IsGitConfigured) {
|
|
|
|
var root = RegistryKey.OpenBaseKey(
|
|
|
|
RegistryHive.LocalMachine,
|
|
|
|
Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32);
|
|
|
|
|
|
|
|
var git = root.OpenSubKey("SOFTWARE\\GitForWindows");
|
|
|
|
if (git != null) {
|
2020-12-16 19:55:06 -08:00
|
|
|
Setting.Tools.GitExecutable = Path.Combine(
|
2020-12-23 04:40:12 -08:00
|
|
|
git.GetValue("InstallPath") as string,
|
|
|
|
"bin",
|
2020-07-03 00:24:31 -07:00
|
|
|
"git.exe");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Apply themes
|
2020-12-16 19:55:06 -08:00
|
|
|
if (Setting.UI.UseLightTheme) {
|
2020-07-03 00:24:31 -07:00
|
|
|
foreach (var rs in Current.Resources.MergedDictionaries) {
|
|
|
|
if (rs.Source != null && rs.Source.OriginalString.StartsWith("pack://application:,,,/Resources/Themes/")) {
|
|
|
|
rs.Source = new Uri("pack://application:,,,/Resources/Themes/Light.xaml", UriKind.Absolute);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Show main window
|
2020-08-04 18:32:24 -07:00
|
|
|
Current.MainWindow = new UI.Launcher();
|
|
|
|
Current.MainWindow.Show();
|
2020-07-03 00:24:31 -07:00
|
|
|
}
|
|
|
|
|
2020-11-29 23:21:45 -08:00
|
|
|
/// <summary>
|
2020-12-23 04:40:12 -08:00
|
|
|
/// Deactivated event.
|
2020-11-29 23:21:45 -08:00
|
|
|
/// </summary>
|
2020-12-23 04:40:12 -08:00
|
|
|
/// <param name="sender"></param>
|
|
|
|
/// <param name="e"></param>
|
|
|
|
private void OnAppDeactivated(object sender, EventArgs e) {
|
|
|
|
GC.Collect();
|
|
|
|
SaveSetting();
|
2020-11-29 23:21:45 -08:00
|
|
|
}
|
|
|
|
|
2020-12-16 19:55:06 -08:00
|
|
|
/// <summary>
|
2020-12-23 04:40:12 -08:00
|
|
|
/// Try to open app as git editor
|
2020-12-16 19:55:06 -08:00
|
|
|
/// </summary>
|
2020-12-23 04:40:12 -08:00
|
|
|
/// <param name="e"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private bool OpenAsEditor(StartupEventArgs e) {
|
|
|
|
if (e.Args.Length < 3) return false;
|
2020-12-16 19:55:06 -08:00
|
|
|
|
2020-12-23 04:40:12 -08:00
|
|
|
switch (e.Args[0]) {
|
|
|
|
case "--sequence":
|
|
|
|
var output = File.CreateText(e.Args[2]);
|
|
|
|
output.Write(File.ReadAllText(e.Args[1]));
|
|
|
|
output.Flush();
|
|
|
|
output.Close();
|
2020-12-16 19:55:06 -08:00
|
|
|
|
2020-12-23 04:40:12 -08:00
|
|
|
Environment.Exit(0);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
2020-12-16 19:55:06 -08:00
|
|
|
|
2020-12-23 04:40:12 -08:00
|
|
|
return true;
|
2020-07-03 00:24:31 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|