using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.Core.DI; using Tango.FSE.Common.Connection; using Tango.FSE.Common.MachineUpdates; using Tango.PPC.Shared.Updates; using Tango.Transport; namespace Tango.FSE.UI.MachineUpdates { /// /// Represents the default implementation. /// /// public class DefaultMachineUpdatesProvider : ExtendedObject, IMachineUpdatesProvider { private MachineUpdatesResult _lastResult; private IMachineProvider MachineProvider { get; set; } /// /// Initializes a new instance of the class. /// /// The machine provider. public DefaultMachineUpdatesProvider(IMachineProvider machineProvider) { MachineProvider = machineProvider; MachineProvider.MachineDisconnected += MachineProvider_MachineDisconnected; } /// /// Gets the history of machine updates. /// /// public async Task GetUpdates() { try { LogManager.Log("Retrieving remote machine software updates and packages history..."); if (_lastResult != null) { return _lastResult; } var response = await MachineProvider.MachineOperator.SendGenericRequest(new GetUpdatesAndPackagesRequest() { }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(30) }); MachineUpdatesResult result = new MachineUpdatesResult(); result.Updates = response.Updates.Select(x => x.ToObservable()).ToList(); foreach (var update in result.Updates) { if (update.FailedReason.IsNotNullOrEmpty()) { update.FailedLog = update.FailedReason + Environment.NewLine + "-----------------------------------------------------------------------------------------------------------" + Environment.NewLine + Environment.NewLine + update.FailedLog; } } result.Packages = response.Packages; _lastResult = result; return result; } catch (Exception ex) { throw LogManager.Log(ex, "Error retrieving the remote machine updates and packages history."); } } private void MachineProvider_MachineDisconnected(object sender, MachineDisconnectedEventArgs e) { _lastResult = null; } } }