using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Text; using System.Threading.Tasks; using FSI.Lib.Tools.RoboSharp.Interfaces; namespace FSI.Lib.Tools.RoboSharp.Results { /// /// Object returned by RoboQueue when a run has completed. /// public sealed class RoboQueueResults : IRoboQueueResults, IRoboCopyResultsList, ITimeSpan { internal RoboQueueResults() { collection = new RoboCopyResultsList(); StartTime = DateTime.Now; QueueProcessRunning = true; } private RoboCopyResultsList collection { get; } private DateTime EndTimeField; private TimeSpan TimeSpanField; private bool QueueProcessRunning; /// /// Add a result to the collection /// internal void Add(RoboCopyResults result) => collection.Add(result); #region < IRoboQueueResults > /// Time the RoboQueue task was started public DateTime StartTime { get; } /// Time the RoboQueue task was completed / cancelled. /// Should Only considered valid if = true. public DateTime EndTime { get => EndTimeField; internal set { EndTimeField = value; TimeSpanField = value.Subtract(StartTime); QueueProcessRunning = false; } } /// Length of Time RoboQueue was running /// Should Only considered valid if = true. public TimeSpan TimeSpan => TimeSpanField; /// TRUE if the RoboQueue object that created this results set has not finished running yet. public bool QueueRunning => QueueProcessRunning; /// TRUE if the RoboQueue object that created this results has completed running, or has been cancelled. public bool QueueComplete => !QueueProcessRunning; #endregion #region < IRoboCopyResultsList Implementation > /// public IStatistic DirectoriesStatistic => ((IRoboCopyResultsList)collection).DirectoriesStatistic; /// public IStatistic BytesStatistic => ((IRoboCopyResultsList)collection).BytesStatistic; /// public IStatistic FilesStatistic => ((IRoboCopyResultsList)collection).FilesStatistic; /// public ISpeedStatistic SpeedStatistic => ((IRoboCopyResultsList)collection).SpeedStatistic; /// public IRoboCopyCombinedExitStatus Status => ((IRoboCopyResultsList)collection).Status; /// public IReadOnlyList Collection => ((IRoboCopyResultsList)collection).Collection; /// public int Count => ((IRoboCopyResultsList)collection).Count; public RoboCopyResults this[int i] => ((IRoboCopyResultsList)collection)[i]; /// public event NotifyCollectionChangedEventHandler CollectionChanged { add { ((INotifyCollectionChanged)collection).CollectionChanged += value; } remove { ((INotifyCollectionChanged)collection).CollectionChanged -= value; } } /// public IStatistic[] GetByteStatistics() { return ((IRoboCopyResultsList)collection).GetByteStatistics(); } /// public IStatistic[] GetDirectoriesStatistics() { return ((IRoboCopyResultsList)collection).GetDirectoriesStatistics(); } /// public IEnumerator GetEnumerator() { return ((IEnumerable)collection).GetEnumerator(); } /// public IStatistic[] GetFilesStatistics() { return ((IRoboCopyResultsList)collection).GetFilesStatistics(); } /// public ISpeedStatistic[] GetSpeedStatistics() { return ((IRoboCopyResultsList)collection).GetSpeedStatistics(); } /// public RoboCopyExitStatus[] GetStatuses() { return ((IRoboCopyResultsList)collection).GetStatuses(); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)collection).GetEnumerator(); } /// public ErrorEventArgs[] GetErrors() { return ((IRoboCopyResultsList)collection).GetErrors(); } #endregion } }