From 74b98bed98aad3e70e8abe51292767ea8a7d109a Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 12 Feb 2022 04:31:44 +0100 Subject: Local-manga: show if the latest chapter of a manga has been read --- src/QuickMedia.cpp | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) (limited to 'src/QuickMedia.cpp') 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(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(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 &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(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()) -- cgit v1.2.3