mirror of
https://github.com/C9Glax/tranga.git
synced 2025-04-14 04:13:18 +02:00
"Global"-Connector https://github.com/C9Glax/tranga-website/issues/50
This commit is contained in:
parent
d75262a8f3
commit
f691529591
@ -117,7 +117,8 @@ using (var scope = app.Services.CreateScope())
|
|||||||
new Mangaworld(),
|
new Mangaworld(),
|
||||||
new ManhuaPlus(),
|
new ManhuaPlus(),
|
||||||
new Weebcentral(),
|
new Weebcentral(),
|
||||||
new Manganato()
|
new Manganato(),
|
||||||
|
new Global(scope.ServiceProvider.GetService<PgsqlContext>()!)
|
||||||
];
|
];
|
||||||
MangaConnector[] newConnectors = connectors.Where(c => !context.MangaConnectors.Contains(c)).ToArray();
|
MangaConnector[] newConnectors = connectors.Where(c => !context.MangaConnectors.Contains(c)).ToArray();
|
||||||
context.MangaConnectors.AddRange(newConnectors);
|
context.MangaConnectors.AddRange(newConnectors);
|
||||||
|
55
API/Schema/MangaConnectors/Global.cs
Normal file
55
API/Schema/MangaConnectors/Global.cs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
namespace API.Schema.MangaConnectors;
|
||||||
|
|
||||||
|
public class Global : MangaConnector
|
||||||
|
{
|
||||||
|
private PgsqlContext context { get; init; }
|
||||||
|
public Global(PgsqlContext context) : base("Global", ["all"], [""], "")
|
||||||
|
{
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override (Manga, List<Author>?, List<MangaTag>?, List<Link>?, List<MangaAltTitle>?)[] GetManga(string publicationTitle = "")
|
||||||
|
{
|
||||||
|
//Get all enabled Connectors
|
||||||
|
MangaConnector[] enabledConnectors = context.MangaConnectors.Where(c => c.Enabled && c.Name != "Global").ToArray();
|
||||||
|
|
||||||
|
//Create Task for each MangaConnector to search simulatneously
|
||||||
|
Task<(Manga, List<Author>?, List<MangaTag>?, List<Link>?, List<MangaAltTitle>?)[]>[] tasks =
|
||||||
|
enabledConnectors.Select(c =>
|
||||||
|
new Task<(Manga, List<Author>?, List<MangaTag>?, List<Link>?, List<MangaAltTitle>?)[]>(() => c.GetManga(publicationTitle))).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, List<Author>?, List<MangaTag>?, List<Link>?, List<MangaAltTitle>?)[] ret =
|
||||||
|
tasks.Select(t => t.IsCompletedSuccessfully ? t.Result : []).ToArray().SelectMany(i => i).ToArray();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override (Manga, List<Author>?, List<MangaTag>?, List<Link>?, List<MangaAltTitle>?)? GetMangaFromUrl(string url)
|
||||||
|
{
|
||||||
|
MangaConnector? mc = context.MangaConnectors.ToArray().FirstOrDefault(c => c.ValidateUrl(url));
|
||||||
|
return mc?.GetMangaFromUrl(url) ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override (Manga, List<Author>?, List<MangaTag>?, List<Link>?, List<MangaAltTitle>?)? GetMangaFromId(string publicationId)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Chapter[] GetChapters(Manga manga, string language = "en")
|
||||||
|
{
|
||||||
|
return manga.MangaConnector?.GetChapters(manga) ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
|
internal override string[] GetChapterImageUrls(Chapter chapter)
|
||||||
|
{
|
||||||
|
return chapter.ParentManga?.MangaConnector?.GetChapterImageUrls(chapter) ?? [];
|
||||||
|
}
|
||||||
|
}
|
@ -25,6 +25,7 @@ public class PgsqlContext(DbContextOptions<PgsqlContext> options) : DbContext(op
|
|||||||
{
|
{
|
||||||
modelBuilder.Entity<MangaConnector>()
|
modelBuilder.Entity<MangaConnector>()
|
||||||
.HasDiscriminator(c => c.Name)
|
.HasDiscriminator(c => c.Name)
|
||||||
|
.HasValue<Global>("Global")
|
||||||
.HasValue<AsuraToon>("AsuraToon")
|
.HasValue<AsuraToon>("AsuraToon")
|
||||||
.HasValue<Bato>("Bato")
|
.HasValue<Bato>("Bato")
|
||||||
.HasValue<MangaHere>("MangaHere")
|
.HasValue<MangaHere>("MangaHere")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user