LocalManga.hpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #pragma once
  2. #include "Manga.hpp"
  3. #include <unordered_set>
  4. namespace QuickMedia {
  5. struct LocalMangaPage {
  6. Path path;
  7. int number;
  8. };
  9. struct LocalMangaChapter {
  10. std::string name;
  11. std::vector<LocalMangaPage> pages;
  12. time_t modified_time_seconds;
  13. };
  14. struct LocalManga {
  15. std::string name;
  16. std::vector<LocalMangaChapter> chapters;
  17. time_t modified_time_seconds;
  18. };
  19. class LocalMangaSearchPage : public LazyFetchPage {
  20. public:
  21. LocalMangaSearchPage(Program *program, bool standalone) : LazyFetchPage(program), standalone(standalone) {}
  22. const char* get_title() const override { return "Search"; }
  23. bool search_is_filter() override { return standalone; }
  24. SearchResult search(const std::string &str, BodyItems &result_items) override;
  25. PluginResult submit(const SubmitArgs &args, std::vector<Tab> &result_tabs) override;
  26. PluginResult lazy_fetch(BodyItems &result_items) override;
  27. const char* get_bookmark_name() const override { return "local-manga"; }
  28. bool reload_on_page_change() override { return true; }
  29. bool reseek_to_body_item_by_url() override { return true; }
  30. std::shared_ptr<BodyItem> get_bookmark_body_item(BodyItem *selected_item) override;
  31. void toggle_read(BodyItem *selected_item) override;
  32. private:
  33. std::vector<LocalManga> manga_list;
  34. std::unordered_set<std::string> finished_reading_manga;
  35. bool standalone;
  36. };
  37. class LocalMangaChaptersPage : public MangaChaptersPage {
  38. public:
  39. 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) {}
  40. PluginResult submit(const SubmitArgs &args, std::vector<Tab> &result_tabs) override;
  41. const char* get_bookmark_name() const override { return "local-manga"; }
  42. protected:
  43. bool extract_id_from_url(const std::string &url, std::string &manga_id) const override;
  44. const char* get_service_name() const override { return "local-manga"; }
  45. };
  46. class LocalMangaImagesPage : public MangaImagesPage {
  47. public:
  48. LocalMangaImagesPage(Program *program, std::string manga_name, std::string chapter_name, std::string url, std::string thumbnail_url) :
  49. MangaImagesPage(program, std::move(manga_name), std::move(chapter_name), std::move(url), std::move(thumbnail_url)) {}
  50. ImageResult update_image_urls(int &num_images) override;
  51. ImageResult for_each_page_in_chapter(PageCallback callback) override;
  52. const char* get_service_name() const override { return "local-manga"; }
  53. const char* get_website_url() const override { return "localhost"; }
  54. bool is_local() override { return true; }
  55. };
  56. }