private Task <ObservableDiagram> RenderChordAsync(IChordFinderResult result) { return(Task <ObservableDiagram> .Factory.StartNew(() => { ObservableDiagram od = null; AppVM.DoOnUIThread(() => { try { od = new ObservableDiagram(result.ToDiagram(Style), name: Strings.FinderResultDiagramName); od.PostEditCallback = (changed) => { if (changed) { od.Refresh(); } }; } catch (Exception ex) { ExceptionUtils.HandleException(ex); } }); return od; })); }
private void FirstRun() { // Turn off first-run so it doesn't run next time IsFirstRun = false; AppVM.DoOnUIThread(() => { if (UpdateUtils.UpdateEnabled) { Messenger.Default.Send(new ConfirmationMessage(Strings.FirstRunUpdateEnabledPrompt, (enableAutoUpdate) => { try { UpdateUtils.CheckUpdateOnStart = enableAutoUpdate; } catch (Exception ex) { ExceptionUtils.HandleException(ex); } })); } else { Messenger.Default.Send(new ChordiousMessage(Strings.FirstRunMessage)); } }); }
protected void Render() { AppVM.DoOnUIThread(() => { ImageObject = AppVM.SvgTextToImage(SvgText, TotalWidth, TotalHeight, IsEditMode); }); }
private static void Update(InstallerInfo installerInfo) { if (null == installerInfo) { throw new ArgumentNullException("installerInfo"); } if (!IsConnectedToInternet) { throw new UpdateNoInternetException(); } string tempPath = Path.GetTempPath(); string msiPath = Path.Combine(tempPath, "MzingaSetup.msi"); if (File.Exists(msiPath)) { File.Delete(msiPath); } using (WebClient client = new WebClient()) { client.Headers["User-Agent"] = _userAgent; SecurityProtocolType oldType = ServicePointManager.SecurityProtocol; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // Fix since Github only supports TLS1.2 client.DownloadFile(installerInfo.Url, msiPath); ServicePointManager.SecurityProtocol = oldType; } string cmdFile = Path.Combine(tempPath, "UpdateMzinga.cmd"); using (StreamWriter sw = new StreamWriter(new FileStream(cmdFile, FileMode.Create))) { sw.WriteLine("msiexec /i \"{0}\" /qb", msiPath); } AppVM.DoOnUIThread(() => { Process p = new Process { StartInfo = new ProcessStartInfo("cmd.exe", string.Format("/c {0}", cmdFile)) { CreateNoWindow = true } }; p.Start(); System.Windows.Application.Current.Shutdown(); }); }
public EngineConsoleViewModel() { AppVM.EngineWrapper.EngineTextUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged("EngineOutputText"); }); }; AppVM.EngineWrapper.IsIdleUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { IsIdle = AppVM.EngineWrapper.IsIdle; }); }; }
private static void Update(InstallerInfo installerInfo) { if (null == installerInfo) { throw new ArgumentNullException("installerInfo"); } if (!IsConnectedToInternet) { throw new UpdateNoInternetException(); } string tempPath = Path.GetTempPath(); string msiPath = Path.Combine(tempPath, "ChordiousSetup.msi"); if (File.Exists(msiPath)) { File.Delete(msiPath); } using (WebClient client = new WebClient()) { client.Headers["User-Agent"] = _userAgent; client.DownloadFile(installerInfo.Url, msiPath); } string cmdFile = Path.Combine(tempPath, "UpdateChordious.cmd"); using (StreamWriter sw = new StreamWriter(new FileStream(cmdFile, FileMode.Create))) { sw.WriteLine("msiexec /i \"{0}\" /qb", msiPath); } AppVM.DoOnUIThread(() => { Process p = new Process(); p.StartInfo = new ProcessStartInfo("cmd.exe", string.Format("/c {0}", cmdFile)); p.StartInfo.CreateNoWindow = true; p.Start(); App.Current.Shutdown(); }); }
private void FirstRun() { AppVM.DoOnUIThread(() => { // Turn off first-run so it doesn't run next time ViewerConfig.FirstRun = false; Messenger.Default.Send(new ConfirmationMessage(string.Join(Environment.NewLine + Environment.NewLine, "Welcome to Mzinga.Viewer!", "Would you like to check for updates when Mzinga.Viewer starts?", "You can change your mind later in Viewer Options."), (enableAutoUpdate) => { try { ViewerConfig.CheckUpdateOnStart = enableAutoUpdate; } catch (Exception ex) { ExceptionUtils.HandleException(ex); } })); }); }
private void MainViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case nameof(IsPlayMode): case nameof(IsReviewMode): AppVM.DoOnUIThread(() => { RaisePropertyChanged(nameof(Title)); PlayTarget.RaiseCanExecuteChanged(); Pass.RaiseCanExecuteChanged(); UndoLastMove.RaiseCanExecuteChanged(); MoveToStart.RaiseCanExecuteChanged(); MoveBack.RaiseCanExecuteChanged(); MoveForward.RaiseCanExecuteChanged(); MoveToEnd.RaiseCanExecuteChanged(); SwitchToPlayMode.RaiseCanExecuteChanged(); ShowGameMetadata.RaiseCanExecuteChanged(); SwitchToReviewMode.RaiseCanExecuteChanged(); UpdateBoardHistory(); }); break; case nameof(ViewerConfig): AppVM.DoOnUIThread(() => { RaisePropertyChanged(nameof(ShowBoardHistory)); RaisePropertyChanged(nameof(ShowMoveCommentary)); }); break; } }
public void OnLoaded() { Task.Factory.StartNew(async() => { try { AppVM.DoOnUIThread(() => { IsIdle = false; }); if (ViewerConfig.FirstRun) { FirstRun(); } #if WINDOWS_WPF if (ViewerConfig.CheckUpdateOnStart && UpdateUtils.IsConnectedToInternet) { await UpdateUtils.UpdateCheckAsync(true, false); } #endif } catch (Exception ex) { ExceptionUtils.HandleException(ex); } finally { AppVM.DoOnUIThread(() => { IsIdle = true; }); } }); }
public static void UpdateCheck(bool confirmUpdate, bool showUpToDate) { try { IsCheckingforUpdate = true; List <UpdateInfo> updateInfos = GetLatestUpdateInfos(); ReleaseChannel targetReleaseChannel = GetReleaseChannel(); ulong maxVersion = LongVersion(AppVM.FullVersion); UpdateInfo latestVersion = null; bool updateAvailable = false; foreach (UpdateInfo updateInfo in updateInfos) { if (updateInfo.ReleaseChannel == targetReleaseChannel) { ulong updateVersion = LongVersion(updateInfo.Version); if (updateVersion > maxVersion) { updateAvailable = true; latestVersion = updateInfo; maxVersion = updateVersion; } } } if (updateAvailable) { if (confirmUpdate) { string message = string.Format("Mzinga v{0} is available. Would you like to update now?", latestVersion.Version); AppVM.DoOnUIThread(() => { Messenger.Default.Send(new ConfirmationMessage(message, (confirmed) => { try { if (confirmed) { Messenger.Default.Send(new LaunchUrlMessage(latestVersion.Url)); } } catch (Exception ex) { ExceptionUtils.HandleException(new UpdateException(ex)); } })); }); } else { AppVM.DoOnUIThread(() => { Messenger.Default.Send(new LaunchUrlMessage(latestVersion.Url)); }); } } else { if (showUpToDate) { AppVM.DoOnUIThread(() => { Messenger.Default.Send(new InformationMessage("Mzinga is up-to-date.")); }); } } } catch (WebException ex) { if (ex.Status == WebExceptionStatus.Timeout) { TimeoutMS = (int)Math.Min(TimeoutMS * 1.5, MaxTimeoutMS); } if (showUpToDate) { ExceptionUtils.HandleException(new UpdateException(ex)); } } catch (Exception ex) { ExceptionUtils.HandleException(new UpdateException(ex)); } finally { IsCheckingforUpdate = false; } }
public static void UpdateCheck(bool confirmUpdate, bool showUpToDate) { try { IsCheckingforUpdate = true; List <InstallerInfo> installerInfos = GetLatestInstallerInfos(); ReleaseChannel targetReleaseChannel = GetReleaseChannel(); ulong maxVersion = LongVersion(AppViewModel.FullVersion); InstallerInfo latestVersion = null; bool updateAvailable = false; foreach (InstallerInfo installerInfo in installerInfos) { if (installerInfo.ReleaseChannel == targetReleaseChannel) { ulong installerVersion = LongVersion(installerInfo.Version); if (installerVersion > maxVersion) { updateAvailable = true; latestVersion = installerInfo; maxVersion = installerVersion; } } } SetLastUpdateCheck(DateTime.Now); if (updateAvailable) { if (confirmUpdate) { string message = string.Format("Mzinga v{0} is available. Would you like to update now?", latestVersion.Version); AppVM.DoOnUIThread(() => { Messenger.Default.Send(new ConfirmationMessage(message, (confirmed) => { try { if (confirmed) { Update(latestVersion); } } catch (Exception ex) { ExceptionUtils.HandleException(new UpdateException(ex)); } })); }); } else { Update(latestVersion); } } else { if (showUpToDate) { AppVM.DoOnUIThread(() => { Messenger.Default.Send(new InformationMessage("Mzinga is up-to-date.")); }); } } } catch (Exception ex) { ExceptionUtils.HandleException(new UpdateException(ex)); } finally { IsCheckingforUpdate = false; } }
public MainViewModel() { AppVM.EngineWrapper.BoardUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged(nameof(Board)); SaveGame.RaiseCanExecuteChanged(); PlayTarget.RaiseCanExecuteChanged(); Pass.RaiseCanExecuteChanged(); UndoLastMove.RaiseCanExecuteChanged(); MoveToStart.RaiseCanExecuteChanged(); MoveBack.RaiseCanExecuteChanged(); MoveForward.RaiseCanExecuteChanged(); MoveToEnd.RaiseCanExecuteChanged(); FindBestMove.RaiseCanExecuteChanged(); RaisePropertyChanged(nameof(GameState)); if (AppVM.EngineWrapper.GameIsOver && AppVM.EngineWrapper.CurrentGameSettings.GameMode == GameMode.Play) { if (ViewerConfig.PlaySoundEffects) { SoundUtils.PlaySound(GameSound.GameOver); } switch (Board.BoardState) { case BoardState.WhiteWins: Messenger.Default.Send(new InformationMessage("White has won the game.", "Game Over")); break; case BoardState.BlackWins: Messenger.Default.Send(new InformationMessage("Black has won the game.", "Game Over")); break; case BoardState.Draw: Messenger.Default.Send(new InformationMessage("The game is a draw.", "Game Over")); break; } } UpdateBoardHistory(); }); }; AppVM.EngineWrapper.ValidMovesUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged(nameof(ValidMoves)); }); }; AppVM.EngineWrapper.TargetPieceUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged(nameof(TargetMove)); PlayTarget.RaiseCanExecuteChanged(); }); }; AppVM.EngineWrapper.TargetPositionUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged(nameof(TargetMove)); PlayTarget.RaiseCanExecuteChanged(); if (!ViewerConfig.RequireMoveConfirmation) { if (PlayTarget.CanExecute(null) && null != AppVM.EngineWrapper.TargetMove) { // Only fast-play if a move is selected PlayTarget.Execute(null); } else if (Pass.CanExecute(null) && AppVM.EngineWrapper.CanPass) { // Only fast-pass if pass is available Pass.Execute(null); } } }); }; AppVM.EngineWrapper.IsIdleUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { IsIdle = AppVM.EngineWrapper.IsIdle; }); }; AppVM.EngineWrapper.TimedCommandProgressUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { IsRunningTimedCommand = args.IsRunning; TimedCommandProgress = args.Progress; }); }; AppVM.EngineWrapper.MovePlaying += (sender, args) => { if (ViewerConfig.PlaySoundEffects) { SoundUtils.PlaySound(GameSound.Move); } }; AppVM.EngineWrapper.MoveUndoing += (sender, args) => { if (ViewerConfig.PlaySoundEffects) { SoundUtils.PlaySound(GameSound.Undo); } }; AppVM.EngineWrapper.GameModeChanged += (sender, args) => { RaisePropertyChanged(nameof(IsPlayMode)); RaisePropertyChanged(nameof(IsReviewMode)); }; PropertyChanged += MainViewModel_PropertyChanged; }
public MainViewModel() { AppVM.EngineWrapper.BoardUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged("Board"); PlayTarget.RaiseCanExecuteChanged(); Pass.RaiseCanExecuteChanged(); FindBestMove.RaiseCanExecuteChanged(); UndoLastMove.RaiseCanExecuteChanged(); RaisePropertyChanged("GameState"); switch (Board.BoardState) { case BoardState.WhiteWins: Messenger.Default.Send(new InformationMessage(Strings.GameStateWhiteWon, Strings.GameOverTitle)); break; case BoardState.BlackWins: Messenger.Default.Send(new InformationMessage(Strings.GameStateBlackWon, Strings.GameOverTitle)); break; case BoardState.Draw: Messenger.Default.Send(new InformationMessage(Strings.GameStateDraw, Strings.GameOverTitle)); break; } }); }; AppVM.EngineWrapper.ValidMovesUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged("ValidMoves"); }); }; AppVM.EngineWrapper.BoardHistoryUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged("BoardHistory"); }); }; AppVM.EngineWrapper.TargetPieceUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged("TargetMove"); PlayTarget.RaiseCanExecuteChanged(); }); }; AppVM.EngineWrapper.TargetPositionUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { RaisePropertyChanged("TargetMove"); PlayTarget.RaiseCanExecuteChanged(); if (!ViewerConfig.RequireMoveConfirmation) { if (PlayTarget.CanExecute(null) && null != AppVM.EngineWrapper.TargetMove) { // Only fast-play if a move is selected PlayTarget.Execute(null); } else if (Pass.CanExecute(null) && AppVM.EngineWrapper.CanPass) { // Only fast-pass if pass is available Pass.Execute(null); } } }); }; AppVM.EngineWrapper.IsIdleUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { IsIdle = AppVM.EngineWrapper.IsIdle; }); }; AppVM.EngineWrapper.TimedCommandProgressUpdated += (sender, args) => { AppVM.DoOnUIThread(() => { IsRunningTimedCommand = args.IsRunning; TimedCommandProgress = args.Progress; }); }; }
public static void UpdateCheck(bool confirmUpdate, bool showUpToDate) { try { IsCheckingforUpdate = true; List <InstallerInfo> installerInfos = GetLatestInstallerInfos(); ReleaseChannel targetReleaseChannel = GetReleaseChannel(); ulong maxVersion = LongVersion(AppVM.FullVersion); InstallerInfo latestVersion = null; bool updateAvailable = false; foreach (InstallerInfo installerInfo in installerInfos) { if (installerInfo.ReleaseChannel == targetReleaseChannel) { ulong installerVersion = LongVersion(installerInfo.Version); if (installerVersion > maxVersion) { updateAvailable = true; latestVersion = installerInfo; maxVersion = installerVersion; } } } LastUpdateCheck = DateTime.Now; if (updateAvailable) { if (confirmUpdate) { string message = string.Format(Strings.ChordiousUpdateAvailableUpdateNowMessageFormat, latestVersion.Version); AppVM.DoOnUIThread(() => { Messenger.Default.Send(new ConfirmationMessage(message, (confirmed) => { try { if (confirmed) { Update(latestVersion); } } catch (Exception ex) { ExceptionUtils.HandleException(new UpdateException(ex)); } })); }); } else { Update(latestVersion); } } else { if (showUpToDate) { AppVM.DoOnUIThread(() => { Messenger.Default.Send(new ChordiousMessage(Strings.ChordiousUpdateNotAvailableMessage)); }); } } } catch (Exception ex) { ExceptionUtils.HandleException(new UpdateException(ex)); } finally { IsCheckingforUpdate = false; } }