aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs15
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/PowerOffViewVM.cs108
2 files changed, 120 insertions, 3 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs
index e18354f89..d7717e6db 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs
@@ -246,10 +246,23 @@ namespace Tango.PPC.UI.ViewModels
}
}
+ /// <summary>
+ /// Powers off the machine.
+ /// </summary>
private async void PowerOffMachine()
{
IsMenuOpened = false;
- await NavigationManager.NavigateTo<InternalModule>(nameof(PowerOffView));
+ if (await NotificationProvider.ShowQuestion("Are you sure you wish to turn off the machine?"))
+ {
+ try
+ {
+ await MachineProvider.MachineOperator.PowerDown();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error triggering power down.");
+ }
+ }
}
#endregion
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/PowerOffViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/PowerOffViewVM.cs
index 0d58b472f..e3ab7d111 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/PowerOffViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/PowerOffViewVM.cs
@@ -1,19 +1,40 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core.Commands;
+using Tango.Integration.Operation;
+using Tango.PMR.Power;
using Tango.PPC.Common;
+using Tango.PPC.UI.AppBarItems;
+using Tango.PPC.UI.Views;
namespace Tango.PPC.UI.ViewModels
{
public class PowerOffViewVM : PPCViewModel
{
+ private PowerDownHandler _handler;
+ private PowerOffAppBarItem _appBarItem;
+ private int _abortTries;
+
+ private StartPowerDownResponse _status;
+ public StartPowerDownResponse Status
+ {
+ get { return _status; }
+ set { _status = value; RaisePropertyChangedAuto(); }
+ }
+
public RelayCommand AbortCommand { get; set; }
public PowerOffViewVM()
{
+ _appBarItem = new PowerOffAppBarItem();
+ _appBarItem.Pressed += (x, e) =>
+ {
+ NavigationManager.NavigateTo<InternalModule>(nameof(PowerOffView));
+ };
AbortCommand = new RelayCommand(AbortPowerOff);
}
@@ -22,9 +43,92 @@ namespace Tango.PPC.UI.ViewModels
}
- private void AbortPowerOff()
+ public override void OnApplicationReady()
+ {
+ base.OnApplicationReady();
+ MachineProvider.MachineOperator.PowerDownStarted += MachineOperator_PowerDownStarted;
+ }
+
+ private void MachineOperator_PowerDownStarted(object sender, PowerDownStartedEventArgs e)
+ {
+ _abortTries = 0;
+ _handler = e.Handler;
+
+ _handler.StatusChanged += OnStatusChanged;
+ _handler.Failed += OnFailed;
+ _handler.Completed += OnCompleted;
+
+ InvokeUI(async () =>
+ {
+ await NavigationManager.NavigateTo<InternalModule>(nameof(PowerOffView));
+ NotificationProvider.PushAppBarItem(_appBarItem);
+ });
+ }
+
+ private void OnStatusChanged(object sender, PowerDownStatusChangedEventArgs e)
+ {
+ Status = e.Status;
+ _appBarItem.Status = Status;
+ }
+
+ private void OnCompleted(object sender, EventArgs e)
+ {
+ InvokeUI(async () =>
+ {
+ if (IsVisible)
+ {
+ await NavigationManager.NavigateBack();
+ }
+
+ NotificationProvider.PopAppBarItem(_appBarItem);
+ });
+ }
+
+ private void OnFailed(object sender, Exception ex)
{
- NavigationManager.NavigateBack();
+ InvokeUI(async () =>
+ {
+ await NotificationProvider.ShowError($"An error occurred while powering off the machine.\n{ex.FlattenMessage()}");
+
+ if (IsVisible)
+ {
+ await NavigationManager.NavigateBack();
+ }
+
+ NotificationProvider.PopAppBarItem(_appBarItem);
+ });
+ }
+
+ private async void AbortPowerOff()
+ {
+ try
+ {
+ NotificationProvider.SetGlobalBusyMessage("Aborting machine power off...");
+ await _handler.Abort();
+ await NavigationManager.NavigateBack();
+ NotificationProvider.PopAppBarItem(_appBarItem);
+ }
+ catch (Exception ex)
+ {
+ _abortTries++;
+ LogManager.Log(ex, "Power down abort error.");
+ NotificationProvider.ReleaseGlobalBusyMessage();
+ await NotificationProvider.ShowError($"An error occurred while trying to abort the power off sequence.\n{ex.FlattenMessage()}");
+
+ if (_abortTries > 2)
+ {
+ if (IsVisible)
+ {
+ await NavigationManager.NavigateBack();
+ }
+
+ NotificationProvider.PopAppBarItem(_appBarItem);
+ }
+ }
+ finally
+ {
+ NotificationProvider.ReleaseGlobalBusyMessage();
+ }
}
}
}