MangaCombined.hpp 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. #pragma once
  2. #include "Manga.hpp"
  3. #include <vector>
  4. #include <map>
  5. #include "../include/AsyncTask.hpp"
  6. namespace QuickMedia {
  7. struct MangaPlugin {
  8. std::unique_ptr<Page> page;
  9. std::string title;
  10. std::string service_name;
  11. bool local_manga = false;
  12. };
  13. using MangaCombinedSearchThread = std::pair<MangaPlugin*, AsyncTask<BodyItems>>;
  14. class MangaCombinedSearchPage : public LazyFetchPage {
  15. public:
  16. MangaCombinedSearchPage(Program *program, std::vector<MangaPlugin> search_pages);
  17. const char* get_title() const override { return "Search"; }
  18. bool search_is_filter() override { return false; }
  19. SearchResult search(const std::string &str, BodyItems &result_items) override;
  20. PluginResult get_page(const std::string &str, int page, BodyItems &result_items) override;
  21. PluginResult submit(const SubmitArgs &args, std::vector<Tab> &result_tabs) override;
  22. PluginResult lazy_fetch(BodyItems &result_items) override;
  23. bool lazy_fetch_is_loader() override { return true; }
  24. void cancel_operation() override;
  25. private:
  26. std::vector<MangaPlugin> search_pages;
  27. std::vector<MangaCombinedSearchThread> search_threads; // TODO: Use async task pool
  28. };
  29. }