using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.Integration.Storage; namespace Tango.Integration.Upgrade { public class FirmwareUpgradeHandler : ExtendedObject { private Action _cancelAction; public event EventHandler Progress; public event EventHandler Completed; public event EventHandler Canceled; public event EventHandler Failed; internal FirmwareUpgradeHandler() { Message = "Initializing..."; } internal FirmwareUpgradeHandler(Action cancelAction) : this() { _cancelAction = cancelAction; } private String _message; public String Message { get { return _message; } set { _message = value; RaisePropertyChangedAuto(); } } private FirmwareUpgradeStatus _status; public FirmwareUpgradeStatus Status { get { return _status; } private set { _status = value; RaisePropertyChangedAuto(); } } private long _current; public long Current { get { return _current; } internal set { _current = value; RaisePropertyChangedAuto(); } } private long _total; public long Total { get { return _total; } internal set { _total = value; RaisePropertyChangedAuto(); } } public Task Cancel() { return Task.Factory.StartNew(() => { _cancelAction.Invoke(); Message = "Canceled."; Status = FirmwareUpgradeStatus.Canceled; Canceled?.Invoke(this, new EventArgs()); }); } internal void RaiseCompleted() { Status = FirmwareUpgradeStatus.Completed; Message = "Completed."; Completed?.Invoke(this, new EventArgs()); } internal void RaiseCanceled() { Status = FirmwareUpgradeStatus.Canceled; Message = "Canceled."; Canceled?.Invoke(this, new EventArgs()); } internal void RaiseFailed(Exception ex) { Status = FirmwareUpgradeStatus.Failed; Message = "Failed."; Failed?.Invoke(this, ex); } internal void RaiseProgress(long current, FirmwareUpgradeStatus status, String message) { Current = current; Status = status; Message = message; Progress?.Invoke(this, new FirmwareUpgradeProgressEventArgs() { Current = Current, Status = Status, Total = Total, Message = Message, }); } } }