Exemple #1
0
        private bool ShowVersionList(CookieContainer container, out FactorioOnlineVersion selectedVersion)
        {
            selectedVersion = null;
            List <FactorioOnlineVersion> versions;

            try
            {
                if (!FactorioWebsite.GetVersions(container, out versions))
                {
                    MessageBox.Show(Window,
                                    App.Instance.GetLocalizedMessage("RetrievingVersions", MessageType.Error),
                                    App.Instance.GetLocalizedMessageTitle("RetrievingVersions", MessageType.Error),
                                    MessageBoxButton.OK, MessageBoxImage.Error);
                    return(false);
                }
            }
            catch (WebException)
            {
                MessageBox.Show(Window,
                                App.Instance.GetLocalizedMessage("RetrievingVersions", MessageType.Error),
                                App.Instance.GetLocalizedMessageTitle("RetrievingVersions", MessageType.Error),
                                MessageBoxButton.OK, MessageBoxImage.Error);
                return(false);
            }
            versions.ForEach(item => item.Downloadable = GetVersionDownloadable(item));

            var versionListWindow = new VersionListWindow {
                Owner = Window
            };
            var versionListViewModel = (VersionListViewModel)versionListWindow.ViewModel;

            versions.ForEach(item => versionListViewModel.FactorioVersions.Add(item));

            bool?versionResult = versionListWindow.ShowDialog();

            selectedVersion = versionListViewModel.SelectedVersion;
            return(versionResult.HasValue && versionResult.Value);
        }
