Compare commits
No commits in common. "edc24fff5b346b708e824ed7138fd406f2727579" and "a4c9168551e0d1572819607c25a117e13a0fb6a1" have entirely different histories.
edc24fff5b
...
a4c9168551
@ -55,23 +55,20 @@ public class TaskManager
|
|||||||
private void TaskCheckerThread()
|
private void TaskCheckerThread()
|
||||||
{
|
{
|
||||||
logger?.WriteLine(this.GetType().ToString(), "Starting TaskCheckerThread.");
|
logger?.WriteLine(this.GetType().ToString(), "Starting TaskCheckerThread.");
|
||||||
int waitingTasksCount = _allTasks.Count(task => task.state is TrangaTask.ExecutionState.Waiting);
|
int allTasksWaitingLength = _allTasks.Count(task => task.state is TrangaTask.ExecutionState.Waiting);
|
||||||
while (_continueRunning)
|
while (_continueRunning)
|
||||||
{
|
{
|
||||||
foreach (TrangaTask waitingButExecute in _allTasks.Where(taskQuery =>
|
TrangaTask[] tmp = _allTasks.Where(taskQuery =>
|
||||||
taskQuery.nextExecution < DateTime.Now &&
|
taskQuery.nextExecution < DateTime.Now &&
|
||||||
taskQuery.state is TrangaTask.ExecutionState.Waiting))
|
taskQuery.state is TrangaTask.ExecutionState.Waiting or TrangaTask.ExecutionState.Enqueued)
|
||||||
{
|
.OrderBy(tmpTask => tmpTask.nextExecution).ToArray();
|
||||||
waitingButExecute.state = TrangaTask.ExecutionState.Enqueued;
|
foreach (TrangaTask task in tmp)
|
||||||
}
|
|
||||||
|
|
||||||
foreach (TrangaTask task in _allTasks.Where(enqueuedTask => enqueuedTask.state is TrangaTask.ExecutionState.Enqueued))
|
|
||||||
{
|
{
|
||||||
|
task.state = TrangaTask.ExecutionState.Enqueued;
|
||||||
switch (task.task)
|
switch (task.task)
|
||||||
{
|
{
|
||||||
case TrangaTask.Task.DownloadNewChapters:
|
case TrangaTask.Task.DownloadNewChapters:
|
||||||
if (!_allTasks.Any(taskQuery =>
|
if (!_allTasks.Any(taskQuery => taskQuery.task == TrangaTask.Task.DownloadNewChapters &&
|
||||||
taskQuery.task == TrangaTask.Task.DownloadNewChapters &&
|
|
||||||
taskQuery.state is TrangaTask.ExecutionState.Running &&
|
taskQuery.state is TrangaTask.ExecutionState.Running &&
|
||||||
((DownloadNewChaptersTask)taskQuery).connectorName == ((DownloadNewChaptersTask)task).connectorName))
|
((DownloadNewChaptersTask)taskQuery).connectorName == ((DownloadNewChaptersTask)task).connectorName))
|
||||||
{
|
{
|
||||||
@ -82,7 +79,8 @@ public class TaskManager
|
|||||||
if (!_allTasks.Any(taskQuery =>
|
if (!_allTasks.Any(taskQuery =>
|
||||||
taskQuery.task == TrangaTask.Task.DownloadChapter &&
|
taskQuery.task == TrangaTask.Task.DownloadChapter &&
|
||||||
taskQuery.state is TrangaTask.ExecutionState.Running &&
|
taskQuery.state is TrangaTask.ExecutionState.Running &&
|
||||||
((DownloadChapterTask)taskQuery).connectorName == ((DownloadChapterTask)task).connectorName))
|
((DownloadChapterTask)taskQuery).connectorName ==
|
||||||
|
((DownloadChapterTask)task).connectorName))
|
||||||
{
|
{
|
||||||
ExecuteTaskNow(task);
|
ExecuteTaskNow(task);
|
||||||
}
|
}
|
||||||
@ -93,7 +91,7 @@ public class TaskManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HashSet<DownloadChapterTask> failedToRemove = new();
|
HashSet<DownloadChapterTask> toRemove = new();
|
||||||
foreach (KeyValuePair<DownloadChapterTask, CancellationTokenSource> removeTask in _runningDownloadChapterTasks)
|
foreach (KeyValuePair<DownloadChapterTask, CancellationTokenSource> removeTask in _runningDownloadChapterTasks)
|
||||||
{
|
{
|
||||||
if (removeTask.Key.GetType() == typeof(DownloadChapterTask) &&
|
if (removeTask.Key.GetType() == typeof(DownloadChapterTask) &&
|
||||||
@ -101,22 +99,22 @@ public class TaskManager
|
|||||||
{
|
{
|
||||||
logger?.WriteLine(this.GetType().ToString(), $"Disposing failed task {removeTask.Key}.");
|
logger?.WriteLine(this.GetType().ToString(), $"Disposing failed task {removeTask.Key}.");
|
||||||
removeTask.Value.Cancel();
|
removeTask.Value.Cancel();
|
||||||
failedToRemove.Add(removeTask.Key);
|
toRemove.Add(removeTask.Key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (DownloadChapterTask taskToRestart in failedToRemove)
|
foreach (DownloadChapterTask taskToRemove in toRemove)
|
||||||
{
|
{
|
||||||
DeleteTask(taskToRestart);
|
DeleteTask(taskToRemove);
|
||||||
DownloadChapterTask newTask = new (taskToRestart.task, taskToRestart.connectorName,
|
DownloadChapterTask newTask = new (taskToRemove.task, taskToRemove.connectorName,
|
||||||
taskToRestart.publication, taskToRestart.chapter, taskToRestart.language,
|
taskToRemove.publication, taskToRemove.chapter, taskToRemove.language,
|
||||||
(DownloadNewChaptersTask?)taskToRestart.parentTask);
|
(DownloadNewChaptersTask?)taskToRemove.parentTask);
|
||||||
AddTask(newTask);
|
AddTask(newTask);
|
||||||
taskToRestart.parentTask?.ReplaceFailedChildTask(taskToRestart, newTask);
|
taskToRemove.parentTask?.ReplaceFailedChildTask(taskToRemove, newTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(waitingTasksCount != _allTasks.Count(task => task.state is TrangaTask.ExecutionState.Waiting))
|
if(allTasksWaitingLength != _allTasks.Count(task => task.state is TrangaTask.ExecutionState.Waiting))
|
||||||
ExportDataAndSettings();
|
ExportDataAndSettings();
|
||||||
waitingTasksCount = _allTasks.Count(task => task.state is TrangaTask.ExecutionState.Waiting);
|
allTasksWaitingLength = _allTasks.Count(task => task.state is TrangaTask.ExecutionState.Waiting);
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,8 +131,8 @@ public class TaskManager
|
|||||||
{
|
{
|
||||||
task.Execute(this, this.logger, cToken.Token);
|
task.Execute(this, this.logger, cToken.Token);
|
||||||
}, cToken.Token);
|
}, cToken.Token);
|
||||||
if(task is DownloadChapterTask chapterTask)
|
if(task.GetType() == typeof(DownloadChapterTask))
|
||||||
_runningDownloadChapterTasks.Add(chapterTask, cToken);
|
_runningDownloadChapterTasks.Add((DownloadChapterTask)task, cToken);
|
||||||
t.Start();
|
t.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ public abstract class TrangaTask
|
|||||||
this.executionStarted = DateTime.Now;
|
this.executionStarted = DateTime.Now;
|
||||||
this.lastChange = DateTime.Now;
|
this.lastChange = DateTime.Now;
|
||||||
ExecuteTask(taskManager, logger, cancellationToken);
|
ExecuteTask(taskManager, logger, cancellationToken);
|
||||||
while(childTasks.Any(ct => ct.state is ExecutionState.Enqueued or ExecutionState.Running))
|
while(this.childTasks.Any(childTask => childTask.state is ExecutionState.Running or ExecutionState.Enqueued))
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
this.lastExecuted = DateTime.Now;
|
this.lastExecuted = DateTime.Now;
|
||||||
this.state = ExecutionState.Waiting;
|
this.state = ExecutionState.Waiting;
|
||||||
|
@ -30,9 +30,6 @@ public class DownloadChapterTask : TrangaTask
|
|||||||
if(this.parentTask is not null)
|
if(this.parentTask is not null)
|
||||||
this.parentTask.state = ExecutionState.Waiting;
|
this.parentTask.state = ExecutionState.Waiting;
|
||||||
taskManager.DeleteTask(this);
|
taskManager.DeleteTask(this);
|
||||||
if(parentTask is not null)
|
|
||||||
foreach(NotificationManager nm in taskManager.settings.notificationManagers)
|
|
||||||
nm.SendNotification("New Chapter downloaded", $"{this.publication.sortName} {this.chapter.chapterNumber} {this.chapter.name}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using Logging;
|
using Logging;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace Tranga.TrangaTasks;
|
namespace Tranga.TrangaTasks;
|
||||||
|
|
||||||
@ -32,10 +33,12 @@ public class DownloadNewChaptersTask : TrangaTask
|
|||||||
foreach (Chapter newChapter in newChapters)
|
foreach (Chapter newChapter in newChapters)
|
||||||
{
|
{
|
||||||
DownloadChapterTask newTask = new (Task.DownloadChapter, this.connectorName, pub, newChapter, this.language, this);
|
DownloadChapterTask newTask = new (Task.DownloadChapter, this.connectorName, pub, newChapter, this.language, this);
|
||||||
this.childTasks.Add(newTask);
|
|
||||||
newTask.state = ExecutionState.Enqueued;
|
|
||||||
taskManager.AddTask(newTask);
|
taskManager.AddTask(newTask);
|
||||||
|
this.childTasks.Add(newTask);
|
||||||
}
|
}
|
||||||
|
if(newChapters.Count > 0)
|
||||||
|
foreach(NotificationManager nm in taskManager.settings.notificationManagers)
|
||||||
|
nm.SendNotification(pub.sortName, $"Downloading {newChapters.Count} new Chapters.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
Loading…
Reference in New Issue
Block a user