blob: e3ab7d111519c28141565de07afa8bd11a0ad9c4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
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);
}
public override void OnApplicationStarted()
{
}
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)
{
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();
}
}
}
}
|