aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs87
1 files changed, 65 insertions, 22 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
index ce8b09aa4..09b63cfc9 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs
@@ -7,6 +7,8 @@ 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
@@ -14,6 +16,7 @@ namespace Tango.MachineStudio.UI.ViewModels
public class FirmwareUpgradeViewVM : DialogViewVM
{
private IMachineOperator _operator;
+ private INotificationProvider _notification;
private FileStream _stream;
private FirmwareUpgradeHandler _handler;
@@ -37,27 +40,50 @@ namespace Tango.MachineStudio.UI.ViewModels
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) : base()
+ 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 void BrowseForFile()
+ 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();
}
@@ -65,36 +91,53 @@ namespace Tango.MachineStudio.UI.ViewModels
private async void StartUpgrade()
{
+ CanClose = false;
CurrentPage = 1;
- _stream = new FileStream(SelectedFile, FileMode.Open);
- Handler = await _operator.UpgradeFirmware(_stream);
- Handler.Progress += (_, e) =>
+ try
{
- InvokeUI(() =>
+ _stream = new FileStream(SelectedFile, FileMode.Open);
+ Handler = await _operator.UpgradeFirmware(_stream);
+ Handler.Progress += (_, e) =>
{
- AbortCommand.RaiseCanExecuteChanged();
- });
- };
- Handler.Completed += (_, __) =>
- {
- _stream.Dispose();
- CurrentPage = 2;
- };
- Handler.Canceled += (_, __) =>
- {
- _stream.Dispose();
- };
- Handler.Failed += (_, __) =>
+ 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)
{
- _stream.Dispose();
- };
-
+ CanClose = true;
+ UpgradeError = ex.FlattenMessage();
+ CurrentPage = 3;
+ }
}
private async void AbortUpgrade()
{
+ CanClose = true;
await Handler.Cancel();
+ CurrentPage = 0;
}
}
}