12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #pragma once
- #include "Page.hpp"
- #include "utils/WatchProgress.hpp"
- #include <vector>
- #include <variant>
- namespace QuickMedia {
- struct LocalAnime;
- struct LocalAnimeSeason;
- struct LocalAnimeEpisode;
- using LocalAnimeItem = std::variant<LocalAnime, LocalAnimeSeason, LocalAnimeEpisode>;
- struct LocalAnimeEpisode {
- std::string name;
- Path path;
- time_t modified_time_seconds = 0;
- };
- struct LocalAnimeSeason {
- std::string name;
- std::vector<LocalAnimeItem> episodes;
- time_t modified_time_seconds = 0;
- };
- struct LocalAnime {
- std::string name;
- std::vector<LocalAnimeItem> items;
- time_t modified_time_seconds = 0;
- };
- std::vector<LocalAnimeItem> get_anime_in_directory(const Path &directory);
- class LocalAnimeSearchPage : public LazyFetchPage {
- public:
- LocalAnimeSearchPage(Program *program)
- : LazyFetchPage(program), parent_search_page(nullptr), fetch_home_page(true) {}
- LocalAnimeSearchPage(Program *program, std::vector<LocalAnimeItem> anime_items, LocalAnimeSearchPage *parent_search_page = nullptr)
- : LazyFetchPage(program), parent_search_page(parent_search_page), anime_items(std::move(anime_items)) {}
- const char* get_title() const override { return title.empty() ? "Search" : title.c_str(); }
- bool search_is_filter() override { return true; }
- PluginResult submit(const SubmitArgs &args, std::vector<Tab> &result_tabs) override;
- PluginResult lazy_fetch(BodyItems &result_items) override;
- void toggle_read(BodyItem *selected_item) override;
- bool reseek_to_body_item_by_url() override { return true; }
- LocalAnimeSearchPage *parent_search_page;
- std::string title;
- private:
- std::vector<LocalAnimeItem> anime_items;
- bool fetch_home_page = false;
- };
- class LocalAnimeVideoPage : public VideoPage {
- public:
- LocalAnimeVideoPage(Program *program, LocalAnimeSearchPage *search_page, std::string filepath, WatchProgress *watch_progress)
- : VideoPage(program, std::move(filepath)), search_page(search_page), watch_progress(watch_progress) {}
- const char* get_title() const override { return ""; }
- std::string get_video_url(int max_height, bool &has_embedded_audio, std::string &ext) override;
- std::string get_url_timestamp() override;
- bool is_local() const override { return true; }
- void set_watch_progress(int64_t time_pos_sec, int64_t duration_sec) override;
- private:
- LocalAnimeSearchPage *search_page;
- WatchProgress *watch_progress;
- };
- }
|