public MainWindow() { InitializeComponent(); btnVerify.Content = Text.t("mainwindow_button_verify"); btnOpenInExplorer.Content = Text.t("mainwindow_button_openfolder"); btnMakeShortcut.Content = Text.t("mainwindow_button_shortcut"); btnShowHideLog.Content = Text.t("mainwindow_button_more"); logFlyout.Header = Text.t("mainwindow_logflyout_header"); this.Visibility = System.Windows.Visibility.Collapsed; labelDownloadStatus.Text = ""; btnCancel.Visibility = System.Windows.Visibility.Hidden; var fi = new FileInfo(Assembly.GetExecutingAssembly().Location); string rootPath = Directory.GetCurrentDirectory(); string appPath = rootPath + "\\" + fi.Name + ".catflap"; Directory.SetCurrentDirectory(rootPath); Logger.OnLogMessage += (string msg) => logTextBox.Dispatcher.Invoke((Action)(() => { logTextBox.Text += msg; logTextBox.ScrollToEnd(); })); Assembly assembly = Assembly.GetExecutingAssembly(); FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); string major = String.Join(".", fvi.FileVersion.Split('.').Take(3)); string point = String.Join(".", fvi.FileVersion.Split('.').Skip(3)); btnHelp.Content = "catflap v" + major + (point == "0" ? "" : "." + point); Logger.Info("Version: " + btnHelp.Content); if (!File.Exists(appPath + "\\catflap.json")) { Logger.Info("First time setup."); var sw = new SetupWindow(); if (!sw.SetupOk) { var ret = sw.ShowDialog(); if (!ret.Value) { Application.Current.Shutdown(); return; } } } EmbeddedResources.Update(appPath); this.Activated += new EventHandler((o, ea) => { if (repository.LatestManifest != null) { repository.UpdateStatus(); this.RefreshProgress(UIState.Unchanged); } }); this.KeyDown += new KeyEventHandler(async (o, kea) => { if (kea.Key == Key.F5 && cts == null) { await UpdateRootManifest(); repository.UpdateStatus(); this.RefreshProgress(UIState.OK); } }); this.repository = new Repository(rootPath, appPath); if (File.Exists(appPath + "/log.txt")) File.Delete(appPath + "/log.txt"); if (appPath != null && Directory.Exists(appPath)) Logger.OnLogMessage += (string msg) => { if (msg != null) try { System.IO.File.AppendAllText(appPath + "/log.txt", msg); } catch (IOException) { } // Cannot write log file. Weird but nothing to be done about it. }; this.repository.OnDownloadStatusInfoChanged += OnDownloadStatusInfoChangedHandler; this.repository.OnDownloadMessage += (string message, bool show) => { if (show) labelDownloadStatus.Dispatcher.Invoke((Action)(() => labelDownloadStatus.Text = message.Trim())); Logger.Info(message); }; Logger.Info("argv: " + String.Join(" ", App.mArgs)); if (App.mArgs.Contains("-nolock")) { App.mArgs = App.mArgs.Where(x => x != "-nolock").ToArray(); IgnoreRepositoryLock = true; } if (App.mArgs.Contains("-simulate")) { repository.Simulate = true; } if (App.mArgs.Contains("-nocheck")) { App.mArgs = App.mArgs.Where(x => x != "-nocheck").ToArray(); this.repository.AlwaysAssumeCurrent = true; } if (App.mArgs.Contains("-fixperm")) { if (!Utils.IsUserAdministrator()) { MessageBox.Show("-fixperm requires Administator privileges, but " + "I can't request those myself.\n\nTry 'Run as administrator' with a shortcut."); } else if (MessageBox.Show( "This resets all permissions on the current repository to the currently logged in user, " + "removes all custom object ACLs and only allows inherited access rights " + "(those of the parent directory " + Directory.GetParent(rootPath) + ") to apply.\n\n" + "!! This is a destructive operation and cannot be undone.\n" + "!! This will not touch any files outside of the repository root " + rootPath + ".\n\n" + "Continue?", "Force-reset permissions on complete repository?", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { Utils.FixPermissions(rootPath); MessageBox.Show("All done. Exiting."); } Application.Current.Shutdown(); } else if (App.mArgs.Contains("-run")) { App.mArgs = App.mArgs.Where(x => x != "-run").ToArray(); UpdateAndRun(false); } else if (App.mArgs.Contains("-runwait")) { App.mArgs = App.mArgs.Where(x => x != "-runwait").ToArray(); UpdateAndRun(false); } else UpdateRootManifest(); }
public MainWindow() { InitializeComponent(); labelDownloadStatus.Text = ""; btnCancel.Visibility = System.Windows.Visibility.Hidden; var fi = new FileInfo(Assembly.GetExecutingAssembly().Location); rootPath = Directory.GetCurrentDirectory(); Log("%root% = " + rootPath); appPath = rootPath + "\\" + fi.Name + ".catflap"; Log("%app% = " + appPath); Directory.SetCurrentDirectory(rootPath); if (!File.Exists(appPath + "\\catflap.json")) { var sw = new SetupWindow(); if (!sw.SetupOk) { var ret = sw.ShowDialog(); if (!ret.Value) { Application.Current.Shutdown(); return; } } } Assembly assembly = Assembly.GetExecutingAssembly(); FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); string major = String.Join(".", fvi.FileVersion.Split('.').Take(3)); string point = String.Join(".", fvi.FileVersion.Split('.').Skip(3)); foreach (string src in resourcesToPurge) { var x = appPath + "\\" + src; if (File.Exists(x)) { Log("Deleting obsolete bundled file: " + src); File.Delete(x); } } foreach (string src in resourcesToUnpack) { var dst = src; if (dst.EndsWith(".gz")) dst = dst.Substring(0, dst.Length - 3); if (!File.Exists(appPath + "\\" + dst) || File.GetLastWriteTime(appPath + "\\" + dst) != File.GetLastWriteTime(fi.FullName)) { Log("Extracting bundled file: " + src); App.ExtractResource(src, appPath + "\\" + dst); File.SetLastWriteTime(appPath + "\\" + dst, File.GetLastWriteTime(fi.FullName)); } } this.Activated += new EventHandler((o, ea) => { if (repository.LatestManifest != null) { repository.UpdateStatus(); this.SetGlobalStatus(); } }); this.KeyDown += new KeyEventHandler(async (o, kea) => { if (kea.Key == Key.F5) { await UpdateRootManifest(); repository.UpdateStatus(); this.SetGlobalStatus(); } }); this.repository = new Repository(rootPath, appPath); this.repository.OnDownloadStatusInfoChanged += OnDownloadStatusInfoChangedHandler; this.repository.OnDownloadMessage += (string message, bool show) => { if (show) labelDownloadStatus.Dispatcher.Invoke((Action)(() => labelDownloadStatus.Text = message.Trim())); Log(message); }; if (App.mArgs.Contains("-nolock")) { App.mArgs = App.mArgs.Where(x => x != "-nolock").ToArray(); IgnoreRepositoryLock = true; } if (App.mArgs.Contains("-simulate")) { repository.Simulate = true; } if (App.mArgs.Contains("-nocheck")) { App.mArgs = App.mArgs.Where(x => x != "-nocheck").ToArray(); this.repository.AlwaysAssumeCurrent = true; } if (App.mArgs.Contains("-run")) { App.mArgs = App.mArgs.Where(x => x != "-run").ToArray(); UpdateAndRun(false); } else if (App.mArgs.Contains("-runwait")) { App.mArgs = App.mArgs.Where(x => x != "-runwait").ToArray(); UpdateAndRun(false); } else UpdateRootManifest(); }
public MainWindow() { InitializeComponent(); labelDownloadStatus.Text = ""; btnCancel.Visibility = System.Windows.Visibility.Hidden; var fi = new FileInfo(Assembly.GetExecutingAssembly().Location); rootPath = Directory.GetCurrentDirectory(); Log("%root% = " + rootPath); appPath = rootPath + "\\" + fi.Name + ".catflap"; Log("%app% = " + appPath); Directory.SetCurrentDirectory(rootPath); if (!File.Exists(appPath + "\\catflap.json")) { var sw = new SetupWindow(); if (!sw.SetupOk) { var ret = sw.ShowDialog(); if (!ret.Value) { Application.Current.Shutdown(); return; } } } Assembly assembly = Assembly.GetExecutingAssembly(); FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); string major = String.Join(".", fvi.FileVersion.Split('.').Take(3)); string point = String.Join(".", fvi.FileVersion.Split('.').Skip(3)); foreach (string src in resourcesToPurge) { var x = appPath + "\\" + src; if (File.Exists(x)) { Log("Deleting obsolete bundled file: " + src); File.Delete(x); } } foreach (string src in resourcesToUnpack) { var dst = src; if (dst.EndsWith(".gz")) { dst = dst.Substring(0, dst.Length - 3); } if (!File.Exists(appPath + "\\" + dst) || File.GetLastWriteTime(appPath + "\\" + dst) != File.GetLastWriteTime(fi.FullName)) { Log("Extracting bundled file: " + src); App.ExtractResource(src, appPath + "\\" + dst); File.SetLastWriteTime(appPath + "\\" + dst, File.GetLastWriteTime(fi.FullName)); } } this.Activated += new EventHandler((o, ea) => { if (repository.LatestManifest != null) { repository.UpdateStatus(); this.SetGlobalStatus(); } }); this.KeyDown += new KeyEventHandler(async(o, kea) => { if (kea.Key == Key.F5) { await UpdateRootManifest(); repository.UpdateStatus(); this.SetGlobalStatus(); } }); this.repository = new Repository(rootPath, appPath); this.repository.OnDownloadStatusInfoChanged += OnDownloadStatusInfoChangedHandler; this.repository.OnDownloadMessage += (string message, bool show) => { if (show) { labelDownloadStatus.Dispatcher.Invoke((Action)(() => labelDownloadStatus.Text = message.Trim())); } Log(message); }; if (App.mArgs.Contains("-nolock")) { App.mArgs = App.mArgs.Where(x => x != "-nolock").ToArray(); IgnoreRepositoryLock = true; } if (App.mArgs.Contains("-simulate")) { repository.Simulate = true; } if (App.mArgs.Contains("-nocheck")) { App.mArgs = App.mArgs.Where(x => x != "-nocheck").ToArray(); this.repository.AlwaysAssumeCurrent = true; } if (App.mArgs.Contains("-run")) { App.mArgs = App.mArgs.Where(x => x != "-run").ToArray(); UpdateAndRun(false); } else if (App.mArgs.Contains("-runwait")) { App.mArgs = App.mArgs.Where(x => x != "-runwait").ToArray(); UpdateAndRun(false); } else { UpdateRootManifest(); } }