using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RoboSharp.Interfaces;
namespace 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;
///Gets the object at the specified index.
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
}
}