diff options
author | dec05eba <dec05eba@protonmail.com> | 2021-04-29 00:21:50 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2021-04-29 00:21:50 +0200 |
commit | 7dc7ee78094a3d76e8cb70d724a7054d59347369 (patch) | |
tree | 317db7e9bd14805b62601dc07927a51acf7cbb3d /src/plugins | |
parent | 67618e51ed44effba871447255a5e7389969ccaa (diff) |
Add xvideos and xhamster
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/MangaGeneric.cpp | 38 | ||||
-rw-r--r-- | src/plugins/MediaGeneric.cpp | 53 |
2 files changed, 55 insertions, 36 deletions
diff --git a/src/plugins/MangaGeneric.cpp b/src/plugins/MangaGeneric.cpp index b3326fc..48533b8 100644 --- a/src/plugins/MangaGeneric.cpp +++ b/src/plugins/MangaGeneric.cpp @@ -49,6 +49,20 @@ namespace QuickMedia { return quickmedia_html_node_get_attribute_value(node, field_name); } + 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 int html_append_search(QuickMediaHtmlSearch *html_search, const char *html_query, HtmlSearchUserdata *search_userdata) { return quickmedia_html_find_nodes_xpath(html_search, html_query, [](QuickMediaHtmlNode *node, void *userdata) { @@ -239,17 +253,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); @@ -333,17 +337,7 @@ namespace QuickMedia { } } - for(auto &body_item : chapters_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(chapters_items, website_url); for(auto &it : creators) { if(string_starts_with(it.second, "//")) 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; } |