From 261b0263f34ffcbe439d68b2e901fd3abbfc1eaf Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 23 Oct 2020 07:26:39 +0200 Subject: Re-add creators page --- plugins/Manga.hpp | 4 ++++ plugins/Mangadex.hpp | 3 +++ plugins/Manganelo.hpp | 11 +++++++---- plugins/Mangatown.hpp | 5 +++-- plugins/Page.hpp | 12 ++++++++++++ 5 files changed, 29 insertions(+), 6 deletions(-) (limited to 'plugins') diff --git a/plugins/Manga.hpp b/plugins/Manga.hpp index 732e208..96a5d53 100644 --- a/plugins/Manga.hpp +++ b/plugins/Manga.hpp @@ -53,5 +53,9 @@ namespace QuickMedia { public: MangaChaptersPage(Program *program, std::string manga_name, std::string manga_url) : TrackablePage(program, std::move(manga_name), std::move(manga_url)) {} TrackResult track(const std::string &str) override; + void on_navigate_to_page() override; + protected: + virtual bool extract_id_from_url(const std::string &url, std::string &manga_id) const = 0; + virtual const char* get_service_name() const = 0; }; } \ No newline at end of file diff --git a/plugins/Mangadex.hpp b/plugins/Mangadex.hpp index 1b238a2..96bfc50 100644 --- a/plugins/Mangadex.hpp +++ b/plugins/Mangadex.hpp @@ -21,6 +21,9 @@ namespace QuickMedia { public: MangadexChaptersPage(Program *program, std::string manga_name, std::string manga_url) : MangaChaptersPage(program, std::move(manga_name), std::move(manga_url)) {} PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) 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"; } }; class MangadexImagesPage : public MangaImagesPage { diff --git a/plugins/Manganelo.hpp b/plugins/Manganelo.hpp index 4fbce5b..e2b602f 100644 --- a/plugins/Manganelo.hpp +++ b/plugins/Manganelo.hpp @@ -12,21 +12,24 @@ namespace QuickMedia { SearchResult search(const std::string &str, BodyItems &result_items) override; PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) override; sf::Vector2i get_thumbnail_max_size() override { return sf::Vector2i(101, 141); }; - private: - bool extract_id_from_url(const std::string &url, std::string &manga_id) const; }; class ManganeloChaptersPage : public MangaChaptersPage { public: ManganeloChaptersPage(Program *program, std::string manga_name, std::string manga_url) : MangaChaptersPage(program, std::move(manga_name), std::move(manga_url)) {} PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) 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 "manganelo"; } }; - class ManganeloCreatorPage : public Page { + class ManganeloCreatorPage : public LazyFetchPage { public: - ManganeloCreatorPage(Program *program, Creator creator) : Page(program), creator(std::move(creator)) {} + ManganeloCreatorPage(Program *program, Creator creator) : LazyFetchPage(program), creator(std::move(creator)) {} const char* get_title() const override { return creator.name.c_str(); } PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) override; + PluginResult lazy_fetch(BodyItems &result_items) override; + sf::Vector2i get_thumbnail_max_size() override { return sf::Vector2i(101, 141); }; private: Creator creator; }; diff --git a/plugins/Mangatown.hpp b/plugins/Mangatown.hpp index 10f2500..66d9d2a 100644 --- a/plugins/Mangatown.hpp +++ b/plugins/Mangatown.hpp @@ -13,14 +13,15 @@ namespace QuickMedia { 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; sf::Vector2i get_thumbnail_max_size() override { return sf::Vector2i(101, 141); }; - private: - bool extract_id_from_url(const std::string &url, std::string &manga_id) const; }; class MangatownChaptersPage : public MangaChaptersPage { public: MangatownChaptersPage(Program *program, std::string manga_name, std::string manga_url) : MangaChaptersPage(program, std::move(manga_name), std::move(manga_url)) {} PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) 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 "mangatown"; } }; class MangatownImagesPage : public MangaImagesPage { diff --git a/plugins/Page.hpp b/plugins/Page.hpp index f65cd21..b4ea9a6 100644 --- a/plugins/Page.hpp +++ b/plugins/Page.hpp @@ -34,6 +34,11 @@ namespace QuickMedia { // Mutually exclusive with |is_manga_images_page|, |is_image_board_thread_page| and |is_video_page| virtual bool is_single_page() const { return false; } virtual bool is_trackable() const { return false; } + // Mutually exclusive with |is_manga_images_page|, |is_image_board_thread_page| and |is_video_page| + virtual bool is_lazy_fetch_page() const { return false; } + + // This is called both when first navigating to page and when going back to page + virtual void on_navigate_to_page() {}; bool is_tor_enabled(); std::unique_ptr create_body(); @@ -61,4 +66,11 @@ namespace QuickMedia { const std::string content_title; const std::string content_url; }; + + class LazyFetchPage : public Page { + public: + LazyFetchPage(Program *program) : Page(program) {} + bool is_lazy_fetch_page() const override { return true; } + virtual PluginResult lazy_fetch(BodyItems &result_items) = 0; + }; } \ No newline at end of file -- cgit v1.2.3