#pragma once #include "ImageBoard.hpp" #include #include #include namespace QuickMedia { class Fourchan : public ImageBoard { public: Fourchan(); ~Fourchan() override; PluginResult get_front_page(BodyItems &result_items) override; SearchResult search(const std::string &url, BodyItems &result_items) override; SuggestionResult update_search_suggestions(const std::string &text, BodyItems &result_items) override; PluginResult get_threads(const std::string &url, BodyItems &result_items) override; PluginResult get_thread_comments(const std::string &list_url, const std::string &url, BodyItems &result_items) override; PostResult post_comment(const std::string &board, const std::string &thread, const std::string &captcha_id, const std::string &comment) override; bool search_suggestions_has_thumbnails() const override { return false; } bool search_results_has_thumbnails() const override { return false; } int get_search_delay() const override { return 150; } Page get_page_after_search() const override { return Page::IMAGE_BOARD_THREAD_LIST; } bool search_is_filter() override { return true; } private: PluginResult get_threads_internal(const std::string &url, BodyItems &result_items); void set_board_url(const std::string &new_url); std::string get_board_url(); void set_board_thread_list(BodyItems body_items); BodyItems get_board_thread_list(); private: std::string current_board_url; std::thread thread_list_update_thread; BodyItems cached_thread_list_items; std::mutex board_url_mutex; std::mutex board_list_mutex; std::condition_variable thread_list_cached_cv; std::mutex thread_list_cache_mutex; std::condition_variable thread_list_update_cv; bool thread_list_cached = false; bool running = true; }; }