From 67618e51ed44effba871447255a5e7389969ccaa Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 28 Apr 2021 22:50:42 +0200 Subject: Create generic media plugin --- plugins/MediaGeneric.hpp | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ plugins/Pornhub.hpp | 36 -------------------- plugins/Spankbang.hpp | 36 -------------------- 3 files changed, 85 insertions(+), 72 deletions(-) create mode 100644 plugins/MediaGeneric.hpp delete mode 100644 plugins/Pornhub.hpp delete mode 100644 plugins/Spankbang.hpp (limited to 'plugins') diff --git a/plugins/MediaGeneric.hpp b/plugins/MediaGeneric.hpp new file mode 100644 index 0000000..e4048a9 --- /dev/null +++ b/plugins/MediaGeneric.hpp @@ -0,0 +1,85 @@ +#pragma once + +#include "Page.hpp" +#include + +namespace QuickMedia { + struct MediaSearchQuery { + const char *search_template = nullptr; + int page_start = 0; + }; + + // If |url_contains| is null, then any matching query is added. If |title_field| is "text", then the inner text is used. + // If |url_field| is null, then the current page is used instead. + struct MediaTextQuery { + const char *html_query = nullptr; + const char *title_field = nullptr; + const char *url_field = nullptr; + const char *url_contains = nullptr; + }; + + struct MediaThumbnailQuery { + const char *html_query = nullptr; + const char *field_name = nullptr; + const char *field_contains = nullptr; + }; + + class MediaGenericSearchPage : public Page { + public: + MediaGenericSearchPage(Program *program, const char *website_url, sf::Vector2i thumbnail_max_size); + const char* get_title() const override { return "All"; } + bool search_is_filter() override { return false; } + SearchResult search(const std::string &str, BodyItems &result_items) override; + PluginResult get_page(const std::string &str, int page, BodyItems &result_items) override; + PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) override; + sf::Vector2i get_thumbnail_max_size() override { return thumbnail_max_size; }; + + PluginResult get_related_media(const std::string &url, BodyItems &result_items); + + // Add a %s where the search query should be inserted into |search_template| and add a %p where the page number should be inserted, for example: + // example.com/search?q=%s&page=%p + // This is required. + MediaGenericSearchPage& search_handler(const char *search_template, int page_start); + // This is required. + MediaGenericSearchPage& text_handler(std::vector queries); + // This is optional. + MediaGenericSearchPage& thumbnail_handler(std::vector queries); + + // This is optional. + MediaGenericSearchPage& related_media_text_handler(std::vector queries); + // This is optional. + MediaGenericSearchPage& related_media_thumbnail_handler(std::vector queries); + private: + std::string website_url; + sf::Vector2i thumbnail_max_size; + MediaSearchQuery search_query; + std::vector text_queries; + std::vector thumbnail_queries; + std::vector related_media_text_queries; + std::vector related_media_thumbnail_queries; + }; + + class MediaGenericRelatedPage : public RelatedVideosPage { + public: + MediaGenericRelatedPage(Program *program, MediaGenericSearchPage *search_page) : RelatedVideosPage(program), search_page(search_page) {} + PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) override; + private: + MediaGenericSearchPage *search_page; + }; + + class MediaGenericVideoPage : public VideoPage { + public: + MediaGenericVideoPage(Program *program, MediaGenericSearchPage *search_page, const std::string &url) : VideoPage(program), search_page(search_page), url(url) {} + const char* get_title() const override { return ""; } + BodyItems get_related_media(const std::string &url, std::string &channel_url) override; + std::unique_ptr create_search_page(Program *program, int &search_delay) override; + std::unique_ptr create_related_videos_page(Program *program, const std::string &video_url, const std::string &video_title) override; + std::unique_ptr create_channels_page(Program*, const std::string&) override { + return nullptr; + } + std::string get_url() override { return url; } + private: + MediaGenericSearchPage *search_page; + std::string url; + }; +} \ No newline at end of file diff --git a/plugins/Pornhub.hpp b/plugins/Pornhub.hpp deleted file mode 100644 index 8f6f563..0000000 --- a/plugins/Pornhub.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include "Page.hpp" - -namespace QuickMedia { - class PornhubSearchPage : public Page { - public: - PornhubSearchPage(Program *program) : Page(program) {} - const char* get_title() const override { return "All"; } - bool search_is_filter() override { return false; } - SearchResult search(const std::string &str, BodyItems &result_items) override; - PluginResult get_page(const std::string &str, int page, BodyItems &result_items) override; - PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) override; - }; - - class PornhubRelatedVideosPage : public RelatedVideosPage { - public: - PornhubRelatedVideosPage(Program *program) : RelatedVideosPage(program) {} - PluginResult submit(const std::string&, const std::string&, std::vector &result_tabs) override; - }; - - class PornhubVideoPage : public VideoPage { - public: - PornhubVideoPage(Program *program, const std::string &url) : VideoPage(program), url(url) {} - const char* get_title() const override { return ""; } - BodyItems get_related_media(const std::string &url, std::string &channel_url) override; - std::unique_ptr create_search_page(Program *program, int &search_delay) override; - std::unique_ptr create_related_videos_page(Program *program, const std::string &video_url, const std::string &video_title) override; - std::unique_ptr create_channels_page(Program*, const std::string&) override { - return nullptr; - } - std::string get_url() override { return url; } - private: - std::string url; - }; -} \ No newline at end of file diff --git a/plugins/Spankbang.hpp b/plugins/Spankbang.hpp deleted file mode 100644 index 06ea509..0000000 --- a/plugins/Spankbang.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include "Page.hpp" - -namespace QuickMedia { - class SpankbangSearchPage : public Page { - public: - SpankbangSearchPage(Program *program) : Page(program) {} - const char* get_title() const override { return "All"; } - bool search_is_filter() override { return false; } - SearchResult search(const std::string &str, BodyItems &result_items) override; - PluginResult get_page(const std::string &str, int page, BodyItems &result_items) override; - PluginResult submit(const std::string &title, const std::string &url, std::vector &result_tabs) override; - }; - - class SpankbangRelatedVideosPage : public RelatedVideosPage { - public: - SpankbangRelatedVideosPage(Program *program) : RelatedVideosPage(program) {} - PluginResult submit(const std::string&, const std::string&, std::vector &result_tabs) override; - }; - - class SpankbangVideoPage : public VideoPage { - public: - SpankbangVideoPage(Program *program, const std::string &url) : VideoPage(program), url(url) {} - const char* get_title() const override { return ""; } - BodyItems get_related_media(const std::string &url, std::string &channel_url) override; - std::unique_ptr create_search_page(Program *program, int &search_delay) override; - std::unique_ptr create_related_videos_page(Program *program, const std::string &video_url, const std::string &video_title) override; - std::unique_ptr create_channels_page(Program*, const std::string&) override { - return nullptr; - } - std::string get_url() override { return url; } - private: - std::string url; - }; -} \ No newline at end of file -- cgit v1.2.3