From 1f74222bf4cfadead768b095c6b3f8d422ebf84c Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 11 Feb 2022 00:42:21 +0100 Subject: Add local-manga plugin to read local manga --- plugins/LocalManga.hpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 plugins/LocalManga.hpp (limited to 'plugins/LocalManga.hpp') diff --git a/plugins/LocalManga.hpp b/plugins/LocalManga.hpp new file mode 100644 index 0000000..27ee89d --- /dev/null +++ b/plugins/LocalManga.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include "Manga.hpp" + +namespace QuickMedia { + struct LocalMangaPage { + Path path; + int number; + }; + + struct LocalMangaChapter { + std::string name; + std::vector pages; + time_t modified_time_seconds; + }; + + struct LocalManga { + std::string name; + std::vector chapters; + time_t modified_time_seconds; + }; + + class LocalMangaSearchPage : public LazyFetchPage { + public: + LocalMangaSearchPage(Program *program, bool standalone) : LazyFetchPage(program), standalone(standalone) {} + const char* get_title() const override { return "Search"; } + bool search_is_filter() override { return standalone; } + SearchResult search(const std::string &str, BodyItems &result_items) override; + PluginResult submit(const SubmitArgs &args, std::vector &result_tabs) override; + PluginResult lazy_fetch(BodyItems &result_items) override; + const char* get_bookmark_name() const override { return "local-manga"; } + private: + std::vector manga_list; + bool standalone; + }; + + class LocalMangaChaptersPage : public MangaChaptersPage { + public: + LocalMangaChaptersPage(Program *program, std::string manga_name, std::string manga_url, const std::string &thumbnail_url) : MangaChaptersPage(program, std::move(manga_name), std::move(manga_url), thumbnail_url) {} + PluginResult submit(const SubmitArgs &args, std::vector &result_tabs) override; + const char* get_bookmark_name() const override { return "local-manga"; } + protected: + bool extract_id_from_url(const std::string &url, std::string &manga_id) const override; + const char* get_service_name() const override { return "local-manga"; } + }; + + class LocalMangaImagesPage : public MangaImagesPage { + public: + LocalMangaImagesPage(Program *program, std::string manga_name, std::string chapter_name, std::string url, std::string thumbnail_url, std::vector pages) : + MangaImagesPage(program, std::move(manga_name), std::move(chapter_name), std::move(url), std::move(thumbnail_url)), pages(std::move(pages)) {} + 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 "local-manga"; } + const char* get_website_url() const override { return "localhost"; } + bool is_local() override { return true; } + private: + ImageResult get_image_urls_for_chapter(const std::string &url); + private: + std::vector pages; + }; +} \ No newline at end of file -- cgit v1.2.3