#pragma once #include "Manga.hpp" #include namespace QuickMedia { PluginResult legacy_mangadex_id_to_new_manga_id(Page *page, const std::vector &manga_ids, std::vector> &new_manga_ids); using ChapterImageUrls = std::unordered_map>; class MangadexSearchPage : public Page { public: MangadexSearchPage(Program *program) : Page(program) {} const char* get_title() const override { return "Search"; } bool search_is_filter() override { return false; } SearchResult search(const std::string &str, BodyItems &result_items) override; PluginResult get_page(const std::string &str, int page, BodyItems &result_items) override; PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) override; ChapterImageUrls chapter_image_urls; private: PluginResult get_cover_urls(BodyItems &body_items); SearchResult search(const std::string &str, int page, BodyItems &result_items); bool get_rememberme_token(std::string &rememberme_token); std::optional rememberme_token; }; class MangadexChaptersPage : public MangaChaptersPage { public: MangadexChaptersPage(Program *program, MangadexSearchPage *search_page, std::string manga_name, std::string manga_url) : MangaChaptersPage(program, std::move(manga_name), std::move(manga_url)), search_page(search_page) {} PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) override; PluginResult get_page(const std::string &str, int page, BodyItems &result_items) override; protected: bool extract_id_from_url(const std::string &url, std::string &manga_id) const override; const char* get_service_name() const override { return "mangadex"; } private: MangadexSearchPage *search_page; }; class MangadexImagesPage : public MangaImagesPage { public: MangadexImagesPage(Program *program, MangadexSearchPage *search_page, std::string manga_name, std::string chapter_id, std::string chapter_name) : MangaImagesPage(program, std::move(manga_name), std::move(chapter_name), std::move(chapter_id)), search_page(search_page) {} ImageResult get_number_of_images(int &num_images) override; ImageResult for_each_page_in_chapter(PageCallback callback) override; const char* get_service_name() const override { return "mangadex"; } const char* get_website_url() const override { return "https://mangadex.org/"; } private: ImageResult get_image_urls_for_chapter(const std::string &url); private: MangadexSearchPage *search_page; }; }