diff --git a/API/Controllers/MangaController.cs b/API/Controllers/MangaController.cs index 58fc6a5..a413e15 100644 --- a/API/Controllers/MangaController.cs +++ b/API/Controllers/MangaController.cs @@ -130,7 +130,7 @@ public class MangaController(MangaContext context) : Controller if (!System.IO.File.Exists(manga.CoverFileNameInCache)) { - if (Tranga.GetRunningWorkers().Any(worker => worker is DownloadCoverFromMangaconnectorWorker w && w.MangaConnectorId.ObjId == MangaId)) + if (Tranga.GetRunningWorkers().Any(worker => worker is DownloadCoverFromMangaconnectorWorker w && context.MangaConnectorToManga.Find(w.MangaConnectorIdId)?.ObjId == MangaId)) { Response.Headers.Append("Retry-After", $"{Tranga.Settings.WorkCycleTimeoutMs * 2 / 1000:D}"); return StatusCode(Status503ServiceUnavailable, Tranga.Settings.WorkCycleTimeoutMs * 2 / 1000); @@ -246,7 +246,7 @@ public class MangaController(MangaContext context) : Controller List chapters = manga.Chapters.ToList(); if (chapters.Count == 0) { - if (Tranga.GetRunningWorkers().Any(worker => worker is RetrieveMangaChaptersFromMangaconnectorWorker w && w.MangaConnectorId.ObjId == MangaId && w.State < WorkerExecutionState.Completed)) + if (Tranga.GetRunningWorkers().Any(worker => worker is RetrieveMangaChaptersFromMangaconnectorWorker w && context.MangaConnectorToManga.Find(w.MangaConnectorIdId)?.ObjId == MangaId && w.State < WorkerExecutionState.Completed)) { Response.Headers.Append("Retry-After", $"{Tranga.Settings.WorkCycleTimeoutMs * 2 / 1000:D}"); return StatusCode(Status503ServiceUnavailable, Tranga.Settings.WorkCycleTimeoutMs * 2/ 1000); @@ -284,7 +284,7 @@ public class MangaController(MangaContext context) : Controller List chapters = manga.Chapters.ToList(); if (chapters.Count == 0) { - if (Tranga.GetRunningWorkers().Any(worker => worker is RetrieveMangaChaptersFromMangaconnectorWorker w && w.MangaConnectorId.ObjId == MangaId && w.State < WorkerExecutionState.Completed)) + if (Tranga.GetRunningWorkers().Any(worker => worker is RetrieveMangaChaptersFromMangaconnectorWorker w && context.MangaConnectorToManga.Find(w.MangaConnectorIdId)?.ObjId == MangaId && w.State < WorkerExecutionState.Completed)) { Response.Headers.Append("Retry-After", $"{Tranga.Settings.WorkCycleTimeoutMs * 2 / 1000:D}"); return StatusCode(Status503ServiceUnavailable, Tranga.Settings.WorkCycleTimeoutMs * 2/ 1000); diff --git a/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs b/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs index 3aae423..0328def 100644 --- a/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs +++ b/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs @@ -14,9 +14,11 @@ namespace API.Workers; public class DownloadChapterFromMangaconnectorWorker(MangaConnectorId chId, IEnumerable? dependsOn = null) : BaseWorkerWithContext(dependsOn) { - public MangaConnectorId MangaConnectorId { get; init; } = chId; + internal readonly string MangaConnectorIdId = chId.Key; protected override BaseWorker[] DoWorkInternal() { + if (DbContext.MangaConnectorToChapter.Find(MangaConnectorIdId) is not { } MangaConnectorId) + return []; //TODO Exception? MangaConnector mangaConnector = MangaConnectorId.MangaConnector; Chapter chapter = MangaConnectorId.Obj; if (chapter.Downloaded) @@ -179,5 +181,5 @@ public class DownloadChapterFromMangaconnectorWorker(MangaConnectorId c return true; } - public override string ToString() => $"{base.ToString()} {MangaConnectorId}"; + public override string ToString() => $"{base.ToString()} {MangaConnectorIdId}"; } \ No newline at end of file diff --git a/API/Workers/MangaDownloadWorkers/DownloadCoverFromMangaconnectorWorker.cs b/API/Workers/MangaDownloadWorkers/DownloadCoverFromMangaconnectorWorker.cs index 1a5ed3e..ba07613 100644 --- a/API/Workers/MangaDownloadWorkers/DownloadCoverFromMangaconnectorWorker.cs +++ b/API/Workers/MangaDownloadWorkers/DownloadCoverFromMangaconnectorWorker.cs @@ -6,9 +6,11 @@ namespace API.Workers; public class DownloadCoverFromMangaconnectorWorker(MangaConnectorId mcId, IEnumerable? dependsOn = null) : BaseWorkerWithContext(dependsOn) { - public MangaConnectorId MangaConnectorId { get; init; } = mcId; + internal readonly string MangaConnectorIdId = mcId.Key; protected override BaseWorker[] DoWorkInternal() { + if (DbContext.MangaConnectorToManga.Find(MangaConnectorIdId) is not { } MangaConnectorId) + return []; //TODO Exception? MangaConnector mangaConnector = MangaConnectorId.MangaConnector; Manga manga = MangaConnectorId.Obj; @@ -18,5 +20,5 @@ public class DownloadCoverFromMangaconnectorWorker(MangaConnectorId mcId, return []; } - public override string ToString() => $"{base.ToString()} {MangaConnectorId}"; + public override string ToString() => $"{base.ToString()} {MangaConnectorIdId}"; } \ No newline at end of file diff --git a/API/Workers/MangaDownloadWorkers/RetrieveMangaChaptersFromMangaconnectorWorker.cs b/API/Workers/MangaDownloadWorkers/RetrieveMangaChaptersFromMangaconnectorWorker.cs index 5e95f11..ec03b95 100644 --- a/API/Workers/MangaDownloadWorkers/RetrieveMangaChaptersFromMangaconnectorWorker.cs +++ b/API/Workers/MangaDownloadWorkers/RetrieveMangaChaptersFromMangaconnectorWorker.cs @@ -6,9 +6,11 @@ namespace API.Workers; public class RetrieveMangaChaptersFromMangaconnectorWorker(MangaConnectorId mcId, string language, IEnumerable? dependsOn = null) : BaseWorkerWithContext(dependsOn) { - public MangaConnectorId MangaConnectorId { get; init; } = mcId; + internal readonly string MangaConnectorIdId = mcId.Key; protected override BaseWorker[] DoWorkInternal() { + if (DbContext.MangaConnectorToManga.Find(MangaConnectorIdId) is not { } MangaConnectorId) + return []; //TODO Exception? MangaConnector mangaConnector = MangaConnectorId.MangaConnector; Manga manga = MangaConnectorId.Obj; // This gets all chapters that are not downloaded @@ -29,5 +31,5 @@ public class RetrieveMangaChaptersFromMangaconnectorWorker(MangaConnectorId $"{base.ToString()} {MangaConnectorId}"; + public override string ToString() => $"{base.ToString()} {MangaConnectorIdId}"; } \ No newline at end of file diff --git a/API/Workers/MoveMangaLibraryWorker.cs b/API/Workers/MoveMangaLibraryWorker.cs index 170b611..4367443 100644 --- a/API/Workers/MoveMangaLibraryWorker.cs +++ b/API/Workers/MoveMangaLibraryWorker.cs @@ -5,8 +5,14 @@ namespace API.Workers; public class MoveMangaLibraryWorker(Manga manga, FileLibrary toLibrary, IEnumerable? dependsOn = null) : BaseWorkerWithContext(dependsOn) { + internal readonly string MangaId = manga.Key; + internal readonly string LibraryId = toLibrary.Key; protected override BaseWorker[] DoWorkInternal() { + if (DbContext.Mangas.Find(MangaId) is not { } manga) + return []; //TODO Exception? + if (DbContext.FileLibraries.Find(LibraryId) is not { } toLibrary) + return []; //TODO Exception? Dictionary oldPath = manga.Chapters.ToDictionary(c => c, c => c.FullArchiveFilePath); manga.Library = toLibrary; @@ -16,5 +22,5 @@ public class MoveMangaLibraryWorker(Manga manga, FileLibrary toLibrary, IEnumera return manga.Chapters.Select(c => new MoveFileOrFolderWorker(c.FullArchiveFilePath, oldPath[c])).ToArray(); } - public override string ToString() => $"{base.ToString()} {manga} {toLibrary}"; + public override string ToString() => $"{base.ToString()} {MangaId} {LibraryId}"; } \ No newline at end of file