82 lines
2.0 KiB
C#
82 lines
2.0 KiB
C#
|
using System;
|
||
|
using FluentMigrator.Runner;
|
||
|
using NzbDrone.Common.Messaging;
|
||
|
using NzbDrone.Core.Datastore;
|
||
|
using NzbDrone.Core.Messaging.Tracking;
|
||
|
|
||
|
namespace NzbDrone.Core.Messaging.Commands
|
||
|
{
|
||
|
public abstract class Command : ModelBase, IMessage
|
||
|
{
|
||
|
private static readonly object Mutex = new object();
|
||
|
private static int _idCounter;
|
||
|
private readonly StopWatch _stopWatch;
|
||
|
|
||
|
public CommandStatus State { get; private set; }
|
||
|
public DateTime StateChangeTime { get; private set; }
|
||
|
|
||
|
public virtual bool SendUpdatesToClient
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public TimeSpan Runtime
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return _stopWatch.ElapsedTime();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Exception Exception { get; private set; }
|
||
|
public string Message { get; private set; }
|
||
|
|
||
|
public string Name { get; private set; }
|
||
|
|
||
|
protected Command()
|
||
|
{
|
||
|
Name = GetType().Name.Replace("Command", "");
|
||
|
StateChangeTime = DateTime.UtcNow;
|
||
|
State = CommandStatus.Pending;
|
||
|
_stopWatch = new StopWatch();
|
||
|
|
||
|
lock (Mutex)
|
||
|
{
|
||
|
Id = ++_idCounter;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Start()
|
||
|
{
|
||
|
_stopWatch.Start();
|
||
|
StateChangeTime = DateTime.UtcNow;
|
||
|
State = CommandStatus.Running;
|
||
|
SetMessage("Starting");
|
||
|
}
|
||
|
|
||
|
public void Failed(Exception exception)
|
||
|
{
|
||
|
_stopWatch.Stop();
|
||
|
StateChangeTime = DateTime.UtcNow;
|
||
|
State = CommandStatus.Failed;
|
||
|
Exception = exception;
|
||
|
SetMessage("Failed");
|
||
|
}
|
||
|
|
||
|
public void Completed()
|
||
|
{
|
||
|
_stopWatch.Stop();
|
||
|
StateChangeTime = DateTime.UtcNow;
|
||
|
State = CommandStatus.Completed;
|
||
|
SetMessage("Completed");
|
||
|
}
|
||
|
|
||
|
public void SetMessage(string message)
|
||
|
{
|
||
|
Message = message;
|
||
|
}
|
||
|
}
|
||
|
}
|