Fourchan.hpp 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #pragma once
  2. #include "ImageBoard.hpp"
  3. namespace QuickMedia {
  4. // |post_id| is optional
  5. bool fourchan_extract_url(const std::string &url, std::string &board_id, std::string &thread_id, std::string &post_id);
  6. class FourchanBoardsPage : public Page {
  7. public:
  8. FourchanBoardsPage(Program *program, std::string resources_root) : Page(program), resources_root(std::move(resources_root)) {}
  9. const char* get_title() const override { return "Select board"; }
  10. PluginResult submit(const SubmitArgs &args, std::vector<Tab> &result_tabs) override;
  11. void get_boards(BodyItems &result_items);
  12. const std::string resources_root;
  13. std::string pass_id;
  14. };
  15. class FourchanLoginPage : public LazyFetchPage {
  16. public:
  17. FourchanLoginPage(Program *program, std::string title, FourchanBoardsPage *boards_page, std::vector<Tab> *tabs, size_t tab_index) :
  18. LazyFetchPage(program), title(std::move(title)), boards_page(boards_page), tabs(tabs), tab_index(tab_index) {}
  19. const char* get_title() const override { return title.c_str(); }
  20. PluginResult submit(const SubmitArgs&, std::vector<Tab>&) override;
  21. PluginResult lazy_fetch(BodyItems &result_items) override;
  22. bool submit_is_async() const override { return true; }
  23. bool allow_submit_no_selection() const override { return true; }
  24. bool lazy_fetch_is_loader() override { return true; }
  25. void login_finish();
  26. const LoginInputs *login_inputs;
  27. private:
  28. enum class LoggedIn {
  29. Unknown,
  30. Yes,
  31. No
  32. };
  33. std::string title;
  34. FourchanBoardsPage *boards_page;
  35. std::vector<Tab> *tabs;
  36. size_t tab_index;
  37. LoggedIn logged_in = LoggedIn::Unknown;
  38. };
  39. class FourchanThreadListPage : public LazyFetchPage {
  40. public:
  41. FourchanThreadListPage(Program *program, std::string title, std::string board_id, std::string pass_id) :
  42. LazyFetchPage(program), title(std::move(title)), board_id(std::move(board_id)), pass_id(std::move(pass_id)) {}
  43. const char* get_title() const override { return title.c_str(); }
  44. PluginResult submit(const SubmitArgs &args, std::vector<Tab> &result_tabs) override;
  45. PluginResult lazy_fetch(BodyItems &result_items) override;
  46. const std::string title;
  47. const std::string board_id;
  48. std::string pass_id;
  49. };
  50. class FourchanThreadPage : public ImageBoardThreadPage {
  51. public:
  52. FourchanThreadPage(Program *program, std::string board_id, std::string thread_id, std::string post_id, std::string pass_id) :
  53. ImageBoardThreadPage(program, std::move(board_id), std::move(thread_id), std::move(post_id)), pass_id(std::move(pass_id)) {}
  54. PluginResult lazy_fetch(BodyItems &result_items) override;
  55. PostResult post_comment(const std::string &captcha_id, const std::string &captcha_solution, const std::string &comment, const std::string &filepath = "") override;
  56. const std::string& get_pass_id() override;
  57. PluginResult request_captcha_challenge(ImageBoardCaptchaChallenge &challenge_response) override;
  58. private:
  59. std::string pass_id;
  60. };
  61. }