aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-02-12 04:31:44 +0100
committerdec05eba <dec05eba@protonmail.com>2022-02-12 04:33:00 +0100
commit74b98bed98aad3e70e8abe51292767ea8a7d109a (patch)
treeea1558431137f8a1e52f4d550c0438e68e676f6f /src/QuickMedia.cpp
parentcc445c60d4806fb462a3efc27bf8d727176f77da (diff)
Local-manga: show if the latest chapter of a manga has been read
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp38
1 files changed, 30 insertions, 8 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index cfe4e15..656e196 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -1951,6 +1951,8 @@ namespace QuickMedia {
if(tabs[i].page->is_lazy_fetch_page() && static_cast<LazyFetchPage*>(tabs[i].page.get())->reload_on_page_change()) {
tab_associated_data[i].lazy_fetch_finished = false;
tab_associated_data[i].fetched_page = 0;
+ const BodyItem *selected_item = tabs[i].body->get_selected();
+ tab_associated_data[i].body_item_url_before_refresh = selected_item ? selected_item->url : "";
tabs[i].body->clear_items();
}
}
@@ -2165,9 +2167,11 @@ namespace QuickMedia {
});
}
} else if(event.key.code == mgl::Keyboard::B && event.key.control) {
- auto bookmark_item = tabs[selected_tab].page->get_bookmark_body_item();
+ auto bookmark_item = tabs[selected_tab].page->get_bookmark_body_item(tabs[selected_tab].body->get_selected());
+
if(!bookmark_item)
bookmark_item = tabs[selected_tab].body->get_selected_shared();
+
if(bookmark_item) {
const char *bookmark_name = tabs[selected_tab].page->get_bookmark_name();
if(bookmark_name) {
@@ -2359,18 +2363,36 @@ namespace QuickMedia {
}
if(associated_data.fetch_status == FetchStatus::LOADING && associated_data.fetch_type == FetchType::LAZY && associated_data.fetch_future.ready()) {
+ LazyFetchPage *lazy_fetch_page = static_cast<LazyFetchPage*>(tabs[i].page.get());
+
associated_data.lazy_fetch_finished = true;
FetchResult fetch_result = associated_data.fetch_future.get();
tabs[i].body->set_items(std::move(fetch_result.body_items));
- if(tabs[i].search_bar && tabs[i].page->search_is_filter()) tabs[i].body->filter_search_fuzzy(tabs[i].search_bar->get_text());
- if(tabs[i].body->attach_side == AttachSide::TOP) {
- tabs[i].body->select_first_item();
+
+ if(tabs[i].search_bar && tabs[i].page->search_is_filter()) {
+ tabs[i].body->filter_search_fuzzy(tabs[i].search_bar->get_text());
}
- if(tabs[i].body->attach_side == AttachSide::BOTTOM) {
- tabs[i].body->reverse_items();
- tabs[i].body->select_last_item();
+
+ if(lazy_fetch_page->reseek_to_body_item_by_url()) {
+ const auto &tab_ass = tab_associated_data[i];
+ const int item_index = tabs[i].body->find_item_index([&tab_ass](const std::shared_ptr<BodyItem> &item) {
+ return item->visible && item->url == tab_ass.body_item_url_before_refresh;
+ });
+
+ if(item_index != -1)
+ tabs[i].body->set_selected_item(item_index);
+ } else {
+ if(tabs[i].body->attach_side == AttachSide::TOP) {
+ tabs[i].body->select_first_item();
+ }
+ if(tabs[i].body->attach_side == AttachSide::BOTTOM) {
+ tabs[i].body->reverse_items();
+ tabs[i].body->select_last_item();
+ }
}
- LazyFetchPage *lazy_fetch_page = static_cast<LazyFetchPage*>(tabs[i].page.get());
+
+ tab_associated_data[i].body_item_url_before_refresh.clear();
+
if(fetch_result.result != PluginResult::OK)
associated_data.search_result_text.set_string("Failed to fetch page!");
else if(tabs[i].body->get_num_items() == 0 && !lazy_fetch_page->lazy_fetch_is_loader())