Exemple #2
0
        private async Task DownloadOnlineVersion()
        {
            CookieContainer container;

            if (GlobalCredentials.Instance.LogIn(Window, out container))
            {
                FactorioOnlineVersion selectedVersion;
                if (ShowVersionList(container, out selectedVersion))
                {
                    var cancellationSource = new CancellationTokenSource();
                    var progressWindow     = new ProgressWindow {
                        Owner = Window
                    };
                    var progressViewModel = (ProgressViewModel)progressWindow.ViewModel;
                    progressViewModel.ActionName          = App.Instance.GetLocalizedResourceString("DownloadingAction");
                    progressViewModel.ProgressDescription = string.Format(App.Instance.GetLocalizedResourceString("DownloadingDescription"), selectedVersion.DownloadUrl);
                    progressViewModel.CanCancel           = true;
                    progressViewModel.CancelRequested    += (sender, e) => cancellationSource.Cancel();

                    FactorioVersion newVersion;
                    try
                    {
                        Task closeWindowTask = null;
                        try
                        {
                            DirectoryInfo          directory    = App.Instance.Settings.GetFactorioDirectory();
                            Task <FactorioVersion> downloadTask = FactorioWebsite.DownloadFactorioPackageAsync(selectedVersion, directory, container, new Progress <double>(p =>
                            {
                                if (p > 1)
                                {
                                    progressViewModel.ProgressDescription = App.Instance.GetLocalizedResourceString("ExtractingDescription");
                                    progressViewModel.IsIndeterminate     = true;
                                    progressViewModel.CanCancel           = false;
                                }
                                else
                                {
                                    progressViewModel.Progress = p;
                                }
                            }), cancellationSource.Token);

                            closeWindowTask = downloadTask.ContinueWith(t => progressWindow.Dispatcher.Invoke(progressWindow.Close));
                            progressWindow.ShowDialog();

                            newVersion = await downloadTask;
                        }
                        finally
                        {
                            if (closeWindowTask != null)
                            {
                                await closeWindowTask;
                            }
                        }
                    }
                    catch (HttpRequestException)
                    {
                        MessageBox.Show(Window,
                                        App.Instance.GetLocalizedMessage("InternetConnection", MessageType.Error),
                                        App.Instance.GetLocalizedMessageTitle("InternetConnection", MessageType.Error),
                                        MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }

                    if (newVersion != null)
                    {
                        FactorioVersions.Add(newVersion);
                    }
                }
            }
        }
Exemple #3
0
        public bool LogIn(Window owner, out CookieContainer sessionContainer)
        {
            sessionContainer = null;

            bool failed = false;

            if (IsLoggedInWithCookie()) // Credentials and cookie available.
            {
                failed = !FactorioWebsite.EnsureLoggedIn(container);

                if (failed)
                {
                    container = new CookieContainer();
                    failed    = !FactorioWebsite.LogIn(container, Username, Password);
                }
            }
            else if (IsLoggedIn()) // Only credentials available.
            {
                container = new CookieContainer();
                failed    = !FactorioWebsite.LogIn(container, Username, Password);
            }

            if (failed)
            {
                token     = null;
                container = null;
            }

            while (!IsLoggedInWithCookie())
            {
                var loginWindow = new LoginWindow
                {
                    Owner = owner,
                    SaveCredentialsBox = { IsChecked = App.Instance.Settings.SaveCredentials },
                    FailedText         = { Visibility = failed ? Visibility.Visible : Visibility.Collapsed },
                };
                bool?loginResult = loginWindow.ShowDialog();
                if (loginResult == null || loginResult == false)
                {
                    return(false);
                }
                username = loginWindow.UsernameBox.Text;
                password = loginWindow.PasswordBox.SecurePassword;

                bool saveCredentials = loginWindow.SaveCredentialsBox.IsChecked ?? false;
                App.Instance.Settings.SaveCredentials = saveCredentials;

                container = new CookieContainer();
                failed    = !FactorioWebsite.LogIn(container, Username, Password);
                if (failed)
                {
                    token     = null;
                    container = null;
                }
                else if (saveCredentials)
                {
                    Save();
                }
            }

            sessionContainer = container;
            return(true);
        }
Exemple #4
0
        private async Task <FactorioOnlineVersion> ShowVersionList(string token)
        {
            List <FactorioOnlineVersion> versions = null;

            try
            {
                var progressWindow = new ProgressWindow {
                    Owner = Window
                };
                var progressViewModel = (ProgressViewModel)progressWindow.ViewModel;
                progressViewModel.ActionName      = App.Instance.GetLocalizedResourceString("FetchingVersionsAction");
                progressViewModel.IsIndeterminate = true;
                progressViewModel.CanCancel       = false;

                Task closeWindowTask = null;
                try
                {
                    var getVersionsTask = FactorioWebsite.GetVersionsAsync();

                    closeWindowTask = getVersionsTask.ContinueWith(t => progressWindow.Dispatcher.Invoke(progressWindow.Close));
                    progressWindow.ShowDialog();

                    versions = await getVersionsTask;
                }
                finally
                {
                    if (closeWindowTask != null)
                    {
                        await closeWindowTask;
                    }
                }
            }
            catch (WebException)
            {
                MessageBox.Show(Window,
                                App.Instance.GetLocalizedMessage("RetrievingVersions", MessageType.Error),
                                App.Instance.GetLocalizedMessageTitle("RetrievingVersions", MessageType.Error),
                                MessageBoxButton.OK, MessageBoxImage.Error);
                return(null);
            }

            if (versions == null)
            {
                MessageBox.Show(Window,
                                App.Instance.GetLocalizedMessage("RetrievingVersions", MessageType.Error),
                                App.Instance.GetLocalizedMessageTitle("RetrievingVersions", MessageType.Error),
                                MessageBoxButton.OK, MessageBoxImage.Error);
                return(null);
            }

            var versionListWindow = new VersionListWindow {
                Owner = Window
            };
            var versionListViewModel = (VersionListViewModel)versionListWindow.ViewModel;

            versions.ForEach(item => versionListViewModel.FactorioVersions.Add(item));

            bool?versionResult = versionListWindow.ShowDialog();

            if (!(versionResult.HasValue && versionResult.Value))
            {
                return(null);
            }
            return(versionListViewModel.SelectedVersion);
        }