aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-02-21 20:21:57 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-02-21 20:21:57 +0200
commit956f9ea033553136ebf199fff30f288dc26fbeb0 (patch)
tree3780e906d8d4f12c5be3836e1704d93d8d4966bd /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels
parent808ce20dbd74862a75499ee0d4e87247ee4479b4 (diff)
downloadTango-956f9ea033553136ebf199fff30f288dc26fbeb0.tar.gz
Tango-956f9ea033553136ebf199fff30f288dc26fbeb0.zip
Working on machine studio update center..
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs6
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs32
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs175
3 files changed, 212 insertions, 1 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
index 7ea7c6fa9..9acf26afd 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
@@ -10,6 +10,7 @@ using Tango.Logging;
using Tango.MachineStudio.Common.Modules;
using Tango.MachineStudio.Common.Navigation;
using Tango.MachineStudio.Common.Notifications;
+using Tango.MachineStudio.Common.StudioApplication;
using Tango.SharedUI;
namespace Tango.MachineStudio.UI.ViewModels
@@ -24,14 +25,17 @@ namespace Tango.MachineStudio.UI.ViewModels
private INavigationManager _navigationManager;
private IStudioModuleLoader _studioModuleLoader;
+ public IStudioApplicationManager ApplicationManager { get; set; }
+
/// <summary>
/// Initializes a new instance of the <see cref="LoadingViewVM"/> class.
/// </summary>
/// <param name="navigationManager">The navigation manager.</param>
/// <param name="studioModuleLoader">The studio module loader.</param>
/// <param name="notificationProvider">The notification provider.</param>
- public LoadingViewVM(INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider)
+ public LoadingViewVM(IStudioApplicationManager applicationManager, INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider)
{
+ ApplicationManager = applicationManager;
_navigationManager = navigationManager;
_studioModuleLoader = studioModuleLoader;
_notificationProvider = notificationProvider;
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
index da73e8eae..acd9e7925 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs
@@ -99,6 +99,16 @@ namespace Tango.MachineStudio.UI.ViewModels
/// </summary>
public RelayCommand SignoutCommand { get; set; }
+ /// <summary>
+ /// Gets or sets the exit command.
+ /// </summary>
+ public RelayCommand ExitCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the update center command.
+ /// </summary>
+ public RelayCommand UpdateCenterCommand { get; set; }
+
private IAuthenticationProvider _authenticationProvider;
/// <summary>
/// Gets or sets the authentication provider.
@@ -169,6 +179,8 @@ namespace Tango.MachineStudio.UI.ViewModels
SignoutCommand = new RelayCommand(SignOut);
DisconnectCommand = new RelayCommand(DisconnectFromMachine, (x) => ApplicationManager.IsMachineConnected && !_isDisconnecting);
OpenModuleInWindowCommand = new RelayCommand<IStudioModule>(OpenModuleInWindow);
+ ExitCommand = new RelayCommand(ExitApplication);
+ UpdateCenterCommand = new RelayCommand(NavigateToUpdateCenter);
}
/// <summary>
@@ -315,6 +327,10 @@ namespace Tango.MachineStudio.UI.ViewModels
base.OnViewAttached();
}
+ /// <summary>
+ /// Opens the module in a new window.
+ /// </summary>
+ /// <param name="module">The module.</param>
private void OpenModuleInWindow(IStudioModule module)
{
if (module == null) return;
@@ -351,5 +367,21 @@ namespace Tango.MachineStudio.UI.ViewModels
_notificationProvider.ShowError("Error popping out module " + module.Name);
}
}
+
+ /// <summary>
+ /// Navigates to update center.
+ /// </summary>
+ private void NavigateToUpdateCenter()
+ {
+ _navigation.NavigateTo(NavigationView.UpdateView);
+ }
+
+ /// <summary>
+ /// Exits the application.
+ /// </summary>
+ private void ExitApplication()
+ {
+ _applicationManager.ShutDown();
+ }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs
new file mode 100644
index 000000000..014aecdb6
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs
@@ -0,0 +1,175 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.MachineStudio.Common.Authentication;
+using Tango.MachineStudio.Common.Navigation;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.MachineStudio.Common.StudioApplication;
+using Tango.MachineStudio.Common.Update;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.UI.ViewModels
+{
+ public enum UpdateStatus
+ {
+ None,
+ CheckingForUpdate,
+ UpToDate,
+ UpdateAvailable,
+ Downloading,
+ Updating,
+ UpdateCompleted,
+ Error,
+ }
+
+ public class UpdateViewVM : ViewModel
+ {
+ private INotificationProvider _notification;
+ private INavigationManager _navigation;
+ private IStudioApplicationManager _application;
+ private IAuthenticationProvider _authentication;
+
+ private UpdateStatus _status;
+ public UpdateStatus Status
+ {
+ get { return _status; }
+ set { _status = value; RaisePropertyChangedAuto(); }
+ }
+
+ private String _latestVersion;
+ public String LatestVersion
+ {
+ get { return _latestVersion; }
+ set { _latestVersion = value; RaisePropertyChangedAuto(); }
+ }
+
+ private double _downloadProgress;
+
+ public double DownloadProgress
+ {
+ get { return _downloadProgress; }
+ set { _downloadProgress = value; RaisePropertyChangedAuto(); }
+ }
+
+ private double _updateProgress;
+
+ public double UpdateProgress
+ {
+ get { return _updateProgress; }
+ set { _updateProgress = value; RaisePropertyChangedAuto(); }
+ }
+
+ public RelayCommand UpdateCommand { get; set; }
+
+ public RelayCommand BackCommand { get; set; }
+
+ public RelayCommand RestartCommand { get; set; }
+
+ public RelayCommand TryAgainCommand { get; set; }
+
+ public UpdateViewVM(INotificationProvider notification, IAuthenticationProvider authentication, INavigationManager navigation, IStudioApplicationManager application)
+ {
+ _notification = notification;
+ _navigation = navigation;
+ _application = application;
+ _authentication = authentication;
+
+ LatestVersion = "1.0.0.2";
+ Status = UpdateStatus.CheckingForUpdate;
+ UpdateCommand = new RelayCommand(StartUpdate, () => Status == UpdateStatus.UpdateAvailable);
+ BackCommand = new RelayCommand(BackToApplication, () => Status != UpdateStatus.Updating);
+ RestartCommand = new RelayCommand(RestartApplication, () => Status == UpdateStatus.UpdateCompleted);
+ TryAgainCommand = new RelayCommand(TryAgain, () => Status == UpdateStatus.CheckingForUpdate);
+ }
+
+ public void OnNavigatedInto()
+ {
+ CheckForUpdates();
+ }
+
+ private void CheckForUpdates()
+ {
+ Status = UpdateStatus.CheckingForUpdate;
+
+ Task.Factory.StartNew(() =>
+ {
+ var service = UpdateServiceHelper.GetUpdateServiceChannel();
+ var client = service.CreateChannel();
+
+ CheckForUpdatesResponse response = client.CheckForUpdates(new CheckForUpdatesRequest()
+ {
+ Email = _authentication.CurrentUser.Email,
+ Password = _authentication.CurrentUser.Password,
+ Version = _application.Version,
+ });
+
+ var a = response;
+
+ Thread.Sleep(5000);
+ Status = UpdateStatus.UpdateAvailable;
+ });
+ }
+
+ private void BackToApplication()
+ {
+ if (Status == UpdateStatus.Downloading)
+ {
+ if (!_notification.ShowQuestion("This will abort all update operations. Are you sure?"))
+ {
+ return;
+ }
+ }
+
+ _navigation.NavigateTo(NavigationView.MainView);
+ Status = UpdateStatus.None;
+ }
+
+ private void StartUpdate()
+ {
+ DownloadProgress = 0;
+ UpdateProgress = 0;
+
+ Status = UpdateStatus.Downloading;
+
+ Task.Factory.StartNew(() =>
+ {
+ for (int i = 0; i < 100; i++)
+ {
+ DownloadProgress++;
+ Thread.Sleep(30);
+ }
+
+ Status = UpdateStatus.Updating;
+
+ for (int i = 0; i < 100; i++)
+ {
+ UpdateProgress++;
+ Thread.Sleep(30);
+ }
+
+ Status = UpdateStatus.UpdateCompleted;
+ });
+ }
+
+ private void TryAgain()
+ {
+ CheckForUpdates();
+ }
+
+ private void RestartApplication()
+ {
+ _application.ShutDown();
+ }
+
+ protected override void RaisePropertyChangedAuto([CallerMemberName] string caller = null)
+ {
+ base.RaisePropertyChangedAuto(caller);
+ InvalidateRelayCommands();
+ }
+ }
+}