LocalAnime.hpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. #include "Page.hpp"
  3. #include "utils/WatchProgress.hpp"
  4. #include <vector>
  5. #include <variant>
  6. namespace QuickMedia {
  7. struct LocalAnime;
  8. struct LocalAnimeSeason;
  9. struct LocalAnimeEpisode;
  10. using LocalAnimeItem = std::variant<LocalAnime, LocalAnimeSeason, LocalAnimeEpisode>;
  11. struct LocalAnimeEpisode {
  12. std::string name;
  13. Path path;
  14. time_t modified_time_seconds = 0;
  15. };
  16. struct LocalAnimeSeason {
  17. std::string name;
  18. std::vector<LocalAnimeItem> episodes;
  19. time_t modified_time_seconds = 0;
  20. };
  21. struct LocalAnime {
  22. std::string name;
  23. std::vector<LocalAnimeItem> items;
  24. time_t modified_time_seconds = 0;
  25. };
  26. std::vector<LocalAnimeItem> get_anime_in_directory(const Path &directory);
  27. class LocalAnimeSearchPage : public LazyFetchPage {
  28. public:
  29. LocalAnimeSearchPage(Program *program)
  30. : LazyFetchPage(program), parent_search_page(nullptr), fetch_home_page(true) {}
  31. LocalAnimeSearchPage(Program *program, std::vector<LocalAnimeItem> anime_items, LocalAnimeSearchPage *parent_search_page = nullptr)
  32. : LazyFetchPage(program), parent_search_page(parent_search_page), anime_items(std::move(anime_items)) {}
  33. const char* get_title() const override { return title.empty() ? "Search" : title.c_str(); }
  34. bool search_is_filter() override { return true; }
  35. PluginResult submit(const SubmitArgs &args, std::vector<Tab> &result_tabs) override;
  36. PluginResult lazy_fetch(BodyItems &result_items) override;
  37. void toggle_read(BodyItem *selected_item) override;
  38. bool reseek_to_body_item_by_url() override { return true; }
  39. LocalAnimeSearchPage *parent_search_page;
  40. std::string title;
  41. private:
  42. std::vector<LocalAnimeItem> anime_items;
  43. bool fetch_home_page = false;
  44. };
  45. class LocalAnimeVideoPage : public VideoPage {
  46. public:
  47. LocalAnimeVideoPage(Program *program, LocalAnimeSearchPage *search_page, std::string filepath, WatchProgress *watch_progress)
  48. : VideoPage(program, std::move(filepath)), search_page(search_page), watch_progress(watch_progress) {}
  49. const char* get_title() const override { return ""; }
  50. std::string get_video_url(int max_height, bool &has_embedded_audio, std::string &ext) override;
  51. std::string get_url_timestamp() override;
  52. bool is_local() const override { return true; }
  53. void set_watch_progress(int64_t time_pos_sec, int64_t duration_sec) override;
  54. private:
  55. LocalAnimeSearchPage *search_page;
  56. WatchProgress *watch_progress;
  57. };
  58. }