aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2018-12-04 17:44:06 +0200
committerAvi Levkovich <avi@twine-s.com>2018-12-04 17:44:06 +0200
commite64abeba3fd00cf6111b698384650b0e2a530436 (patch)
tree9b44c7d5c160926e6bba548947547090f220b199 /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels
parente5d8713b456d335c19402360f0ba3e8a6db2c31e (diff)
parent704146a52197741c1df351e48098b91ca69a2426 (diff)
downloadTango-e64abeba3fd00cf6111b698384650b0e2a530436.tar.gz
Tango-e64abeba3fd00cf6111b698384650b0e2a530436.zip
merge conflicts
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs143
1 files changed, 143 insertions, 0 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs
new file mode 100644
index 000000000..09b63cfc9
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs
@@ -0,0 +1,143 @@
+using Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.Integration.Operation;
+using Tango.Integration.Upgrade;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.UI.ViewModels
+{
+ public class FirmwareUpgradeViewVM : DialogViewVM
+ {
+ private IMachineOperator _operator;
+ private INotificationProvider _notification;
+ private FileStream _stream;
+
+ private FirmwareUpgradeHandler _handler;
+ public FirmwareUpgradeHandler Handler
+ {
+ get { return _handler; }
+ set { _handler = value; RaisePropertyChangedAuto(); }
+ }
+
+ private String _selectedFile;
+ public String SelectedFile
+ {
+ get { return _selectedFile; }
+ set { _selectedFile = value; RaisePropertyChangedAuto(); }
+ }
+
+ private int _currentPage;
+ public int CurrentPage
+ {
+ get { return _currentPage; }
+ set { _currentPage = value; RaisePropertyChangedAuto(); }
+ }
+
+ private String upgradeError;
+ public String UpgradeError
+ {
+ get { return upgradeError; }
+ set { upgradeError = value; RaisePropertyChangedAuto(); }
+ }
+
+
+ public RelayCommand SelectCommand { get; set; }
+
+ public RelayCommand UpgradeCommand { get; set; }
+
+ public RelayCommand AbortCommand { get; set; }
+
+ public FirmwareUpgradeViewVM(IMachineOperator machineOperator, INotificationProvider notificationProvider) : base()
+ {
+ _notification = notificationProvider;
+ _operator = machineOperator;
+ SelectCommand = new RelayCommand(BrowseForFile);
+ UpgradeCommand = new RelayCommand(StartUpgrade, () => SelectedFile != null);
+ AbortCommand = new RelayCommand(AbortUpgrade, () => Handler != null && Handler.Status != FirmwareUpgradeStatus.Validating && Handler.Status != FirmwareUpgradeStatus.Activating);
+ }
+
+ private async void BrowseForFile()
+ {
+ OpenFileDialog dlg = new OpenFileDialog();
+ dlg.Title = "Select tango firmware package file";
+ dlg.Filter = "Tango Firmware Package|*.tfp";
+ if (dlg.ShowDialog().Value)
+ {
+ try
+ {
+ using (FileStream fs = new FileStream(dlg.FileName, FileMode.Open))
+ {
+ var info = await _operator.GetFirmwarePackageInfo(fs);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex);
+ _notification.ShowError("The selected package seems to be invalid.");
+ return;
+ }
+
+ SelectedFile = dlg.FileName;
+ InvalidateRelayCommands();
+ }
+ }
+
+ private async void StartUpgrade()
+ {
+ CanClose = false;
+ CurrentPage = 1;
+
+ try
+ {
+ _stream = new FileStream(SelectedFile, FileMode.Open);
+ Handler = await _operator.UpgradeFirmware(_stream);
+ Handler.Progress += (_, e) =>
+ {
+ InvokeUI(() =>
+ {
+ AbortCommand.RaiseCanExecuteChanged();
+ });
+ };
+ Handler.Completed += (_, __) =>
+ {
+ CanClose = true;
+ _stream.Dispose();
+ CurrentPage = 2;
+ };
+ Handler.Canceled += (_, __) =>
+ {
+ CanClose = true;
+ _stream.Dispose();
+ CurrentPage = 0;
+ };
+ Handler.Failed += (_, ex) =>
+ {
+ UpgradeError = ex.FlattenMessage();
+ CanClose = true;
+ _stream.Dispose();
+ CurrentPage = 3;
+ };
+ }
+ catch (Exception ex)
+ {
+ CanClose = true;
+ UpgradeError = ex.FlattenMessage();
+ CurrentPage = 3;
+ }
+ }
+
+ private async void AbortUpgrade()
+ {
+ CanClose = true;
+ await Handler.Cancel();
+ CurrentPage = 0;
+ }
+ }
+}