aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/NyaaSi.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-07-03 16:23:36 +0200
committerdec05eba <dec05eba@protonmail.com>2021-07-03 18:34:37 +0200
commit611d22bf269672ba56f98e12eb6b2a40efdaa5b9 (patch)
tree5dfd3e98fd08fa7cb6cb82c565b538cc891b6b98 /src/plugins/NyaaSi.cpp
parent496f71413df2468a9d3329355ffef08280219808 (diff)
Remove dependency on tidy, fix ph, support all 4chan markup
Go back to previous page when failing to fetch number of pages
Diffstat (limited to 'src/plugins/NyaaSi.cpp')
-rw-r--r--src/plugins/NyaaSi.cpp73
1 files changed, 40 insertions, 33 deletions
diff --git a/src/plugins/NyaaSi.cpp b/src/plugins/NyaaSi.cpp
index 5d9e41b..d4667af 100644
--- a/src/plugins/NyaaSi.cpp
+++ b/src/plugins/NyaaSi.cpp
@@ -291,17 +291,18 @@ namespace QuickMedia {
return PluginResult::NET_ERR;
QuickMediaHtmlSearch html_search;
- int result = quickmedia_html_search_init(&html_search, website_data.c_str());
+ int result = quickmedia_html_search_init(&html_search, website_data.c_str(), website_data.size());
if(result != 0)
goto cleanup;
result = quickmedia_html_find_nodes_xpath(&html_search, "//h3[class='panel-title']",
- [](QuickMediaHtmlNode *node, void *userdata) {
+ [](QuickMediaMatchNode *node, void *userdata) {
std::string *title = (std::string*)userdata;
- const char *text = quickmedia_html_node_get_text(node);
- if(title->empty() && text) {
- *title = text;
+ QuickMediaStringView text = quickmedia_html_node_get_text(node);
+ if(title->empty() && text.data) {
+ title->assign(text.data, text.size);
}
+ return 0;
}, &title);
if(result != 0)
@@ -314,16 +315,17 @@ namespace QuickMedia {
}
result = quickmedia_html_find_nodes_xpath(&html_search, "//div[class='panel-body']//div[class='row']//a",
- [](QuickMediaHtmlNode *node, void *userdata) {
+ [](QuickMediaMatchNode *node, void *userdata) {
ResultItemExtra *item_data = (ResultItemExtra*)userdata;
- const char *href = quickmedia_html_node_get_attribute_value(node, "href");
- const char *text = quickmedia_html_node_get_text(node);
- if(item_data->result_items->empty() && href && text && strncmp(href, "/user/", 6) == 0) {
+ QuickMediaStringView href = quickmedia_html_node_get_attribute_value(node, "href");
+ QuickMediaStringView text = quickmedia_html_node_get_text(node);
+ if(item_data->result_items->empty() && href.data && text.data && href.size >= 6 && memcmp(href.data, "/user/", 6) == 0) {
auto body_item = BodyItem::create("");
- body_item->set_description("Submitter: " + strip(text));
- body_item->url = "https://" + *item_data->domain + "/" + std::string(href);
+ body_item->set_description("Submitter: " + std::string(text.data, text.size));
+ body_item->url = "https://" + *item_data->domain + "/" + std::string(href.data, href.size);
item_data->result_items->push_back(std::move(body_item));
}
+ return 0;
}, &result_item_extra);
if(result != 0)
@@ -335,17 +337,18 @@ namespace QuickMedia {
result_items.push_back(std::move(body_item));
}
- result_items.front()->set_title(strip(title));
+ result_items.front()->set_title(title);
result = quickmedia_html_find_nodes_xpath(&html_search, "//div[id='torrent-description']",
- [](QuickMediaHtmlNode *node, void *userdata) {
+ [](QuickMediaMatchNode *node, void *userdata) {
std::string *description = (std::string*)userdata;
- const char *text = quickmedia_html_node_get_text(node);
- if(description->empty() && text) {
- std::string desc = strip(text);
+ QuickMediaStringView text = quickmedia_html_node_get_text(node);
+ if(description->empty() && text.data) {
+ std::string desc(text.data, text.size);
html_unescape_sequences(desc);
*description = std::move(desc);
}
+ return 0;
}, &description);
if(result != 0)
@@ -355,12 +358,13 @@ namespace QuickMedia {
result_items.front()->set_description(result_items.front()->get_description() + "\nDescription:\n" + description);
result = quickmedia_html_find_nodes_xpath(&html_search, "//div[class='container']//a",
- [](QuickMediaHtmlNode *node, void *userdata) {
+ [](QuickMediaMatchNode *node, void *userdata) {
std::string *magnet_url = (std::string*)userdata;
- const char *href = quickmedia_html_node_get_attribute_value(node, "href");
- if(magnet_url->empty() && href && strncmp(href, "magnet:?", 8) == 0) {
- *magnet_url = href;
+ QuickMediaStringView href = quickmedia_html_node_get_attribute_value(node, "href");
+ if(magnet_url->empty() && href.data && href.size >= 8 && memcmp(href.data, "magnet:?", 8) == 0) {
+ magnet_url->assign(href.data, href.size);
}
+ return 0;
}, &magnet_url);
if(result != 0)
@@ -377,15 +381,16 @@ namespace QuickMedia {
comments_start_index = result_items.size();
result = quickmedia_html_find_nodes_xpath(&html_search, "//div[id='comments']//a",
- [](QuickMediaHtmlNode *node, void *userdata) {
+ [](QuickMediaMatchNode *node, void *userdata) {
auto *item_data = (BodyItems*)userdata;
- const char *href = quickmedia_html_node_get_attribute_value(node, "href");
- const char *text = quickmedia_html_node_get_text(node);
- if(href && text && strncmp(href, "/user/", 6) == 0) {
- auto body_item = BodyItem::create(strip(text));
+ QuickMediaStringView href = quickmedia_html_node_get_attribute_value(node, "href");
+ QuickMediaStringView text = quickmedia_html_node_get_text(node);
+ if(href.data && text.data && href.size >= 6 && memcmp(href.data, "/user/", 6) == 0) {
+ auto body_item = BodyItem::create(std::string(text.data, text.size));
//body_item->url = "https://nyaa.si/" + std::string(href);
item_data->push_back(std::move(body_item));
}
+ return 0;
}, &result_items);
if(result != 0 || result_items.size() == comments_start_index)
@@ -396,14 +401,15 @@ namespace QuickMedia {
body_item_image_context.index = comments_start_index;
result = quickmedia_html_find_nodes_xpath(&html_search, "//div[id='comments']//img[class='avatar']",
- [](QuickMediaHtmlNode *node, void *userdata) {
+ [](QuickMediaMatchNode *node, void *userdata) {
auto *item_data = (BodyItemContext*)userdata;
- const char *src = quickmedia_html_node_get_attribute_value(node, "src");
- if(src && item_data->index < item_data->body_items->size()) {
- (*item_data->body_items)[item_data->index]->thumbnail_url = src;
+ QuickMediaStringView src = quickmedia_html_node_get_attribute_value(node, "src");
+ if(src.data && item_data->index < item_data->body_items->size()) {
+ (*item_data->body_items)[item_data->index]->thumbnail_url.assign(src.data, src.size);
(*item_data->body_items)[item_data->index]->thumbnail_size = sf::Vector2i(120, 120);
item_data->index++;
}
+ return 0;
}, &body_item_image_context);
if(result != 0)
@@ -412,15 +418,16 @@ namespace QuickMedia {
body_item_image_context.index = comments_start_index;
result = quickmedia_html_find_nodes_xpath(&html_search, "//div[id='comments']//div[class='comment-content']",
- [](QuickMediaHtmlNode *node, void *userdata) {
+ [](QuickMediaMatchNode *node, void *userdata) {
auto *item_data = (BodyItemContext*)userdata;
- const char *text = quickmedia_html_node_get_text(node);
- if(text && item_data->index < item_data->body_items->size()) {
- std::string desc = strip(text);
+ QuickMediaStringView text = quickmedia_html_node_get_text(node);
+ if(text.data && item_data->index < item_data->body_items->size()) {
+ std::string desc(text.data, text.size);
html_unescape_sequences(desc);
(*item_data->body_items)[item_data->index]->set_description(std::move(desc));
item_data->index++;
}
+ return 0;
}, &body_item_image_context);
cleanup: