From 3333013fd1f5c2cd9896c8f516cf78d157cfbdc0 Mon Sep 17 00:00:00 2001 From: Slavasil Date: Sun, 5 Jan 2025 03:06:40 +0300 Subject: [PATCH] fix behavior when a post is deleted while offline --- manager.cpp | 66 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/manager.cpp b/manager.cpp index 42e09e0..9976829 100644 --- a/manager.cpp +++ b/manager.cpp @@ -183,8 +183,10 @@ void NewPostFetcher::continue_fetch() { for (auto &p : posts) { spdlog::debug("[tg:{}] got post dated {}", i, p->date_); } - state.offset = posts[posts.size() - 1]->id_; - spdlog::info("[tg:{}] setting from to id {}", i, posts[posts.size() - 1]->id_); + if (posts.size() > 0) { + state.offset = posts[posts.size() - 1]->id_; + spdlog::info("[tg:{}] setting from to id {}", i, posts[posts.size() - 1]->id_); + } check_tg_posts(i, std::move(posts)); }); state.count = state.count * 3 / 2; @@ -291,22 +293,25 @@ void NewPostFetcher::check_vk_posts(int index, std::vector posts) { long oldLastPostDate = appState.lastLoadedPostDate; if (posts.size() > 0) { spdlog::info("[vk:{}] last post date is now {}", index, posts[0].date); - } - std::vector aposts = mgr->to_abstract_posts(posts, state.sourceIndex); - spdlog::info("[vk:{}] looking for date {}, have {} - {}", index, oldLastPostDate, aposts[0].date, aposts[aposts.size() - 1].date); - if (mgr->drop_posts_older_than(aposts, oldLastPostDate)) { - spdlog::info("[vk:{}] found last remembered post", index); + std::vector aposts = mgr->to_abstract_posts(posts, state.sourceIndex); + spdlog::info("[vk:{}] looking for date {}, have {} - {}", index, oldLastPostDate, aposts[0].date, aposts[aposts.size() - 1].date); + if (mgr->drop_posts_older_than(aposts, oldLastPostDate)) { + spdlog::info("[vk:{}] found last remembered post", index); + state.ready = true; + } + state.posts.reserve(state.posts.size() + aposts.size()); + for (auto i = aposts.begin(), e = aposts.end(); i != e; ++i) { + state.posts.emplace_back(std::move(*i)); + } + state.needRequest = true; + if (state.ready && !state.posts.empty()) { + spdlog::debug("[vk:{}] last loaded post date is now {}", index, state.posts[0].date); + appState.lastLoadedPostDate = state.posts[0].date; + } + } else { state.ready = true; } - state.posts.reserve(state.posts.size() + aposts.size()); - for (auto i = aposts.begin(), e = aposts.end(); i != e; ++i) { - state.posts.emplace_back(std::move(*i)); - } - state.needRequest = true; - if (state.ready && !state.posts.empty()) { - spdlog::debug("[vk:{}] last loaded post date is now {}", index, state.posts[0].date); - appState.lastLoadedPostDate = state.posts[0].date; - } + continue_fetch(); } @@ -317,21 +322,24 @@ void NewPostFetcher::check_tg_posts(int index, std::vector 0) { spdlog::info("[tg:{}] last post date is now {}", index, posts[0]->date_); - } - std::vector aposts = mgr->to_abstract_posts(posts, state.sourceIndex); - if (mgr->drop_posts_older_than(aposts, oldLastPostDate)) { - spdlog::info("[tg:{}] found last remembered post", index); + std::vector aposts = mgr->to_abstract_posts(posts, state.sourceIndex); + if (mgr->drop_posts_older_than(aposts, oldLastPostDate)) { + spdlog::info("[tg:{}] found last remembered post", index); + state.ready = true; + } + state.posts.reserve(state.posts.size() + aposts.size()); + for (auto i = aposts.begin(), e = aposts.end(); i != e; ++i) { + state.posts.emplace_back(std::move(*i)); + } + state.needRequest = true; + if (state.ready && !state.posts.empty()) { + spdlog::debug("[tg:{}] last loaded post date is now {}", index, state.posts[0].date); + appState.lastLoadedPostDate = state.posts[0].id; + } + } else { state.ready = true; } - state.posts.reserve(state.posts.size() + aposts.size()); - for (auto i = aposts.begin(), e = aposts.end(); i != e; ++i) { - state.posts.emplace_back(std::move(*i)); - } - state.needRequest = true; - if (state.ready && !state.posts.empty()) { - spdlog::debug("[tg:{}] last loaded post date is now {}", index, state.posts[0].date); - appState.lastLoadedPostDate = state.posts[0].id; - } + continue_fetch(); }