using API.Schema.MangaContext; namespace API.MangaConnectors; public class Global : MangaConnector { public Global() : base("Global", ["all"], [""], "https://avatars.githubusercontent.com/u/13404778") { } public override (Manga, MangaConnectorId)[] SearchManga(string mangaSearchName) { Log.Debug("Searching Manga on all enabled connectors:"); //Get all enabled Connectors MangaConnector[] enabledConnectors = Tranga.MangaConnectors.Where(c => c.Enabled && c.Name != "Global").ToArray(); Log.Debug(string.Join(", ", enabledConnectors.Select(c => c.Name))); //Create Task for each MangaConnector to search simultaneously Task<(Manga, MangaConnectorId)[]>[] tasks = enabledConnectors.Select(c => new Task<(Manga, MangaConnectorId)[]>(() => c.SearchManga(mangaSearchName))).ToArray(); foreach (Task<(Manga, MangaConnectorId)[]> task in tasks) task.Start(); //Wait for all tasks to finish do { Thread.Sleep(500); Log.Debug($"Waiting for search to finish: {tasks.Count(t => !t.IsCompleted)}"); }while(tasks.Any(t => !t.IsCompleted)); //Concatenate all results into one (Manga, MangaConnectorId)[] ret = tasks.Select(t => t.IsCompletedSuccessfully ? t.Result : []).ToArray().SelectMany(i => i).ToArray(); Log.Debug($"Got {ret.Length} results."); return ret; } public override (Manga, MangaConnectorId)? GetMangaFromUrl(string url) { MangaConnector? mc = Tranga.MangaConnectors.FirstOrDefault(c => c.UrlMatchesConnector(url)); return mc?.GetMangaFromUrl(url) ?? null; } public override (Manga, MangaConnectorId)? GetMangaFromId(string mangaIdOnSite) { return null; } public override (Chapter, MangaConnectorId)[] GetChapters(MangaConnectorId manga, string? language = null) { if (!Tranga.TryGetMangaConnector(manga.MangaConnectorName, out MangaConnector? mangaConnector)) return []; return mangaConnector.GetChapters(manga, language); } internal override string[] GetChapterImageUrls(MangaConnectorId chapterId) { if (!Tranga.TryGetMangaConnector(chapterId.MangaConnectorName, out MangaConnector? mangaConnector)) return []; return mangaConnector.GetChapterImageUrls(chapterId); } }