From 9799803529c57930a0e7f12e45cbcf2b2e4419eb Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 28 May 2020 02:08:40 +0200 Subject: Add support for mangadex --- plugins/Manga.hpp | 19 +++++++++++++++++++ plugins/Mangadex.hpp | 31 +++++++++++++++++++++++++++++++ plugins/Manganelo.hpp | 16 +++++++--------- plugins/Plugin.hpp | 1 + 4 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 plugins/Manga.hpp create mode 100644 plugins/Mangadex.hpp (limited to 'plugins') diff --git a/plugins/Manga.hpp b/plugins/Manga.hpp new file mode 100644 index 0000000..18ed2f9 --- /dev/null +++ b/plugins/Manga.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include "Plugin.hpp" +#include +#include + +namespace QuickMedia { + // Return false to stop iteration + using PageCallback = std::function; + + class Manga : public Plugin { + public: + Manga(const std::string &plugin_name) : Plugin(plugin_name) {} + bool is_manga() override { return true; } + virtual ImageResult get_number_of_images(const std::string &url, int &num_images) = 0; + virtual ImageResult for_each_page_in_chapter(const std::string &chapter_url, PageCallback callback) = 0; + virtual bool extract_id_from_url(const std::string &url, std::string &manga_id) = 0; + }; +} \ No newline at end of file diff --git a/plugins/Mangadex.hpp b/plugins/Mangadex.hpp new file mode 100644 index 0000000..9d6d366 --- /dev/null +++ b/plugins/Mangadex.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include "Manga.hpp" +#include +#include + +namespace QuickMedia { + class Mangadex : public Manga { + public: + Mangadex() : Manga("mangadex") {} + SearchResult search(const std::string &url, BodyItems &result_items) override; + SuggestionResult update_search_suggestions(const std::string &text, BodyItems &result_items) override; + ImageResult get_number_of_images(const std::string &url, int &num_images) override; + bool search_suggestions_has_thumbnails() const override { return true; } + bool search_results_has_thumbnails() const override { return false; } + int get_search_delay() const override { return 300; } + Page get_page_after_search() const override { return Page::EPISODE_LIST; } + + ImageResult for_each_page_in_chapter(const std::string &chapter_url, PageCallback callback) override; + + bool extract_id_from_url(const std::string &url, std::string &manga_id) override; + private: + SearchResult search_page(const std::string &url, BodyItems &result_items, int page, bool *is_last_page); + // Caches url. If the same url is requested multiple times then the cache is used + ImageResult get_image_urls_for_chapter(const std::string &url); + private: + std::string last_chapter_url; + std::vector last_chapter_image_urls; + std::mutex image_urls_mutex; + }; +} \ No newline at end of file diff --git a/plugins/Manganelo.hpp b/plugins/Manganelo.hpp index 3405de2..ffac830 100644 --- a/plugins/Manganelo.hpp +++ b/plugins/Manganelo.hpp @@ -1,26 +1,24 @@ #pragma once -#include "Plugin.hpp" +#include "Manga.hpp" #include #include namespace QuickMedia { - // Return false to stop iteration - using PageCallback = std::function; - - class Manganelo : public Plugin { + class Manganelo : public Manga { public: - Manganelo() : Plugin("manganelo") {} + Manganelo() : Manga("manganelo") {} SearchResult search(const std::string &url, BodyItems &result_items) override; SuggestionResult update_search_suggestions(const std::string &text, BodyItems &result_items) override; - ImageResult get_image_by_index(const std::string &url, int index, std::string &image_data); - ImageResult get_number_of_images(const std::string &url, int &num_images); + ImageResult get_number_of_images(const std::string &url, int &num_images) override; bool search_suggestions_has_thumbnails() const override { return true; } bool search_results_has_thumbnails() const override { return false; } int get_search_delay() const override { return 150; } Page get_page_after_search() const override { return Page::EPISODE_LIST; } - ImageResult for_each_page_in_chapter(const std::string &chapter_url, PageCallback callback); + ImageResult for_each_page_in_chapter(const std::string &chapter_url, PageCallback callback) override; + + bool extract_id_from_url(const std::string &url, std::string &manga_id) override; private: // Caches url. If the same url is requested multiple times then the cache is used ImageResult get_image_urls_for_chapter(const std::string &url); diff --git a/plugins/Plugin.hpp b/plugins/Plugin.hpp index e19fbcd..b430d57 100644 --- a/plugins/Plugin.hpp +++ b/plugins/Plugin.hpp @@ -42,6 +42,7 @@ namespace QuickMedia { virtual ~Plugin() = default; virtual bool is_image_board() { return false; } + virtual bool is_manga() { return false; } virtual PluginResult get_front_page(BodyItems &result_items) { (void)result_items; return PluginResult::OK; -- cgit v1.2.3