Beispiel #1
0
#pragma warning disable SS001 // Async methods should return a Task to make them awaitable
        protected override async void OnStartup(StartupEventArgs e)
        {
            await Memenim.MainWindow.Instance.ShowLoadingGrid(true)
            .ConfigureAwait(true);

            MainWindow = Memenim.MainWindow.Instance;

            await Task.Delay(TimeSpan.FromMilliseconds(200))
            .ConfigureAwait(true);

            Memenim.MainWindow.Instance.Show();

            base.OnStartup(e);

            await Task.Delay(TimeSpan.FromMilliseconds(500))
            .ConfigureAwait(true);

            LocalizationUtils.ReloadLocalizations <XamlLocalizationProvider>();
            LocalizationUtils.SwitchLocalization(
                SettingsManager.AppSettings.Language);
            LocalizationUtils.SetDefaultCulture("en-US");

            if (LocalizationUtils.Localizations.Count == 0)
            {
                return;
            }

            await StorageManager.Initialize()
            .ConfigureAwait(true);

            ProtocolManager.RegisterAll();

            await Task.Run(async() =>
            {
                LogManager.DeleteLogs(SettingsManager.AppSettings
                                      .LogRetentionDaysPeriod);

                try
                {
                    if (string.IsNullOrEmpty(
                            SettingsManager.PersistentSettings.GetCurrentUserLogin()))
                    {
                        Dispatcher.Invoke(() =>
                        {
                            NavigationController.Instance.RequestPage <LoginPage>();
                        });

                        return;
                    }

                    if (!SettingsManager.PersistentSettings.SetCurrentUser(
                            SettingsManager.PersistentSettings.GetCurrentUserLogin()))
                    {
                        SettingsManager.PersistentSettings.RemoveUser(
                            SettingsManager.PersistentSettings.GetCurrentUserLogin());

                        Dispatcher.Invoke(() =>
                        {
                            NavigationController.Instance.RequestPage <LoginPage>();
                        });

                        return;
                    }

                    var result = await PostApi.Get(
                        SettingsManager.PersistentSettings.CurrentUser.Token,
                        PostType.Popular, 1)
                                 .ConfigureAwait(false);

                    if (result.IsError &&
                        (result.Code == 400 || result.Code == 401))
                    {
                        SettingsManager.PersistentSettings.RemoveUser(
                            SettingsManager.PersistentSettings.CurrentUser.Login);

                        Dispatcher.Invoke(() =>
                        {
                            NavigationController.Instance.RequestPage <LoginPage>();
                        });

                        return;
                    }

                    Dispatcher.Invoke(() =>
                    {
                        NavigationController.Instance.RequestPage <FeedPage>();
                    });

                    if (!string.IsNullOrEmpty(AppStartupUri))
                    {
                        ProtocolManager.ParseUri(AppStartupUri);
                    }
                }
                catch (Exception)
                {
                    Dispatcher.Invoke(() =>
                    {
                        NavigationController.Instance.RequestPage <LoginPage>();
                    });
                }
            }).ConfigureAwait(true);

            await Task.Delay(TimeSpan.FromSeconds(1.5))
            .ConfigureAwait(true);

            await Memenim.MainWindow.Instance.ShowLoadingGrid(false)
            .ConfigureAwait(true);
        }