From abe62475cbde2f52e1901542efaf5e31359e983e Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 29 Mar 2021 19:01:21 +0300 Subject: [PATCH] Added support updateStickerSetsOrder for masks. --- Telegram/SourceFiles/api/api_updates.cpp | 44 +++++++++++++++--------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/Telegram/SourceFiles/api/api_updates.cpp b/Telegram/SourceFiles/api/api_updates.cpp index 02ff76013..b10bafb3a 100644 --- a/Telegram/SourceFiles/api/api_updates.cpp +++ b/Telegram/SourceFiles/api/api_updates.cpp @@ -2141,25 +2141,37 @@ void Updates::feedUpdate(const MTPUpdate &update) { case mtpc_updateStickerSetsOrder: { auto &d = update.c_updateStickerSetsOrder(); - if (!d.is_masks()) { - const auto &order = d.vorder().v; - const auto &sets = session().data().stickers().sets(); - Data::StickersSetsOrder result; - for (const auto &item : order) { - if (sets.find(item.v) == sets.cend()) { - break; - } - result.push_back(item.v); + auto &stickers = session().data().stickers(); + const auto isMasks = d.is_masks(); + const auto &order = d.vorder().v; + const auto &sets = stickers.sets(); + Data::StickersSetsOrder result; + for (const auto &item : order) { + if (sets.find(item.v) == sets.cend()) { + break; } - if (result.size() != session().data().stickers().setsOrder().size() - || result.size() != order.size()) { - session().data().stickers().setLastUpdate(0); - session().api().updateStickers(); + result.push_back(item.v); + } + const auto localSize = isMasks + ? stickers.maskSetsOrder().size() + : stickers.setsOrder().size(); + if ((result.size() != localSize) || (result.size() != order.size())) { + if (isMasks) { + stickers.setLastMasksUpdate(0); + session().api().updateMasks(); } else { - session().data().stickers().setsOrderRef() = std::move(result); - session().local().writeInstalledStickers(); - session().data().stickers().notifyUpdated(); + stickers.setLastUpdate(0); + session().api().updateStickers(); } + } else { + if (isMasks) { + stickers.maskSetsOrderRef() = std::move(result); + session().local().writeInstalledMasks(); + } else { + stickers.setsOrderRef() = std::move(result); + session().local().writeInstalledStickers(); + } + stickers.notifyUpdated(); } } break;