aboutsummaryrefslogtreecommitdiff
path: root/plugins/LocalManga.hpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-02-11 00:42:21 +0100
committerdec05eba <dec05eba@protonmail.com>2022-02-11 00:42:21 +0100
commit1f74222bf4cfadead768b095c6b3f8d422ebf84c (patch)
tree39035288edb79852cef6237f0d7ab8ea146cf218 /plugins/LocalManga.hpp
parent404ac476a213164a041f0f53be30855df815aa6a (diff)
Add local-manga plugin to read local manga
Diffstat (limited to 'plugins/LocalManga.hpp')
-rw-r--r--plugins/LocalManga.hpp61
1 files changed, 61 insertions, 0 deletions
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<LocalMangaPage> pages;
+ time_t modified_time_seconds;
+ };
+
+ struct LocalManga {
+ std::string name;
+ std::vector<LocalMangaChapter> 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<Tab> &result_tabs) override;
+ PluginResult lazy_fetch(BodyItems &result_items) override;
+ const char* get_bookmark_name() const override { return "local-manga"; }
+ private:
+ std::vector<LocalManga> 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<Tab> &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<LocalMangaPage> 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<LocalMangaPage> pages;
+ };
+} \ No newline at end of file