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) { //Get all enabled Connectors MangaConnector[] enabledConnectors = Tranga.MangaConnectors.Where(c => c.Enabled && c.Name != "Global").ToArray(); //Create Task for each MangaConnector to search simultaneously Task<(Manga, MangaConnectorId)[]>[] tasks = enabledConnectors.Select(c => new Task<(Manga, MangaConnectorId)[]>(() => c.SearchManga(mangaSearchName))).ToArray(); foreach (var task in tasks) task.Start(); //Wait for all tasks to finish do { Thread.Sleep(50); }while(tasks.Any(t => t.Status < TaskStatus.RanToCompletion)); //Concatenate all results into one (Manga, MangaConnectorId)[] ret = tasks.Select(t => t.IsCompletedSuccessfully ? t.Result : []).ToArray().SelectMany(i => i).ToArray(); 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); } }