diff options
author | dec05eba <dec05eba@protonmail.com> | 2022-02-12 04:31:44 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2022-02-12 04:33:00 +0100 |
commit | 74b98bed98aad3e70e8abe51292767ea8a7d109a (patch) | |
tree | ea1558431137f8a1e52f4d550c0438e68e676f6f /src/QuickMedia.cpp | |
parent | cc445c60d4806fb462a3efc27bf8d727176f77da (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.cpp | 38 |
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()) |