2023-05-19 14:00:30 +02:00
|
|
|
|
namespace Tranga;
|
|
|
|
|
|
|
|
|
|
public static class TaskExecutor
|
|
|
|
|
{
|
2023-05-19 16:27:56 +02:00
|
|
|
|
public static void Execute(Connector[] connectors, TrangaTask trangaTask, Dictionary<Publication, List<Chapter>> chapterCollection)
|
2023-05-19 14:00:30 +02:00
|
|
|
|
{
|
2023-05-19 16:27:56 +02:00
|
|
|
|
Connector? connector = connectors.FirstOrDefault(c => c.name == trangaTask.connectorName);
|
|
|
|
|
if (connector is null)
|
|
|
|
|
throw new ArgumentException($"Connector {trangaTask.connectorName} is not a known connector.");
|
2023-05-19 19:20:06 +02:00
|
|
|
|
|
|
|
|
|
if (trangaTask.isBeingExecuted)
|
|
|
|
|
return;
|
|
|
|
|
trangaTask.isBeingExecuted = true;
|
2023-05-19 16:35:27 +02:00
|
|
|
|
trangaTask.lastExecuted = DateTime.Now;
|
2023-05-19 16:27:56 +02:00
|
|
|
|
|
2023-05-19 14:00:30 +02:00
|
|
|
|
switch (trangaTask.task)
|
|
|
|
|
{
|
|
|
|
|
case TrangaTask.Task.DownloadNewChapters:
|
2023-05-19 16:27:56 +02:00
|
|
|
|
DownloadNewChapters(connector, (Publication)trangaTask.publication!, trangaTask.language, chapterCollection);
|
2023-05-19 14:00:30 +02:00
|
|
|
|
break;
|
|
|
|
|
case TrangaTask.Task.UpdateChapters:
|
2023-05-19 16:27:56 +02:00
|
|
|
|
UpdateChapters(connector, (Publication)trangaTask.publication!, trangaTask.language, chapterCollection);
|
2023-05-19 14:00:30 +02:00
|
|
|
|
break;
|
|
|
|
|
case TrangaTask.Task.UpdatePublications:
|
2023-05-19 16:27:56 +02:00
|
|
|
|
UpdatePublications(connector, chapterCollection);
|
2023-05-19 14:00:30 +02:00
|
|
|
|
break;
|
|
|
|
|
}
|
2023-05-19 19:20:06 +02:00
|
|
|
|
|
|
|
|
|
trangaTask.isBeingExecuted = false;
|
2023-05-19 14:00:30 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void UpdatePublications(Connector connector, Dictionary<Publication, List<Chapter>> chapterCollection)
|
|
|
|
|
{
|
|
|
|
|
Publication[] publications = connector.GetPublications();
|
|
|
|
|
foreach (Publication publication in publications)
|
|
|
|
|
chapterCollection.TryAdd(publication, new List<Chapter>());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void DownloadNewChapters(Connector connector, Publication publication, string language, Dictionary<Publication, List<Chapter>> chapterCollection)
|
|
|
|
|
{
|
|
|
|
|
List<Chapter> newChapters = UpdateChapters(connector, publication, language, chapterCollection);
|
|
|
|
|
foreach(Chapter newChapter in newChapters)
|
|
|
|
|
connector.DownloadChapter(publication, newChapter);
|
2023-05-19 16:24:05 +02:00
|
|
|
|
connector.DownloadCover(publication);
|
|
|
|
|
connector.SaveSeriesInfo(publication);
|
2023-05-19 14:00:30 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static List<Chapter> UpdateChapters(Connector connector, Publication publication, string language, Dictionary<Publication, List<Chapter>> chapterCollection)
|
|
|
|
|
{
|
|
|
|
|
List<Chapter> newChaptersList = new();
|
|
|
|
|
if (!chapterCollection.ContainsKey(publication))
|
|
|
|
|
return newChaptersList;
|
|
|
|
|
|
|
|
|
|
List<Chapter> currentChapters = chapterCollection[publication];
|
|
|
|
|
Chapter[] newChapters = connector.GetChapters(publication, language);
|
|
|
|
|
|
|
|
|
|
newChaptersList = newChapters.ToList()
|
|
|
|
|
.ExceptBy(currentChapters.Select(cChapter => cChapter.url), nChapter => nChapter.url).ToList();
|
|
|
|
|
return newChaptersList;
|
|
|
|
|
}
|
|
|
|
|
}
|