diff options
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs')
| -rw-r--r-- | Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs new file mode 100644 index 000000000..84e65e516 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core.Commands; +using Tango.Core.Helpers; +using Tango.PPC.Common; +using Tango.PPC.Common.MachineUpdate; +using Tango.PPC.UI.ViewsContracts; + +namespace Tango.PPC.UI.ViewModels +{ + public class MachineUpdateViewVM : PPCViewModel<IMachineUpdateView> + { + public enum MachineUpdateView + { + + UpdateCheckView, + UpdateCheckErrorView, + UpdateAvailableView, + UpToDateView, + UpdateProgressView, + UpdateCompletedView, + UpdateFailedView, + } + + private MachineUpdateResult _update_result; + + #region Properties + + /// <summary> + /// Gets or sets the machine update manager. + /// </summary> + public IMachineUpdateManager MachineUpdateManager { get; set; } + + private String _latestVersion; + /// <summary> + /// Gets or sets the latest version. + /// </summary> + public String LatestVersion + { + get { return _latestVersion; } + set { _latestVersion = value; RaisePropertyChangedAuto(); } + } + + #endregion + + #region Commands + + /// <summary> + /// Gets or sets the complete command. + /// </summary> + public RelayCommand CompleteCommand { get; set; } + + /// <summary> + /// Gets or sets the install command. + /// </summary> + public RelayCommand UpdateCommand { get; set; } + + /// <summary> + /// Gets or sets the restart command. + /// </summary> + public RelayCommand RestartCommand { get; set; } + + /// <summary> + /// Gets or sets the close command. + /// </summary> + public RelayCommand CloseCommand { get; set; } + + #endregion + + #region Constructors + + public MachineUpdateViewVM(IMachineUpdateManager machineUpdateManager) + { + MachineUpdateManager = machineUpdateManager; + + CompleteCommand = new RelayCommand(CompleteUpdate); + UpdateCommand = new RelayCommand(Update); + RestartCommand = new RelayCommand(CheckForUpdates); + CloseCommand = new RelayCommand(() => + { + NavigationManager.NavigateTo(Common.Navigation.NavigationView.HomeModule); + NavigateTo(MachineUpdateView.UpdateCheckView); + }); + } + + #endregion + + #region Update + + public async void CheckForUpdates() + { + await NavigateTo(MachineUpdateView.UpdateCheckView); + + try + { + var response = await MachineUpdateManager.CheckForUpdate(MachineProvider.Machine.SerialNumber, "http://localhost:51581/"); + + if (response.IsUpdateAvailable) + { + LatestVersion = response.Version; + await NavigateTo(MachineUpdateView.UpdateAvailableView); + } + else + { + await NavigateTo(MachineUpdateView.UpToDateView); + } + } + catch (Exception ex) + { + LogManager.Log(ex, "Error while trying to check for updates."); + await NavigateTo(MachineUpdateView.UpdateFailedView); + } + } + + private async void Update() + { + await NavigateTo(MachineUpdateView.UpdateProgressView); + + LogManager.Log("Starting machine update..."); + + try + { + _update_result = await MachineUpdateManager.Update(MachineProvider.Machine.SerialNumber, "http://localhost:51581/"); + LogManager.Log("Machine update completed."); + await NavigateTo(MachineUpdateView.UpdateCompletedView); + } + catch (Exception ex) + { + LogManager.Log(ex, "Machine update failed."); + await NavigateTo(MachineUpdateView.UpdateFailedView); + } + } + + #endregion + + #region Complete + + private void CompleteUpdate() + { + String updater_exe = Path.Combine(_update_result.UpdatePackagePath, "Tango.PPC.Updater.exe"); + + LogManager.Log("Completing machine setup..."); + LogManager.Log($"Executing '{updater_exe}' with arguments '{PathHelper.GetStartupPath()}'..."); + Process.Start(updater_exe, PathHelper.GetStartupPath()); + LogManager.Log("Terminating application process!"); + Environment.Exit(0); + } + + #endregion + + public override void OnApplicationStarted() + { + + } + + /// <summary> + /// Navigates to the specified view. + /// </summary> + /// <param name="view">The view.</param> + private Task NavigateTo(MachineUpdateView view) + { + return View.NavigateTo(view); + } + } +} |
