Fix reaction animations stopping after an hour uptime.

This commit is contained in:
John Preston 2022-01-15 12:38:47 +03:00
parent f909a36cbd
commit cdf36cc387
2 changed files with 36 additions and 31 deletions

View file

@ -279,21 +279,31 @@ void Reactions::request() {
MTP_int(_hash) MTP_int(_hash)
)).done([=](const MTPmessages_AvailableReactions &result) { )).done([=](const MTPmessages_AvailableReactions &result) {
_requestId = 0; _requestId = 0;
result.match([&](const MTPDmessages_availableReactions &data) {
updateFromData(data);
}, [&](const MTPDmessages_availableReactionsNotModified &) {
});
}).fail([=] {
_requestId = 0;
_hash = 0;
}).send();
}
void Reactions::updateFromData(const MTPDmessages_availableReactions &data) {
_hash = data.vhash().v;
const auto &list = data.vreactions().v;
const auto oldCache = base::take(_iconsCache); const auto oldCache = base::take(_iconsCache);
const auto toCache = [&](DocumentData *document) { const auto toCache = [&](DocumentData *document) {
if (document) { if (document) {
_iconsCache.emplace(document, document->createMediaView()); _iconsCache.emplace(document, document->createMediaView());
} }
}; };
result.match([&](const MTPDmessages_availableReactions &data) {
_hash = data.vhash().v;
const auto &list = data.vreactions().v;
_active.clear(); _active.clear();
_available.clear(); _available.clear();
_active.reserve(list.size()); _active.reserve(list.size());
_available.reserve(list.size()); _available.reserve(list.size());
_iconsCache.reserve(list.size() * 2); _iconsCache.reserve(list.size() * 4);
for (const auto &reaction : list) { for (const auto &reaction : list) {
if (const auto parsed = parse(reaction)) { if (const auto parsed = parse(reaction)) {
_available.push_back(*parsed); _available.push_back(*parsed);
@ -311,12 +321,6 @@ void Reactions::request() {
resolveImages(); resolveImages();
} }
_updated.fire({}); _updated.fire({});
}, [&](const MTPDmessages_availableReactionsNotModified &) {
});
}).fail([=] {
_requestId = 0;
_hash = 0;
}).send();
} }
std::optional<Reaction> Reactions::parse(const MTPAvailableReaction &entry) { std::optional<Reaction> Reactions::parse(const MTPAvailableReaction &entry) {

View file

@ -78,6 +78,7 @@ private:
}; };
void request(); void request();
void updateFromData(const MTPDmessages_availableReactions &data);
[[nodiscard]] std::optional<Reaction> parse( [[nodiscard]] std::optional<Reaction> parse(
const MTPAvailableReaction &entry); const MTPAvailableReaction &entry);