aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/MediaGeneric.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-04-29 00:21:50 +0200
committerdec05eba <dec05eba@protonmail.com>2021-04-29 00:21:50 +0200
commit7dc7ee78094a3d76e8cb70d724a7054d59347369 (patch)
tree317db7e9bd14805b62601dc07927a51acf7cbb3d /src/plugins/MediaGeneric.cpp
parent67618e51ed44effba871447255a5e7389969ccaa (diff)
Add xvideos and xhamster
Diffstat (limited to 'src/plugins/MediaGeneric.cpp')
-rw-r--r--src/plugins/MediaGeneric.cpp53
1 files changed, 39 insertions, 14 deletions
diff --git a/src/plugins/MediaGeneric.cpp b/src/plugins/MediaGeneric.cpp
index c911e6b..19ad87c 100644
--- a/src/plugins/MediaGeneric.cpp
+++ b/src/plugins/MediaGeneric.cpp
@@ -18,7 +18,21 @@ namespace QuickMedia {
return quickmedia_html_node_get_attribute_value(node, field_name);
}
- static PluginResult fetch_page_results(const std::string &url, const std::string &website_url, const std::vector<MediaTextQuery> &text_queries, const std::vector<MediaThumbnailQuery> &thumbnail_queries, BodyItems &result_items) {
+ static void body_items_prepend_website_url(BodyItems &body_items, const std::string &website_url) {
+ for(auto &body_item : body_items) {
+ if(string_starts_with(body_item->url, "//"))
+ body_item->url = "https://" + body_item->url.substr(2);
+ else if(string_starts_with(body_item->url, "/"))
+ body_item->url = website_url + body_item->url.substr(1);
+
+ if(string_starts_with(body_item->thumbnail_url, "//"))
+ body_item->thumbnail_url = "https://" + body_item->thumbnail_url.substr(2);
+ else if(string_starts_with(body_item->thumbnail_url, "/"))
+ body_item->thumbnail_url = website_url + body_item->thumbnail_url.substr(1);
+ }
+ }
+
+ static PluginResult fetch_page_results(const std::string &url, const std::string &website_url, const std::vector<MediaTextQuery> &text_queries, const std::vector<MediaThumbnailQuery> &thumbnail_queries, MediaRelatedCustomHandler *custom_handler, BodyItems &result_items) {
std::vector<CommandArg> args;
if(!website_url.empty())
args.push_back({ "-H", "referer: " + website_url });
@@ -30,6 +44,18 @@ namespace QuickMedia {
if(website_data.empty())
return PluginResult::OK;
+ if(custom_handler && *custom_handler) {
+ std::vector<MediaRelatedItem> media_related_items = (*custom_handler)(website_data);
+ for(MediaRelatedItem &media_related_item : media_related_items) {
+ auto body_item = BodyItem::create(strip(media_related_item.title));
+ body_item->url = std::move(media_related_item.url);
+ body_item->thumbnail_url = std::move(media_related_item.thumbnail_url);
+ result_items.push_back(std::move(body_item));
+ }
+ body_items_prepend_website_url(result_items, website_url);
+ return PluginResult::OK;
+ }
+
QuickMediaHtmlSearch html_search;
int result = quickmedia_html_search_init(&html_search, website_data.c_str());
if(result != 0)
@@ -73,17 +99,7 @@ namespace QuickMedia {
}
}
- for(auto &body_item : result_items) {
- if(string_starts_with(body_item->url, "//"))
- body_item->url = "https://" + body_item->url.substr(2);
- else if(string_starts_with(body_item->url, "/"))
- body_item->url = website_url + body_item->url.substr(1);
-
- if(string_starts_with(body_item->thumbnail_url, "//"))
- body_item->thumbnail_url = "https://" + body_item->thumbnail_url.substr(2);
- else if(string_starts_with(body_item->thumbnail_url, "/"))
- body_item->thumbnail_url = website_url + body_item->thumbnail_url.substr(1);
- }
+ body_items_prepend_website_url(result_items, website_url);
cleanup:
quickmedia_html_search_deinit(&html_search);
@@ -112,7 +128,7 @@ namespace QuickMedia {
std::string url = search_query.search_template;
string_replace_all(url, "%s", url_param_encode(str));
string_replace_all(url, "%p", std::to_string(search_query.page_start + page));
- return fetch_page_results(url, website_url, text_queries, thumbnail_queries, result_items);
+ return fetch_page_results(url, website_url, text_queries, thumbnail_queries, nullptr, result_items);
}
PluginResult MediaGenericSearchPage::submit(const std::string&, const std::string &url, std::vector<Tab> &result_tabs) {
@@ -121,7 +137,7 @@ namespace QuickMedia {
}
PluginResult MediaGenericSearchPage::get_related_media(const std::string &url, BodyItems &result_items) {
- return fetch_page_results(url, website_url, related_media_text_queries, related_media_thumbnail_queries, result_items);
+ return fetch_page_results(url, website_url, related_media_text_queries, related_media_thumbnail_queries, &related_custom_handler, result_items);
}
MediaGenericSearchPage& MediaGenericSearchPage::search_handler(const char *search_template, int page_start) {
@@ -142,11 +158,20 @@ namespace QuickMedia {
MediaGenericSearchPage& MediaGenericSearchPage::related_media_text_handler(std::vector<MediaTextQuery> queries) {
related_media_text_queries = std::move(queries);
+ related_custom_handler = nullptr;
return *this;
}
MediaGenericSearchPage& MediaGenericSearchPage::related_media_thumbnail_handler(std::vector<MediaThumbnailQuery> queries) {
related_media_thumbnail_queries = std::move(queries);
+ related_custom_handler = nullptr;
+ return *this;
+ }
+
+ MediaGenericSearchPage& MediaGenericSearchPage::related_media_custom_handler(MediaRelatedCustomHandler handler) {
+ related_custom_handler = handler;
+ related_media_text_queries.clear();
+ related_media_thumbnail_queries.clear();
return *this;
}