From 9939b656bf6a383b793f8b5b402d60b44345a097 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 7 Apr 2021 00:41:34 +0200 Subject: Add upload date to manganelo and mangatown chapters --- launcher/QuickMedia_tabbed.desktop | 8 ++++++++ plugins/Plugin.hpp | 2 +- src/plugins/Mangadex.cpp | 4 ++-- src/plugins/Manganelo.cpp | 20 ++++++++++++++++++-- src/plugins/Mangatown.cpp | 19 +++++++++++++++++-- src/plugins/NyaaSi.cpp | 6 +++--- 6 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 launcher/QuickMedia_tabbed.desktop diff --git a/launcher/QuickMedia_tabbed.desktop b/launcher/QuickMedia_tabbed.desktop new file mode 100644 index 0000000..1e4ea81 --- /dev/null +++ b/launcher/QuickMedia_tabbed.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=QuickMedia tabbed +GenericName=QuickMedia tabbed +Comment=Launch QuickMedia with tabs +Exec=tabbed quickmedia launcher -e +Terminal=false +Keywords=4chan;manga;matrix;nyaa;torrent;soundcloud;spotify;podcast;youtube;music;quickmedia; diff --git a/plugins/Plugin.hpp b/plugins/Plugin.hpp index ebf3408..72df764 100644 --- a/plugins/Plugin.hpp +++ b/plugins/Plugin.hpp @@ -30,7 +30,7 @@ namespace QuickMedia { NET_ERR }; - struct BodyItemImageContext { + struct BodyItemContext { BodyItems *body_items; size_t index; }; diff --git a/src/plugins/Mangadex.cpp b/src/plugins/Mangadex.cpp index 63ceb3f..59126cb 100644 --- a/src/plugins/Mangadex.cpp +++ b/src/plugins/Mangadex.cpp @@ -87,13 +87,13 @@ namespace QuickMedia { if(result != 0) goto cleanup; - BodyItemImageContext body_item_image_context; + BodyItemContext body_item_image_context; body_item_image_context.body_items = &result_items; body_item_image_context.index = 0; result = quickmedia_html_find_nodes_xpath(&html_search, "//img", [](QuickMediaHtmlNode *node, void *userdata) { - auto *item_data = (BodyItemImageContext*)userdata; + auto *item_data = (BodyItemContext*)userdata; const char *src = quickmedia_html_node_get_attribute_value(node, "src"); if(src && strncmp(src, "/images/manga/", 14) == 0 && item_data->index < item_data->body_items->size()) { (*item_data->body_items)[item_data->index]->thumbnail_url = mangadex_url + src; diff --git a/src/plugins/Manganelo.cpp b/src/plugins/Manganelo.cpp index 7d1e8b3..6b526d4 100644 --- a/src/plugins/Manganelo.cpp +++ b/src/plugins/Manganelo.cpp @@ -49,6 +49,22 @@ namespace QuickMedia { item_data->push_back(std::move(item)); } }, &chapters_items); + + BodyItemContext body_item_context; + body_item_context.body_items = &chapters_items; + body_item_context.index = 0; + + quickmedia_html_find_nodes_xpath(&html_search, "//ul[class='row-content-chapter']//span", + [](QuickMediaHtmlNode *node, void *userdata) { + auto *item_data = (BodyItemContext*)userdata; + const char *class_attr = quickmedia_html_node_get_attribute_value(node, "class"); + const char *text = quickmedia_html_node_get_text(node); + if(text && class_attr && strstr(class_attr, "chapter-time") && item_data->index < item_data->body_items->size()) { + std::string uploaded_date = strip(text); + (*item_data->body_items)[item_data->index]->set_description("Uploaded: " + uploaded_date); + item_data->index++; + } + }, &body_item_context); quickmedia_html_find_nodes_xpath(&html_search, "//a[class='a-h']", [](QuickMediaHtmlNode *node, void *userdata) { @@ -187,13 +203,13 @@ namespace QuickMedia { if(result != 0) goto cleanup; - BodyItemImageContext body_item_image_context; + BodyItemContext body_item_image_context; body_item_image_context.body_items = &result_items; body_item_image_context.index = 0; result = quickmedia_html_find_nodes_xpath(&html_search, "//div[class='search-story-item']//a[class='item-img']//img", [](QuickMediaHtmlNode *node, void *userdata) { - auto *item_data = (BodyItemImageContext*)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; diff --git a/src/plugins/Mangatown.cpp b/src/plugins/Mangatown.cpp index ec5f279..4e7046c 100644 --- a/src/plugins/Mangatown.cpp +++ b/src/plugins/Mangatown.cpp @@ -41,13 +41,13 @@ namespace QuickMedia { } }, &result_items); - BodyItemImageContext body_item_image_context; + BodyItemContext body_item_image_context; body_item_image_context.body_items = &result_items; body_item_image_context.index = 0; result = quickmedia_html_find_nodes_xpath(&html_search, "//a[class='manga_cover']/img", [](QuickMediaHtmlNode *node, void *userdata) { - auto *item_data = (BodyItemImageContext*)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; @@ -92,6 +92,21 @@ namespace QuickMedia { } }, &chapters_items); + BodyItemContext body_item_context; + body_item_context.body_items = &chapters_items; + body_item_context.index = 0; + + quickmedia_html_find_nodes_xpath(&html_search, "//ul[class='chapter_list']//span[class='time']", + [](QuickMediaHtmlNode *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 uploaded_date = strip(text); + (*item_data->body_items)[item_data->index]->set_description("Uploaded: " + uploaded_date); + item_data->index++; + } + }, &body_item_context); + cleanup: quickmedia_html_search_deinit(&html_search); if(result != 0) diff --git a/src/plugins/NyaaSi.cpp b/src/plugins/NyaaSi.cpp index ecc769a..c005b31 100644 --- a/src/plugins/NyaaSi.cpp +++ b/src/plugins/NyaaSi.cpp @@ -335,13 +335,13 @@ namespace QuickMedia { if(result != 0 || result_items.size() == comments_start_index) goto cleanup; - BodyItemImageContext body_item_image_context; + BodyItemContext body_item_image_context; body_item_image_context.body_items = &result_items; 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) { - auto *item_data = (BodyItemImageContext*)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; @@ -357,7 +357,7 @@ namespace QuickMedia { result = quickmedia_html_find_nodes_xpath(&html_search, "//div[id='comments']//div[class='comment-content']", [](QuickMediaHtmlNode *node, void *userdata) { - auto *item_data = (BodyItemImageContext*)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()) { (*item_data->body_items)[item_data->index]->set_description(strip(text)); -- cgit v1.2.3