From 3947056654537bb42db2f3ca38369ce9b52b3297 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 2 Jul 2024 10:40:39 +0400 Subject: [PATCH] Use cached views count from not modified page. --- Telegram/SourceFiles/iv/iv_data.cpp | 6 ++++++ Telegram/SourceFiles/iv/iv_data.h | 2 ++ Telegram/SourceFiles/iv/iv_instance.cpp | 14 ++++++++++---- Telegram/SourceFiles/iv/iv_prepare.cpp | 4 +++- Telegram/SourceFiles/iv/iv_prepare.h | 1 + 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/Telegram/SourceFiles/iv/iv_data.cpp b/Telegram/SourceFiles/iv/iv_data.cpp index 5258e6c9f..16f9c0d51 100644 --- a/Telegram/SourceFiles/iv/iv_data.cpp +++ b/Telegram/SourceFiles/iv/iv_data.cpp @@ -71,6 +71,12 @@ bool Data::partial() const { Data::~Data() = default; +void Data::updateCachedViews(int cachedViews) { + _source->updatedCachedViews = std::max( + _source->updatedCachedViews, + cachedViews); +} + void Data::prepare(const Options &options, Fn done) const { crl::async([source = *_source, options, done = std::move(done)] { done(Prepare(source, options)); diff --git a/Telegram/SourceFiles/iv/iv_data.h b/Telegram/SourceFiles/iv/iv_data.h index 87900bce3..cdb2d8708 100644 --- a/Telegram/SourceFiles/iv/iv_data.h +++ b/Telegram/SourceFiles/iv/iv_data.h @@ -45,6 +45,8 @@ public: [[nodiscard]] QString id() const; [[nodiscard]] bool partial() const; + void updateCachedViews(int cachedViews); + void prepare(const Options &options, Fn done) const; private: diff --git a/Telegram/SourceFiles/iv/iv_instance.cpp b/Telegram/SourceFiles/iv/iv_instance.cpp index 4482cb476..d070c93d2 100644 --- a/Telegram/SourceFiles/iv/iv_instance.cpp +++ b/Telegram/SourceFiles/iv/iv_instance.cpp @@ -1001,14 +1001,20 @@ WebPageData *Instance::processReceivedPage( owner->processChats(data.vchats()); auto &requested = _fullRequested[session][url]; const auto &mtp = data.vwebpage(); - return mtp.match([&](const MTPDwebPageNotModified &data) { - return requested.page; + mtp.match([&](const MTPDwebPageNotModified &data) { + const auto page = requested.page; + if (const auto views = data.vcached_page_views()) { + if (page && page->iv) { + page->iv->updateCachedViews(views->v); + } + } }, [&](const MTPDwebPage &data) { requested.hash = data.vhash().v; - return owner->processWebpage(data).get(); + requested.page = owner->processWebpage(data).get(); }, [&](const auto &) { - return owner->processWebpage(mtp).get(); + requested.page = owner->processWebpage(mtp).get(); }); + return requested.page; } void Instance::processOpenChannel(const QString &context) { diff --git a/Telegram/SourceFiles/iv/iv_prepare.cpp b/Telegram/SourceFiles/iv/iv_prepare.cpp index d5f537524..15d5edaa7 100644 --- a/Telegram/SourceFiles/iv/iv_prepare.cpp +++ b/Telegram/SourceFiles/iv/iv_prepare.cpp @@ -229,7 +229,9 @@ Parser::Parser(const Source &source, const Options &options) _result.name = source.name; _result.rtl = source.page.data().is_rtl(); - const auto views = source.page.data().vviews().value_or_empty(); + const auto views = std::max( + source.page.data().vviews().value_or_empty(), + source.updatedCachedViews); const auto content = list(source.page.data().vblocks()); _result.content = wrap(content, views); } diff --git a/Telegram/SourceFiles/iv/iv_prepare.h b/Telegram/SourceFiles/iv/iv_prepare.h index a896c79e0..ef919db2f 100644 --- a/Telegram/SourceFiles/iv/iv_prepare.h +++ b/Telegram/SourceFiles/iv/iv_prepare.h @@ -18,6 +18,7 @@ struct Source { std::optional webpagePhoto; std::optional webpageDocument; QString name; + int updatedCachedViews = 0; }; [[nodiscard]] Prepared Prepare(const Source &source, const Options &options);