#pragma once #include "ImageBoard.hpp" namespace QuickMedia { // |post_id| is optional bool fourchan_extract_url(const std::string &url, std::string &board_id, std::string &thread_id, std::string &post_id); class FourchanBoardsPage : public Page { public: FourchanBoardsPage(Program *program, std::string resources_root) : Page(program), resources_root(std::move(resources_root)) {} const char* get_title() const override { return "Select board"; } PluginResult submit(const SubmitArgs &args, std::vector &result_tabs) override; void get_boards(BodyItems &result_items); const std::string resources_root; std::string pass_id; }; class FourchanLoginPage : public LazyFetchPage { public: FourchanLoginPage(Program *program, std::string title, FourchanBoardsPage *boards_page, std::vector *tabs, size_t tab_index) : LazyFetchPage(program), title(std::move(title)), boards_page(boards_page), tabs(tabs), tab_index(tab_index) {} const char* get_title() const override { return title.c_str(); } PluginResult submit(const SubmitArgs&, std::vector&) override; PluginResult lazy_fetch(BodyItems &result_items) override; bool submit_is_async() const override { return true; } bool allow_submit_no_selection() const override { return true; } bool lazy_fetch_is_loader() override { return true; } void login_finish(); const LoginInputs *login_inputs; private: enum class LoggedIn { Unknown, Yes, No }; std::string title; FourchanBoardsPage *boards_page; std::vector *tabs; size_t tab_index; LoggedIn logged_in = LoggedIn::Unknown; }; class FourchanThreadListPage : public LazyFetchPage { public: FourchanThreadListPage(Program *program, std::string title, std::string board_id, std::string pass_id) : LazyFetchPage(program), title(std::move(title)), board_id(std::move(board_id)), pass_id(std::move(pass_id)) {} const char* get_title() const override { return title.c_str(); } PluginResult submit(const SubmitArgs &args, std::vector &result_tabs) override; PluginResult lazy_fetch(BodyItems &result_items) override; const std::string title; const std::string board_id; std::string pass_id; }; class FourchanThreadPage : public ImageBoardThreadPage { public: FourchanThreadPage(Program *program, std::string board_id, std::string thread_id, std::string post_id, std::string pass_id) : ImageBoardThreadPage(program, std::move(board_id), std::move(thread_id), std::move(post_id)), pass_id(std::move(pass_id)) {} PluginResult lazy_fetch(BodyItems &result_items) override; PostResult post_comment(const std::string &captcha_id, const std::string &captcha_solution, const std::string &comment, const std::string &filepath = "") override; const std::string& get_pass_id() override; PluginResult request_captcha_challenge(ImageBoardCaptchaChallenge &challenge_response) override; private: std::string pass_id; }; }