2023-05-19 19:20:06 +02:00
using Newtonsoft.Json ;
namespace Tranga ;
2023-05-18 21:08:09 +02:00
2023-05-19 20:03:17 +02:00
/// <summary>
/// Stores information on Task
/// </summary>
2023-05-19 16:27:56 +02:00
public class TrangaTask
2023-05-19 14:00:30 +02:00
{
2023-05-20 12:53:54 +02:00
// ReSharper disable once CommentTypo ...Tell me why!
2023-05-20 01:06:12 +02:00
// ReSharper disable once MemberCanBePrivate.Global I want it thaaat way
2023-05-19 16:23:37 +02:00
public TimeSpan reoccurrence { get ; }
public DateTime lastExecuted { get ; set ; }
2023-05-20 14:07:38 +02:00
public string? connectorName { get ; }
2023-05-19 16:23:37 +02:00
public Task task { get ; }
public Publication ? publication { get ; }
public string language { get ; }
2023-05-20 14:50:48 +02:00
[JsonIgnore] public ExecutionState state { get ; set ; }
public enum ExecutionState
{
Waiting ,
Enqueued ,
Running
} ;
2023-05-19 14:00:30 +02:00
2023-05-20 14:07:38 +02:00
public TrangaTask ( Task task , string? connectorName , Publication ? publication , TimeSpan reoccurrence , string language = "" )
2023-05-17 23:23:01 +02:00
{
2023-05-20 14:07:38 +02:00
if ( task ! = Task . UpdateKomgaLibrary & & connectorName is null )
throw new ArgumentException ( $"connectorName can not be null for task {task}" ) ;
if ( publication is null & & task ! = Task . UpdatePublications & & task ! = Task . UpdateKomgaLibrary )
throw new ArgumentException ( $"Publication can not be null for task {task}" ) ;
2023-05-19 16:27:56 +02:00
this . publication = publication ;
2023-05-18 21:08:09 +02:00
this . reoccurrence = reoccurrence ;
2023-05-19 14:00:30 +02:00
this . lastExecuted = DateTime . Now . Subtract ( reoccurrence ) ;
2023-05-19 16:27:56 +02:00
this . connectorName = connectorName ;
2023-05-19 14:00:30 +02:00
this . task = task ;
this . language = language ;
2023-05-18 21:08:09 +02:00
}
2023-05-17 23:23:01 +02:00
2023-05-19 20:03:17 +02:00
/// <returns>True if elapsed time since last execution is greater than set interval</returns>
2023-05-19 16:27:56 +02:00
public bool ShouldExecute ( )
2023-05-17 23:23:01 +02:00
{
2023-05-20 14:50:48 +02:00
return DateTime . Now . Subtract ( this . lastExecuted ) > reoccurrence & & state is ExecutionState . Waiting ;
2023-05-17 23:23:01 +02:00
}
2023-05-19 14:00:30 +02:00
public enum Task
2023-05-17 23:23:01 +02:00
{
2023-05-19 14:00:30 +02:00
UpdatePublications ,
UpdateChapters ,
2023-05-20 14:07:38 +02:00
DownloadNewChapters ,
UpdateKomgaLibrary
2023-05-17 23:23:01 +02:00
}
2023-05-20 00:37:31 +02:00
public override string ToString ( )
{
2023-05-22 21:37:02 +02:00
return $"{task}, {lastExecuted}, {reoccurrence}, {state} {(connectorName is not null ? $" , { connectorName } " : " " )} {(publication is not null ? $" , { publication ? . sortName } ": " ")}" ;
2023-05-20 00:37:31 +02:00
}
2023-05-17 23:23:01 +02:00
}