From ae725b44e3f90bfd53c69828e7738d4693403e90 Mon Sep 17 00:00:00 2001 From: glax Date: Wed, 24 Sep 2025 17:58:26 +0200 Subject: [PATCH] Change AddMangaToContextLogic --- API/Controllers/SearchController.cs | 11 +++++++---- API/Tranga.cs | 18 ++++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/API/Controllers/SearchController.cs b/API/Controllers/SearchController.cs index cdf4516..7407d9f 100644 --- a/API/Controllers/SearchController.cs +++ b/API/Controllers/SearchController.cs @@ -36,8 +36,11 @@ public class SearchController(MangaContext context) : Controller (Manga manga, MangaConnectorId id)[] mangas = connector.SearchManga(Query); - IEnumerable<(Manga manga, MangaConnectorId id)> addedManga = mangas.Where(kv => context.AddMangaToContext(kv, HttpContext.RequestAborted).GetAwaiter().GetResult()); - + IEnumerable<(Manga manga, MangaConnectorId id)> addedManga = + mangas.Select(kv => context.AddMangaToContext(kv, HttpContext.RequestAborted)) + .Where(t => t.Result is not null) + .Select(t => t.Result) + .Cast<(Manga manga, MangaConnectorId id)>(); IEnumerable result = addedManga.Select(manga => manga.manga).Select(m => { IEnumerable ids = m.MangaConnectorIds.Select(id => @@ -59,7 +62,7 @@ public class SearchController(MangaContext context) : Controller [ProducesResponseType(Status200OK, "application/json")] [ProducesResponseType(Status404NotFound, "text/plain")] [ProducesResponseType(Status500InternalServerError, "text/plain")] - public async Task, NotFound, InternalServerError>> GetMangaFromUrl ([FromBody]string url) + public async Task, NotFound, InternalServerError>> GetMangaFromUrl([FromBody]string url) { if(Tranga.MangaConnectors.FirstOrDefault(c => c.Name.Equals("Global", StringComparison.InvariantCultureIgnoreCase)) is not { } connector) return TypedResults.InternalServerError("Could not find Global Connector."); @@ -67,7 +70,7 @@ public class SearchController(MangaContext context) : Controller if(connector.GetMangaFromUrl(url) is not ({ } m, not null) manga) return TypedResults.NotFound("Could not retrieve Manga"); - if(await context.AddMangaToContext(manga, HttpContext.RequestAborted) == false) + if(await context.AddMangaToContext(manga, HttpContext.RequestAborted) is not { } addedManga) return TypedResults.InternalServerError("Could not add Manga to context"); IEnumerable ids = m.MangaConnectorIds.Select(id => diff --git a/API/Tranga.cs b/API/Tranga.cs index 4cc68cd..d68a0b5 100644 --- a/API/Tranga.cs +++ b/API/Tranga.cs @@ -185,16 +185,15 @@ public static class Tranga RunningWorkers.Remove(worker, out _); } - internal static async Task AddMangaToContext(this MangaContext context, (Manga, MangaConnectorId) addManga, CancellationToken token) => + internal static async Task<(Manga manga, MangaConnectorId id)?> AddMangaToContext(this MangaContext context, (Manga, MangaConnectorId) addManga, CancellationToken token) => await AddMangaToContext(context, addManga.Item1, addManga.Item2, token); - internal static async Task AddMangaToContext(this MangaContext context, Manga addManga, MangaConnectorId addMcId, - CancellationToken token) + internal static async Task<(Manga manga, MangaConnectorId id)?> AddMangaToContext(this MangaContext context, Manga addManga, MangaConnectorId addMcId, CancellationToken token) { context.ChangeTracker.Clear(); Log.Debug($"Adding Manga to Context: {addManga}"); - Manga? manga = await context.FindMangaLike(addManga, token); - if (manga is not null) + (Manga,MangaConnectorId)? result; + if (await context.FindMangaLike(addManga, token) is { } manga) { Log.Debug($"Merging with existing Manga: {manga}"); foreach (MangaConnectorId mcId in addManga.MangaConnectorIds) @@ -208,6 +207,8 @@ public static class Tranga manga.AltTitles = manga.AltTitles.UnionBy(addManga.AltTitles, altTitle => altTitle.Key).ToList(); manga.Chapters = manga.Chapters.UnionBy(addManga.Chapters, chapter => chapter.Key).ToList(); manga.MangaConnectorIds = manga.MangaConnectorIds.UnionBy(addManga.MangaConnectorIds, id => id.MangaConnectorName).ToList(); + + result = (manga, manga.MangaConnectorIds.First(id => id.MangaConnectorName == addMcId.MangaConnectorName)); } else { @@ -227,14 +228,15 @@ public static class Tranga addManga.Authors = mergedAuthors.ToList(); context.Mangas.Add(addManga); + result = (addManga, addMcId); } if (await context.Sync(token, reason: "AddMangaToContext") is { success: false }) - return false; + return null; - DownloadCoverFromMangaconnectorWorker downloadCoverWorker = new (addMcId); + DownloadCoverFromMangaconnectorWorker downloadCoverWorker = new (result.Value.Item2); AddWorker(downloadCoverWorker); - return true; + return result; } } \ No newline at end of file