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); }
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); } } } }
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); }
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); }