using API.Schema.MangaContext; using API.Schema.MangaContext.MangaConnectors; namespace API.Workers; public class RetrieveMangaChaptersFromMangaconnectorWorker(MangaConnectorId mcId, string language, IEnumerable? dependsOn = null) : BaseWorkerWithContext(dependsOn) { public MangaConnectorId MangaConnectorId { get; init; } = mcId; protected override BaseWorker[] DoWorkInternal() { MangaConnector mangaConnector = MangaConnectorId.MangaConnector; Manga manga = MangaConnectorId.Obj; // This gets all chapters that are not downloaded (Chapter, MangaConnectorId)[] allChapters = mangaConnector.GetChapters(MangaConnectorId, language).DistinctBy(c => c.Item1.Key).ToArray(); int addedChapters = 0; foreach ((Chapter chapter, MangaConnectorId mcId) newChapter in allChapters) { if (Tranga.AddChapterToContext(newChapter, DbContext, out Chapter? addedChapter) == false) continue; manga.Chapters.Add(addedChapter); } Log.Info($"{manga.Chapters.Count} existing + {addedChapters} new chapters."); DbContext.Sync(); return []; } public override string ToString() => $"{base.ToString()} {MangaConnectorId}"; }