aboutsummaryrefslogtreecommitdiff
path: root/include/QuickMedia.hpp
blob: 7bf82311d15117d93d648aa06dca4ec46eb16daf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#pragma once

#include "Body.hpp"
#include "SearchBar.hpp"
#include "Page.hpp"
#include "Storage.hpp"
#include <vector>
#include <memory>
#include <SFML/Graphics/Font.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include <json/value.h>
#include <unordered_set>
#include <future>

namespace QuickMedia {
    class Plugin;
    class Manganelo;
    
    class Program {
    public:
        Program();
        ~Program();
        int run(int argc, char **argv);

        Plugin* get_current_plugin() { return current_plugin; }
    private:
        void base_event_handler(sf::Event &event, Page previous_page, bool handle_key_press = true);
        void search_suggestion_page();
        void search_result_page();
        void video_content_page();
        void episode_list_page();
        void image_page();
        void content_list_page();
        void content_details_page();

        enum class LoadImageResult {
            OK,
            FAILED,
            DOWNLOAD_IN_PROGRESS
        };

        LoadImageResult load_image_by_index(int image_index, sf::Texture &image_texture, sf::String &error_message);
        void download_chapter_images_if_needed(Manganelo *image_plugin);
        void select_episode(BodyItem *item, bool start_from_beginning);
    private:
        sf::RenderWindow window;
        sf::Vector2f window_size;
        sf::Font font;
        Body *body;
        Plugin *current_plugin;
        sf::Texture plugin_logo;
        std::unique_ptr<SearchBar> search_bar;
        Page current_page;
        // TODO: Combine these
        std::string images_url;
        std::string content_title;
        std::string content_episode;
        std::string content_url;
        std::string content_list_url;
        std::string chapter_title;
        int image_index;
        Path content_storage_file;
        Path content_cache_dir;
        std::string manga_id_base64;
        Json::Value content_storage_json;
        std::unordered_set<std::string> watched_videos;
        std::future<BodyItems> search_suggestion_future;
        std::future<void> image_download_future;
        std::string downloading_chapter_url;
        bool image_download_cancel;
    };
}