Better way of handling progress, and childProgress.
This commit is contained in:
parent
b6f8c8aab5
commit
8e207c3119
@ -135,7 +135,7 @@ public class TaskManager
|
|||||||
foreach (DownloadChapterTask taskToRemove in toRemove)
|
foreach (DownloadChapterTask taskToRemove in toRemove)
|
||||||
{
|
{
|
||||||
DeleteTask(taskToRemove);
|
DeleteTask(taskToRemove);
|
||||||
DownloadChapterTask newTask = new DownloadChapterTask(taskToRemove.task, taskToRemove.connectorName,
|
DownloadChapterTask newTask = new (taskToRemove.task, taskToRemove.connectorName,
|
||||||
taskToRemove.publication, taskToRemove.chapter, taskToRemove.language,
|
taskToRemove.publication, taskToRemove.chapter, taskToRemove.language,
|
||||||
taskToRemove.parentTask);
|
taskToRemove.parentTask);
|
||||||
AddTask(newTask);
|
AddTask(newTask);
|
||||||
|
@ -24,8 +24,9 @@ public abstract class TrangaTask
|
|||||||
public string taskId { get; set; }
|
public string taskId { get; set; }
|
||||||
[Newtonsoft.Json.JsonIgnore]public ExecutionState state { get; set; }
|
[Newtonsoft.Json.JsonIgnore]public ExecutionState state { get; set; }
|
||||||
[Newtonsoft.Json.JsonIgnore]protected HashSet<TrangaTask> childTasks { get; }
|
[Newtonsoft.Json.JsonIgnore]protected HashSet<TrangaTask> childTasks { get; }
|
||||||
[Newtonsoft.Json.JsonIgnore]public double progress => childTasks.Count > 0 ? childTasks.Sum(childTask => childTask.progress) / childTasks.Count : _myProgress;
|
[Newtonsoft.Json.JsonIgnore]public TrangaTask? parentTask { get; set; }
|
||||||
[Newtonsoft.Json.JsonIgnore]private double _myProgress = 0;
|
public string? parentTaskId { get; set; }
|
||||||
|
[Newtonsoft.Json.JsonIgnore]public double progress { get; private set; }
|
||||||
[Newtonsoft.Json.JsonIgnore]public DateTime nextExecution => lastExecuted.Add(reoccurrence);
|
[Newtonsoft.Json.JsonIgnore]public DateTime nextExecution => lastExecuted.Add(reoccurrence);
|
||||||
[Newtonsoft.Json.JsonIgnore]public DateTime executionStarted { get; private set; }
|
[Newtonsoft.Json.JsonIgnore]public DateTime executionStarted { get; private set; }
|
||||||
|
|
||||||
@ -39,7 +40,7 @@ public abstract class TrangaTask
|
|||||||
|
|
||||||
public enum ExecutionState { Waiting, Enqueued, Running }
|
public enum ExecutionState { Waiting, Enqueued, Running }
|
||||||
|
|
||||||
protected TrangaTask(Task task, TimeSpan reoccurrence)
|
protected TrangaTask(Task task, TimeSpan reoccurrence, TrangaTask? parentTask = null)
|
||||||
{
|
{
|
||||||
this.reoccurrence = reoccurrence;
|
this.reoccurrence = reoccurrence;
|
||||||
this.lastExecuted = DateTime.Now.Subtract(reoccurrence);
|
this.lastExecuted = DateTime.Now.Subtract(reoccurrence);
|
||||||
@ -48,6 +49,8 @@ public abstract class TrangaTask
|
|||||||
this.lastChange = DateTime.MaxValue;
|
this.lastChange = DateTime.MaxValue;
|
||||||
this.taskId = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(this.executionStarted.ToString(CultureInfo.InvariantCulture)));
|
this.taskId = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(this.executionStarted.ToString(CultureInfo.InvariantCulture)));
|
||||||
this.childTasks = new();
|
this.childTasks = new();
|
||||||
|
this.parentTask = parentTask;
|
||||||
|
this.parentTaskId = parentTask?.taskId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -82,6 +85,7 @@ public abstract class TrangaTask
|
|||||||
throw new ArgumentException($"Task {failed} is not childTask of {this}");
|
throw new ArgumentException($"Task {failed} is not childTask of {this}");
|
||||||
this.childTasks.Remove(failed);
|
this.childTasks.Remove(failed);
|
||||||
this.childTasks.Add(newTask);
|
this.childTasks.Add(newTask);
|
||||||
|
this.DecrementProgress(failed.progress);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddChildTask(DownloadChapterTask childTask)
|
public void AddChildTask(DownloadChapterTask childTask)
|
||||||
@ -91,7 +95,14 @@ public abstract class TrangaTask
|
|||||||
|
|
||||||
public void IncrementProgress(double amount)
|
public void IncrementProgress(double amount)
|
||||||
{
|
{
|
||||||
this._myProgress += amount;
|
this.progress += amount / (childTasks.Count > 0 ? childTasks.Count : 1);
|
||||||
|
parentTask?.IncrementProgress(amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DecrementProgress(double amount)
|
||||||
|
{
|
||||||
|
this.progress -= amount / childTasks.Count > 0 ? childTasks.Count : 1;
|
||||||
|
parentTask?.DecrementProgress(amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Task : byte
|
public enum Task : byte
|
||||||
|
@ -9,20 +9,13 @@ public class DownloadChapterTask : TrangaTask
|
|||||||
public Publication publication { get; }
|
public Publication publication { get; }
|
||||||
public string language { get; }
|
public string language { get; }
|
||||||
public Chapter chapter { get; }
|
public Chapter chapter { get; }
|
||||||
[JsonIgnore]public DownloadNewChaptersTask? parentTask { get; set; }
|
|
||||||
public string? parentTaskId { get; set; }
|
|
||||||
[JsonIgnore]public new double progress { get; private set; }
|
|
||||||
|
|
||||||
|
public DownloadChapterTask(Task task, string connectorName, Publication publication, Chapter chapter, string language = "en", TrangaTask? parentTask = null) : base(task, TimeSpan.Zero, parentTask)
|
||||||
public DownloadChapterTask(Task task, string connectorName, Publication publication, Chapter chapter, string language = "en", DownloadNewChaptersTask? parentTask = null) : base(task, TimeSpan.Zero)
|
|
||||||
{
|
{
|
||||||
this.chapter = chapter;
|
this.chapter = chapter;
|
||||||
this.connectorName = connectorName;
|
this.connectorName = connectorName;
|
||||||
this.publication = publication;
|
this.publication = publication;
|
||||||
this.language = language;
|
this.language = language;
|
||||||
this.parentTask = parentTask;
|
|
||||||
this.parentTaskId = parentTask?.taskId;
|
|
||||||
this.progress = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void ExecuteTask(TaskManager taskManager, Logger? logger, CancellationToken? cancellationToken = null)
|
protected override void ExecuteTask(TaskManager taskManager, Logger? logger, CancellationToken? cancellationToken = null)
|
||||||
|
Loading…
Reference in New Issue
Block a user