Exemple #1
0
        private void App_Exit(object sender, ExitEventArgs e)
        {
            try
            {
                // グローバルキーフックを解除する
                SharlayanController.UnsubscribeKeyHook();

                Config.Instance.Save();
                ChatOverlaysController.Instance.Stop();
            }
            finally
            {
                this.UnlockDuplicateStart();

                AppLogger.Write("RINGS End.");
                AppLogger.Flush();
            }
        }
Exemple #2
0
        private void App_DispatcherUnhandledException(
            object sender,
            DispatcherUnhandledExceptionEventArgs e)
        {
            try
            {
                // グローバルキーフックを解除する
                SharlayanController.UnsubscribeKeyHook();

                Config.Instance.Save();

                if (this.MainWindow != null)
                {
                    MessageBoxHelper.ShowDialogMessageWindow(
                        "RINGS - Fatal",
                        "予期しない例外を検知しました。アプリケーションを終了します。",
                        e.Exception);
                }
                else
                {
                    MessageBox.Show(
                        "予期しない例外を検知しました。アプリケーションを終了します。\n\n" +
                        e.Exception,
                        "RINGS - Fatal",
                        MessageBoxButton.OK,
                        MessageBoxImage.Error);
                }
            }
            finally
            {
                this.UnlockDuplicateStart();

                AppLogger.Fatal(
                    "Unhandled Exception. 予期しない例外を検知しました。",
                    e.Exception);

                AppLogger.Write("RINGS Abort.");
                AppLogger.Flush();
            }
        }
Exemple #3
0
        private async void App_Startup(object sender, StartupEventArgs e)
        {
            var c = Config.Instance;

            c.SetStartup(c.IsStartupWithWindows);

            // WebBrowser のIEを最新版に指定する
            WebBrowserHelper.SetUseNewestWebBrowser();

            await Task.WhenAll(
                ChatOverlaysController.Instance.StartAsync(),
                SharlayanController.Instance.StartAsync(),
                DiscordBotController.Instance.StartAsync(),
                Task.Run(() =>
            {
                this.SetCredits();

                HelpViewModel.Instance.OfficialSiteUri = new Uri(@"https://github.com/anoyetta/RINGS");
                foreach (var asm in ReferenceAssemblies)
                {
                    HelpViewModel.Instance.AddVersionInfos(asm);
                }

                HelpViewModel.Instance.GetReleaseChannelCallback = () => c.UpdateChannel;
                HelpViewModel.Instance.SetReleaseChannelCallback = value => c.UpdateChannel = value;
            }));

            AppLogger.Write("RINGS is chat communication enhancer for FFXIV, developed by anoyetta and best friends.");
            AppLogger.Write($"{c.AppNameWithVersion} Start.");

#if DEBUG
            /*
             * new SandboxWindow().Show();
             * WebViewOverlay.Instance.ShowUrl(
             *  this.MainWindow,
             *  @"https://www.jma.go.jp/jp/gms/imgs/0/infrared/1/201902251650-00.png");
             */
#endif

            // アップデートを確認する
            UpdateChecker.ShutdownCallback        = () => WPFHelper.Dispatcher.Invoke(() => this.CloseMainWindowCallback?.Invoke());
            UpdateChecker.UpdateSourceUri         = Config.Instance.UpdateSourceUri;
            UpdateChecker.LastUpdateCheckCallback = (lastUpdateTimestamp) =>
            {
                Config.Instance.LastUpdateTimestamp = lastUpdateTimestamp;
                Config.Instance.Save(Config.FileName);
            };

            await this.Dispatcher.InvokeAsync(async() =>
            {
                await Task.Delay(TimeSpan.FromSeconds(0.1));

#if !DEBUG
                await UpdateChecker.IsUpdateAsync(
                    Config.Instance.LastUpdateTimestamp,
                    Config.Instance.UpdateChannel);
#else
#if false
                await UpdateChecker.IsUpdateAsync(
                    Config.Instance.LastUpdateTimestamp,
                    Config.Instance.UpdateChannel);
#else
                // デバッグ用
                // 強制的に最新バージョンを取得する
                await UpdateChecker.IsUpdateAsync(
                    Config.Instance.LastUpdateTimestamp,
                    Config.Instance.UpdateChannel,
                    UpdateChecker.DefaultUpdateCheckInterval,
                    true);
#endif
#endif
            },
                                              DispatcherPriority.ApplicationIdle);

            // グローバルキーフックをセットする
            SharlayanController.SubscribeKeyHook();
        }