diff --git a/API/Controllers/SearchController.cs b/API/Controllers/SearchController.cs
index 10970f9..659b8e2 100644
--- a/API/Controllers/SearchController.cs
+++ b/API/Controllers/SearchController.cs
@@ -86,6 +86,44 @@ public class SearchController(PgsqlContext context) : Controller
return Ok(retMangas.ToArray());
}
+
+ ///
+ /// Returns Manga from MangaConnector associated with URL
+ ///
+ /// Manga-Page URL
+ ///
+ /// Multiple connectors found for URL
+ /// No Manga at URL
+ /// No connector found for URL
+ /// Error during Database Operation
+ [ProducesResponseType(Status200OK, "application/json")]
+ [ProducesResponseType(Status300MultipleChoices)]
+ [ProducesResponseType(Status400BadRequest)]
+ [ProducesResponseType(Status404NotFound)]
+ [ProducesResponseType(Status500InternalServerError, "text/plain")]
+ public IActionResult GetMangaFromUrl(string url)
+ {
+ List connectors = context.MangaConnectors.AsEnumerable().Where(c => c.ValidateUrl(url)).ToList();
+ if (connectors.Count == 0)
+ return NotFound();
+ else if (connectors.Count > 1)
+ return StatusCode(Status300MultipleChoices);
+
+ (Manga manga, List? authors, List? tags, List? links, List? altTitles)? x = connectors.First().GetMangaFromUrl(url);
+ if (x is null)
+ return BadRequest();
+ try
+ {
+ Manga? add = AddMangaToContext(x.Value.manga, x.Value.authors, x.Value.tags, x.Value.links, x.Value.altTitles);
+ if (add is not null)
+ return Ok(add);
+ return StatusCode(500);
+ }
+ catch (Exception e)
+ {
+ return StatusCode(500, e.Message);
+ }
+ }
private Manga? AddMangaToContext(Manga? manga, List? authors, List? tags, List? links,
List? altTitles)
diff --git a/API/Schema/MangaConnectors/MangaConnector.cs b/API/Schema/MangaConnectors/MangaConnector.cs
index 4545c46..c4b78fe 100644
--- a/API/Schema/MangaConnectors/MangaConnector.cs
+++ b/API/Schema/MangaConnectors/MangaConnector.cs
@@ -41,5 +41,5 @@ public abstract class MangaConnector(string name, string[] supportedLanguages, s
internal abstract string[] GetChapterImageUrls(Chapter chapter);
- protected bool ValidateUrl(string url) => BaseUris.Any(baseUri => Regex.IsMatch(url, "https?://" + baseUri + "/.*"));
+ public bool ValidateUrl(string url) => BaseUris.Any(baseUri => Regex.IsMatch(url, "https?://" + baseUri + "/.*"));
}
\ No newline at end of file