mirror of
https://github.com/C9Glax/tranga.git
synced 2025-02-23 07:40:13 +01:00
Fix redundant keys, MangaSearch
This commit is contained in:
parent
87274aca19
commit
3b58e0498b
@ -43,19 +43,14 @@ public class ConnectorController(PgsqlContext context) : Controller
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
context.Tags.AddRange(tags);
|
AddMangaToContext(manga, authors, tags, links, altTitles);
|
||||||
context.Authors.AddRange(authors);
|
|
||||||
context.Link.AddRange(links);
|
|
||||||
context.AltTitles.AddRange(altTitles);
|
|
||||||
context.Manga.AddRange(manga);
|
|
||||||
context.SaveChanges();
|
|
||||||
}
|
}
|
||||||
catch (DbUpdateException)
|
catch (DbUpdateException)
|
||||||
{
|
{
|
||||||
return StatusCode(500, new ProblemResponse("An error occurred while processing your request."));
|
return StatusCode(500, new ProblemResponse("An error occurred while processing your request."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Ok(allManga.Select(m => m.Item1).ToArray());
|
return Ok(allManga.Select(m => context.Manga.Find(m.Item1.MangaId)).ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -78,18 +73,49 @@ public class ConnectorController(PgsqlContext context) : Controller
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
context.Tags.AddRange(tags);
|
AddMangaToContext(manga, authors, tags, links, altTitles);
|
||||||
context.Authors.AddRange(authors);
|
|
||||||
context.Link.AddRange(links);
|
|
||||||
context.AltTitles.AddRange(altTitles);
|
|
||||||
context.Manga.AddRange(manga);
|
|
||||||
context.SaveChanges();
|
|
||||||
}
|
}
|
||||||
catch (DbUpdateException)
|
catch (DbUpdateException)
|
||||||
{
|
{
|
||||||
return StatusCode(500, new ProblemResponse("An error occurred while processing your request."));
|
return StatusCode(500, new ProblemResponse("An error occurred while processing your request."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Ok(mangas.Select(m => m.Item1).ToArray());
|
|
||||||
|
return Ok(mangas.Select(m => context.Manga.Find(m.Item1.MangaId)).ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddMangaToContext(Manga? manga, Author[]? authors, MangaTag[]? tags, Link[]? links,
|
||||||
|
MangaAltTitle[]? altTitles)
|
||||||
|
{
|
||||||
|
if (manga is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (tags is not null)
|
||||||
|
{
|
||||||
|
IEnumerable<MangaTag> newTags = tags.Where(mt => context.Tags.All(t => !t.Tag.Equals(mt.Tag)));
|
||||||
|
context.Tags.AddRange(newTags);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (authors is not null)
|
||||||
|
{
|
||||||
|
IEnumerable<Author> mergedAuthors = authors.Select(ma =>
|
||||||
|
{
|
||||||
|
Author? inDb = context.Authors.FirstOrDefault(a => a.Equals(ma));
|
||||||
|
return inDb ?? ma;
|
||||||
|
});
|
||||||
|
manga.Authors = mergedAuthors.ToArray();
|
||||||
|
IEnumerable<Author> newAuthors = authors.Where(ma => context.Authors.All(a => !a.Equals(ma)));
|
||||||
|
context.Authors.AddRange(newAuthors);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (links is not null)
|
||||||
|
context.Link.AddRange(links);
|
||||||
|
|
||||||
|
if(altTitles is not null)
|
||||||
|
context.AltTitles.AddRange(altTitles);
|
||||||
|
|
||||||
|
context.Manga.Add(manga);
|
||||||
|
|
||||||
|
context.SaveChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -149,7 +149,7 @@ public class MangaController(PgsqlContext context) : Controller
|
|||||||
Manga? m = context.Manga.Find(id);
|
Manga? m = context.Manga.Find(id);
|
||||||
if (m is null)
|
if (m is null)
|
||||||
return NotFound("Manga could not be found");
|
return NotFound("Manga could not be found");
|
||||||
Chapter[] ret = context.Chapters.Where(c => c.ParentMangaId == m.MangaId).ToArray();
|
Chapter[] ret = context.Chapters.Where(c => c.ParentManga.MangaId == m.MangaId).ToArray();
|
||||||
return Ok(ret);
|
return Ok(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +171,7 @@ public class MangaController(PgsqlContext context) : Controller
|
|||||||
Manga? ret = context.Manga.Find(id);
|
Manga? ret = context.Manga.Find(id);
|
||||||
if(ret is null)
|
if(ret is null)
|
||||||
return NotFound("Manga could not be found");
|
return NotFound("Manga could not be found");
|
||||||
if(chapters.All(c => c.ParentMangaId == ret.MangaId))
|
if(chapters.All(c => c.ParentManga.MangaId == ret.MangaId))
|
||||||
return BadRequest("Chapters belong to different Manga.");
|
return BadRequest("Chapters belong to different Manga.");
|
||||||
|
|
||||||
context.Chapters.AddRange(chapters);
|
context.Chapters.AddRange(chapters);
|
||||||
@ -197,10 +197,9 @@ public class MangaController(PgsqlContext context) : Controller
|
|||||||
Manga? m = context.Manga.Find(id);
|
Manga? m = context.Manga.Find(id);
|
||||||
if (m is null)
|
if (m is null)
|
||||||
return NotFound("Manga could not be found");
|
return NotFound("Manga could not be found");
|
||||||
Chapter? c = context.Chapters.Find(m.LatestChapterAvailableId);
|
if (m.LatestChapterAvailable is null)
|
||||||
if (c is null)
|
|
||||||
return NotFound("Chapter could not be found");
|
return NotFound("Chapter could not be found");
|
||||||
return Ok(c);
|
return Ok(m.LatestChapterAvailable);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -10,6 +10,10 @@ public class Author(string authorName)
|
|||||||
public string AuthorId { get; init; } = TokenGen.CreateToken(typeof(Author), 64);
|
public string AuthorId { get; init; } = TokenGen.CreateToken(typeof(Author), 64);
|
||||||
public string AuthorName { get; init; } = authorName;
|
public string AuthorName { get; init; } = authorName;
|
||||||
|
|
||||||
[ForeignKey("MangaIds")]
|
public override bool Equals(object? obj)
|
||||||
public virtual Manga[] Mangas { get; internal set; } = [];
|
{
|
||||||
|
if (obj is not Author other)
|
||||||
|
return false;
|
||||||
|
return other.AuthorName == AuthorName;
|
||||||
|
}
|
||||||
}
|
}
|
@ -18,15 +18,13 @@ public class Chapter : IComparable<Chapter>
|
|||||||
public string ArchiveFileName { get; private set; }
|
public string ArchiveFileName { get; private set; }
|
||||||
public bool Downloaded { get; internal set; } = false;
|
public bool Downloaded { get; internal set; } = false;
|
||||||
|
|
||||||
[MaxLength(64)]
|
[ForeignKey("MangaId")]
|
||||||
public string ParentMangaId { get; init; }
|
public Manga ParentManga { get; init; }
|
||||||
[ForeignKey("ParentMangaId")]
|
|
||||||
public virtual Manga ParentManga { get; init; }
|
|
||||||
|
|
||||||
public Chapter(string parentMangaId, string url, float chapterNumber,
|
public Chapter(Manga parentManga, string url, float chapterNumber,
|
||||||
float? volumeNumber = null, string? title = null)
|
float? volumeNumber = null, string? title = null)
|
||||||
{
|
{
|
||||||
this.ParentMangaId = parentMangaId;
|
this.ParentManga = parentManga;
|
||||||
this.Url = url;
|
this.Url = url;
|
||||||
this.ChapterNumber = chapterNumber;
|
this.ChapterNumber = chapterNumber;
|
||||||
this.VolumeNumber = volumeNumber;
|
this.VolumeNumber = volumeNumber;
|
||||||
@ -34,10 +32,8 @@ public class Chapter : IComparable<Chapter>
|
|||||||
this.ArchiveFileName = BuildArchiveFileName();
|
this.ArchiveFileName = BuildArchiveFileName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Chapter(Manga parentManga, string url, float chapterNumber,
|
public Chapter(string url, float chapterNumber, float? volumeNumber = null, string? title = null)
|
||||||
float? volumeNumber = null, string? title = null) : this(parentManga.MangaId, url, chapterNumber, volumeNumber, title)
|
: this(null, url, chapterNumber, volumeNumber, title){}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public MoveFileOrFolderJob? UpdateChapterNumber(float chapterNumber)
|
public MoveFileOrFolderJob? UpdateChapterNumber(float chapterNumber)
|
||||||
{
|
{
|
||||||
|
@ -22,13 +22,13 @@ public class Manga(
|
|||||||
string? originalLanguage,
|
string? originalLanguage,
|
||||||
MangaReleaseStatus releaseStatus,
|
MangaReleaseStatus releaseStatus,
|
||||||
float ignoreChapterBefore,
|
float ignoreChapterBefore,
|
||||||
string? latestChapterDownloadedId,
|
Chapter? latestChapterDownloaded,
|
||||||
string? latestChapterAvailableId,
|
Chapter? latestChapterAvailable,
|
||||||
string mangaConnectorName,
|
MangaConnector mangaConnector,
|
||||||
string[] authorIds,
|
Author[] authors,
|
||||||
string[] tagIds,
|
MangaTag[] tags,
|
||||||
string[] linkIds,
|
Link[] links,
|
||||||
string[] altTitleIds)
|
MangaAltTitle[] altTitles)
|
||||||
{
|
{
|
||||||
[MaxLength(64)]
|
[MaxLength(64)]
|
||||||
public string MangaId { get; init; } = TokenGen.CreateToken(typeof(Manga), 64);
|
public string MangaId { get; init; } = TokenGen.CreateToken(typeof(Manga), 64);
|
||||||
@ -46,30 +46,33 @@ public class Manga(
|
|||||||
public string FolderName { get; private set; } = BuildFolderName(name);
|
public string FolderName { get; private set; } = BuildFolderName(name);
|
||||||
public float IgnoreChapterBefore { get; internal set; } = ignoreChapterBefore;
|
public float IgnoreChapterBefore { get; internal set; } = ignoreChapterBefore;
|
||||||
|
|
||||||
public string? LatestChapterDownloadedId { get; internal set; } = latestChapterDownloadedId;
|
public Chapter? LatestChapterDownloaded { get; private set; } = latestChapterDownloaded;
|
||||||
public virtual Chapter? LatestChapterDownloaded { get; }
|
|
||||||
|
|
||||||
public string? LatestChapterAvailableId { get; internal set; } = latestChapterAvailableId;
|
public Chapter? LatestChapterAvailable { get; private set; } = latestChapterAvailable;
|
||||||
public virtual Chapter? LatestChapterAvailable { get; }
|
|
||||||
|
|
||||||
public string MangaConnectorName { get; init; } = mangaConnectorName;
|
public MangaConnector MangaConnector { get; private set; } = mangaConnector;
|
||||||
public virtual MangaConnector MangaConnector { get; }
|
|
||||||
|
|
||||||
public string[] AuthorIds { get; internal set; } = authorIds;
|
|
||||||
[ForeignKey("AuthorIds")]
|
[ForeignKey("AuthorIds")]
|
||||||
public virtual Author[] Authors { get; }
|
public ICollection<Author> Authors { get; internal set; } = authors;
|
||||||
|
|
||||||
public string[] TagIds { get; internal set; } = tagIds;
|
|
||||||
[ForeignKey("TagIds")]
|
[ForeignKey("TagIds")]
|
||||||
public virtual MangaTag[] Tags { get; }
|
public ICollection<MangaTag> Tags { get; private set; } = tags;
|
||||||
|
|
||||||
public string[] LinkIds { get; internal set; } = linkIds;
|
|
||||||
[ForeignKey("LinkIds")]
|
[ForeignKey("LinkIds")]
|
||||||
public virtual Link[] Links { get; }
|
public ICollection<Link> Links { get; private set; } = links;
|
||||||
|
|
||||||
public string[] AltTitleIds { get; internal set; } = altTitleIds;
|
|
||||||
[ForeignKey("AltTitleIds")]
|
[ForeignKey("AltTitleIds")]
|
||||||
public virtual MangaAltTitle[] AltTitles { get; }
|
public ICollection<MangaAltTitle> AltTitles { get; private set; } = altTitles;
|
||||||
|
|
||||||
|
public Manga(string connectorId, string name, string description, string websiteUrl, string coverUrl,
|
||||||
|
string? coverFileNameInCache,
|
||||||
|
uint year, string? originalLanguage, MangaReleaseStatus releaseStatus, float ignoreChapterBefore)
|
||||||
|
: this(connectorId, name, description, websiteUrl, coverUrl, coverFileNameInCache, year, originalLanguage,
|
||||||
|
releaseStatus,
|
||||||
|
ignoreChapterBefore, null, null, null, null, null, null, null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public MoveFileOrFolderJob UpdateFolderName(string downloadLocation, string newName)
|
public MoveFileOrFolderJob UpdateFolderName(string downloadLocation, string newName)
|
||||||
{
|
{
|
||||||
@ -85,11 +88,11 @@ public class Manga(
|
|||||||
this.Description = other.Description;
|
this.Description = other.Description;
|
||||||
this.CoverUrl = other.CoverUrl;
|
this.CoverUrl = other.CoverUrl;
|
||||||
this.OriginalLanguage = other.OriginalLanguage;
|
this.OriginalLanguage = other.OriginalLanguage;
|
||||||
this.AuthorIds = other.AuthorIds;
|
this.Authors = other.Authors;
|
||||||
this.LinkIds = other.LinkIds;
|
this.Links = other.Links;
|
||||||
this.TagIds = other.TagIds;
|
this.Tags = other.Tags;
|
||||||
this.AltTitleIds = other.AltTitleIds;
|
this.AltTitles = other.AltTitles;
|
||||||
this.LatestChapterAvailableId = other.LatestChapterAvailableId;
|
this.LatestChapterAvailable = other.LatestChapterAvailable;
|
||||||
this.ReleaseStatus = other.ReleaseStatus;
|
this.ReleaseStatus = other.ReleaseStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,9 +111,9 @@ public class AsuraToon : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
[]);
|
[]);
|
||||||
|
|
||||||
|
@ -113,11 +113,11 @@ public class Bato : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
altTitles.Select(a => a.AltTitleId).ToArray());
|
altTitles);
|
||||||
|
|
||||||
return (manga, authors, mangaTags, [], altTitles);
|
return (manga, authors, mangaTags, [], altTitles);
|
||||||
}
|
}
|
||||||
|
@ -176,11 +176,11 @@ public class MangaDex : MangaConnector
|
|||||||
|
|
||||||
Manga pub = new (publicationId, sortName, description, $"https://mangadex.org/title/{publicationId}", coverUrl, null, year,
|
Manga pub = new (publicationId, sortName, description, $"https://mangadex.org/title/{publicationId}", coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
links.Select(l => l.LinkId).ToArray(),
|
links,
|
||||||
altTitles.Select(a => a.AltTitleId).ToArray());
|
altTitles);
|
||||||
|
|
||||||
return (pub, authors, mangaTags, links, altTitles);
|
return (pub, authors, mangaTags, links, altTitles);
|
||||||
}
|
}
|
||||||
|
@ -101,9 +101,9 @@ public class MangaHere : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, 0,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, 0,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
[]);
|
[]);
|
||||||
|
|
||||||
|
@ -141,11 +141,11 @@ public class MangaKatana : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
altTitles.Select(a => a.AltTitleId).ToArray());
|
altTitles);
|
||||||
|
|
||||||
return (manga, authors, mangaTags, [], altTitles);
|
return (manga, authors, mangaTags, [], altTitles);
|
||||||
}
|
}
|
||||||
|
@ -120,9 +120,9 @@ public class MangaLife : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
[]);
|
[]);
|
||||||
|
|
||||||
|
@ -136,11 +136,11 @@ public class Manganato : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
mangaAltTitles.Select(a => a.AltTitleId).ToArray());
|
mangaAltTitles);
|
||||||
|
|
||||||
return (manga, authors, mangaTags, [], mangaAltTitles);
|
return (manga, authors, mangaTags, [], mangaAltTitles);
|
||||||
}
|
}
|
||||||
|
@ -150,9 +150,9 @@ public class Mangasee : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
[]);
|
[]);
|
||||||
|
|
||||||
|
@ -118,11 +118,11 @@ public class Mangaworld : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
altTitles.Select(a => a.AltTitleId).ToArray());
|
altTitles);
|
||||||
|
|
||||||
return (manga, authors, mangaTags, [], altTitles);
|
return (manga, authors, mangaTags, [], altTitles);
|
||||||
}
|
}
|
||||||
|
@ -123,9 +123,9 @@ public class ManhuaPlus : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
[]);
|
[]);
|
||||||
|
|
||||||
|
@ -114,11 +114,11 @@ public class Weebcentral : MangaConnector
|
|||||||
|
|
||||||
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
Manga manga = new (publicationId, sortName, description, websiteUrl, coverUrl, null, year,
|
||||||
originalLanguage, releaseStatus, -1, null, null,
|
originalLanguage, releaseStatus, -1, null, null,
|
||||||
this.Name,
|
this,
|
||||||
authors.Select(a => a.AuthorId).ToArray(),
|
authors,
|
||||||
mangaTags.Select(t => t.Tag).ToArray(),
|
mangaTags,
|
||||||
[],
|
[],
|
||||||
altTitles.Select(a => a.AltTitleId).ToArray());
|
altTitles);
|
||||||
|
|
||||||
return (manga, authors, mangaTags, [], altTitles);
|
return (manga, authors, mangaTags, [], altTitles);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user