diff options
Diffstat (limited to 'plugins/LocalAnime.hpp')
-rw-r--r-- | plugins/LocalAnime.hpp | 59 |
1 files changed, 56 insertions, 3 deletions
diff --git a/plugins/LocalAnime.hpp b/plugins/LocalAnime.hpp index cd240d3..e768da9 100644 --- a/plugins/LocalAnime.hpp +++ b/plugins/LocalAnime.hpp @@ -1,13 +1,50 @@ #pragma once #include "Page.hpp" - -// TODO: Progress > 90% = fully watched (because ending might have been skipped) +#include <vector> +#include <variant> namespace QuickMedia { + struct LocalAnimeWatchProgress { + double time = 0.0; + double duration = 0.0; + + double get_watch_ratio() const; + bool has_finished_watching() const; + }; + + struct LocalAnime; + struct LocalAnimeSeason; + struct LocalAnimeEpisode; + using LocalAnimeItem = std::variant<LocalAnime, LocalAnimeSeason, LocalAnimeEpisode>; + + struct LocalAnimeEpisode { + Path path; + time_t modified_time_seconds; + }; + + struct LocalAnimeSeason { + Path path; + std::vector<LocalAnimeItem> episodes; + time_t modified_time_seconds; + }; + + struct LocalAnime { + Path path; + std::vector<LocalAnimeItem> items; + time_t modified_time_seconds; + }; + + enum class LocalAnimeSearchPageType { + DIRECTORY, + ANIME, + SEASON + }; + class LocalAnimeSearchPage : public LazyFetchPage { public: - LocalAnimeSearchPage(Program *program) : LazyFetchPage(program) {} + LocalAnimeSearchPage(Program *program, Path directory, LocalAnimeSearchPageType type) + : LazyFetchPage(program), directory(std::move(directory)), type(type) {} const char* get_title() const override { return "Search"; } bool search_is_filter() override { return true; } PluginResult submit(const SubmitArgs &args, std::vector<Tab> &result_tabs) override; @@ -17,5 +54,21 @@ namespace QuickMedia { bool reseek_to_body_item_by_url() override { return true; } std::shared_ptr<BodyItem> get_bookmark_body_item(BodyItem *selected_item) override; void toggle_read(BodyItem *selected_item) override; + private: + Path directory; + LocalAnimeSearchPageType type; + }; + + class LocalAnimeVideoPage : public VideoPage { + public: + LocalAnimeVideoPage(Program *program, std::string filepath, LocalAnimeWatchProgress watch_progress) + : VideoPage(program, std::move(filepath)), watch_progress(std::move(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(double time_pos_sec) override; + private: + LocalAnimeWatchProgress watch_progress; }; }
\ No newline at end of file |