mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Update API scheme on layer 144.
This commit is contained in:
parent
04d4fdbf9b
commit
de0eef8cc6
6 changed files with 144 additions and 218 deletions
|
@ -761,6 +761,7 @@ messages.stickerSetInstallResultArchive#35e410a8 sets:Vector<StickerSetCovered>
|
||||||
|
|
||||||
stickerSetCovered#6410a5d2 set:StickerSet cover:Document = StickerSetCovered;
|
stickerSetCovered#6410a5d2 set:StickerSet cover:Document = StickerSetCovered;
|
||||||
stickerSetMultiCovered#3407e51b set:StickerSet covers:Vector<Document> = StickerSetCovered;
|
stickerSetMultiCovered#3407e51b set:StickerSet covers:Vector<Document> = StickerSetCovered;
|
||||||
|
stickerSetFullCovered#1aed5ee5 set:StickerSet packs:Vector<StickerPack> documents:Vector<Document> = StickerSetCovered;
|
||||||
|
|
||||||
maskCoords#aed6dbb2 n:int x:double y:double zoom:double = MaskCoords;
|
maskCoords#aed6dbb2 n:int x:double y:double zoom:double = MaskCoords;
|
||||||
|
|
||||||
|
@ -852,7 +853,7 @@ inputWebFileGeoPointLocation#9f2221c9 geo_point:InputGeoPoint access_hash:long w
|
||||||
|
|
||||||
upload.webFile#21e753bc size:int mime_type:string file_type:storage.FileType mtime:int bytes:bytes = upload.WebFile;
|
upload.webFile#21e753bc size:int mime_type:string file_type:storage.FileType mtime:int bytes:bytes = upload.WebFile;
|
||||||
|
|
||||||
payments.paymentForm#b0133b37 flags:# can_save_credentials:flags.2?true password_missing:flags.3?true form_id:long bot_id:long title:string description:string photo:flags.5?WebDocument invoice:Invoice provider_id:long url:string native_provider:flags.4?string native_params:flags.4?DataJSON saved_info:flags.0?PaymentRequestedInfo saved_credentials:flags.1?PaymentSavedCredentials users:Vector<User> = payments.PaymentForm;
|
payments.paymentForm#4cc5563f flags:# can_save_credentials:flags.2?true password_missing:flags.3?true form_id:long bot_id:long title:string description:string photo:flags.5?WebDocument invoice:Invoice provider_id:long url:string native_provider:flags.4?string native_params:flags.4?DataJSON additional_methods:flags.6?Vector<PaymentFormMethod> saved_info:flags.0?PaymentRequestedInfo saved_credentials:flags.1?PaymentSavedCredentials users:Vector<User> = payments.PaymentForm;
|
||||||
|
|
||||||
payments.validatedRequestedInfo#d1451883 flags:# id:flags.0?string shipping_options:flags.1?Vector<ShippingOption> = payments.ValidatedRequestedInfo;
|
payments.validatedRequestedInfo#d1451883 flags:# id:flags.0?string shipping_options:flags.1?Vector<ShippingOption> = payments.ValidatedRequestedInfo;
|
||||||
|
|
||||||
|
@ -1399,6 +1400,8 @@ inputStorePaymentGiftPremium#616f7fe8 user_id:InputUser currency:string amount:l
|
||||||
|
|
||||||
premiumGiftOption#74c34319 flags:# months:int currency:string amount:long bot_url:string store_product:flags.0?string = PremiumGiftOption;
|
premiumGiftOption#74c34319 flags:# months:int currency:string amount:long bot_url:string store_product:flags.0?string = PremiumGiftOption;
|
||||||
|
|
||||||
|
paymentFormMethod#88f8f21b url:string title:string = PaymentFormMethod;
|
||||||
|
|
||||||
---functions---
|
---functions---
|
||||||
|
|
||||||
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
|
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
|
||||||
|
|
|
@ -456,15 +456,8 @@ void StickersBox::showAttachedStickers() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
for (const auto &stickerSet : _attachedSets.v) {
|
for (const auto &set : _attachedSets.v) {
|
||||||
const auto setData = stickerSet.match([&](const auto &data) {
|
add(stickers->feedSetCovered(set));
|
||||||
return data.vset().match([&](const MTPDstickerSet &data) {
|
|
||||||
return &data;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
if (const auto set = stickers->feedSet(*setData)) {
|
|
||||||
add(set);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (const auto &setId : _emojiSets) {
|
for (const auto &setId : _emojiSets) {
|
||||||
const auto i = stickers->sets().find(setId.id);
|
const auto i = stickers->sets().find(setId.id);
|
||||||
|
@ -503,41 +496,22 @@ void StickersBox::getArchivedDone(
|
||||||
|
|
||||||
auto addedSet = false;
|
auto addedSet = false;
|
||||||
auto changedSets = false;
|
auto changedSets = false;
|
||||||
for (const auto &stickerSet : stickers.vsets().v) {
|
for (const auto &data : stickers.vsets().v) {
|
||||||
const MTPDstickerSet *setData = nullptr;
|
const auto set = session().data().stickers().feedSetCovered(data);
|
||||||
switch (stickerSet.type()) {
|
const auto index = archived.indexOf(set->id);
|
||||||
case mtpc_stickerSetCovered: {
|
if (archived.isEmpty() || index != archived.size() - 1) {
|
||||||
auto &d = stickerSet.c_stickerSetCovered();
|
changedSets = true;
|
||||||
if (d.vset().type() == mtpc_stickerSet) {
|
if (index >= 0 && index < archived.size() - 1) {
|
||||||
setData = &d.vset().c_stickerSet();
|
archived.removeAt(index);
|
||||||
}
|
}
|
||||||
} break;
|
archived.push_back(set->id);
|
||||||
case mtpc_stickerSetMultiCovered: {
|
|
||||||
auto &d = stickerSet.c_stickerSetMultiCovered();
|
|
||||||
if (d.vset().type() == mtpc_stickerSet) {
|
|
||||||
setData = &d.vset().c_stickerSet();
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
}
|
}
|
||||||
if (!setData) continue;
|
if (_archived.widget()->appendSet(set)) {
|
||||||
|
addedSet = true;
|
||||||
if (const auto set = session().data().stickers().feedSet(*setData)) {
|
if (set->flags & SetFlag::NotLoaded) {
|
||||||
const auto index = archived.indexOf(set->id);
|
session().api().scheduleStickerSetRequest(
|
||||||
if (archived.isEmpty() || index != archived.size() - 1) {
|
set->id,
|
||||||
changedSets = true;
|
set->accessHash);
|
||||||
if (index >= 0 && index < archived.size() - 1) {
|
|
||||||
archived.removeAt(index);
|
|
||||||
}
|
|
||||||
archived.push_back(set->id);
|
|
||||||
}
|
|
||||||
if (_archived.widget()->appendSet(set)) {
|
|
||||||
addedSet = true;
|
|
||||||
if (set->stickers.isEmpty()
|
|
||||||
|| (set->flags & SetFlag::NotLoaded)) {
|
|
||||||
session().api().scheduleStickerSetRequest(
|
|
||||||
set->id,
|
|
||||||
set->accessHash);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1422,9 +1422,11 @@ void EmojiListWidget::updateSelected() {
|
||||||
auto info = sectionInfoByOffset(p.y());
|
auto info = sectionInfoByOffset(p.y());
|
||||||
auto section = info.section;
|
auto section = info.section;
|
||||||
if (p.y() >= info.top && p.y() < info.rowsTop) {
|
if (p.y() >= info.top && p.y() < info.rowsTop) {
|
||||||
if (hasRemoveButton(section) && myrtlrect(removeButtonRect(section)).contains(p.x(), p.y())) {
|
if (hasRemoveButton(section)
|
||||||
|
&& myrtlrect(
|
||||||
|
removeButtonRect(section)).contains(p.x(), p.y())) {
|
||||||
newSelected = OverButton{ section };
|
newSelected = OverButton{ section };
|
||||||
} else {
|
} else if (section >= kEmojiSectionCount) {
|
||||||
newSelected = OverSet{ section };
|
newSelected = OverSet{ section };
|
||||||
}
|
}
|
||||||
} else if (p.y() >= info.rowsTop && p.y() < info.rowsBottom) {
|
} else if (p.y() >= info.rowsTop && p.y() < info.rowsBottom) {
|
||||||
|
|
|
@ -348,38 +348,17 @@ void StickersListWidget::preloadMoreOfficial() {
|
||||||
const auto &list = data.vsets().v;
|
const auto &list = data.vsets().v;
|
||||||
_officialOffset += list.size();
|
_officialOffset += list.size();
|
||||||
for (int i = 0, l = list.size(); i != l; ++i) {
|
for (int i = 0, l = list.size(); i != l; ++i) {
|
||||||
auto &data = list[i];
|
const auto set = session().data().stickers().feedSetCovered(
|
||||||
const auto setData = data.match([&](const auto &data) {
|
list[i]);
|
||||||
return data.vset().match([](const MTPDstickerSet &data) {
|
if (set->stickers.empty() && set->covers.empty()) {
|
||||||
return &data;
|
continue;
|
||||||
});
|
|
||||||
});
|
|
||||||
const auto covers = data.match([](const MTPDstickerSetCovered &) {
|
|
||||||
return StickersPack();
|
|
||||||
}, [&](const MTPDstickerSetMultiCovered &data) {
|
|
||||||
auto result = StickersPack();
|
|
||||||
for (const auto &cover : data.vcovers().v) {
|
|
||||||
const auto document = session().data().processDocument(cover);
|
|
||||||
if (document->sticker()) {
|
|
||||||
result.push_back(document);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
if (const auto set = session().data().stickers().feedSet(*setData)) {
|
|
||||||
if (!covers.empty()) {
|
|
||||||
set->covers = covers;
|
|
||||||
}
|
|
||||||
if (set->stickers.empty() && set->covers.empty()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const auto externalLayout = true;
|
|
||||||
appendSet(
|
|
||||||
_officialSets,
|
|
||||||
set->id,
|
|
||||||
externalLayout,
|
|
||||||
AppendSkip::Installed);
|
|
||||||
}
|
}
|
||||||
|
const auto externalLayout = true;
|
||||||
|
appendSet(
|
||||||
|
_officialSets,
|
||||||
|
set->id,
|
||||||
|
externalLayout,
|
||||||
|
AppendSkip::Installed);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
resizeToWidth(width());
|
resizeToWidth(width());
|
||||||
|
@ -800,40 +779,12 @@ void StickersListWidget::searchResultsDone(
|
||||||
std::vector<uint64>()).first;
|
std::vector<uint64>()).first;
|
||||||
}
|
}
|
||||||
auto &d = result.c_messages_foundStickerSets();
|
auto &d = result.c_messages_foundStickerSets();
|
||||||
for (const auto &stickerSet : d.vsets().v) {
|
for (const auto &data : d.vsets().v) {
|
||||||
const MTPDstickerSet *setData = nullptr;
|
const auto set = session().data().stickers().feedSetCovered(data);
|
||||||
StickersPack covers;
|
if (set->stickers.empty() && set->covers.empty()) {
|
||||||
switch (stickerSet.type()) {
|
continue;
|
||||||
case mtpc_stickerSetCovered: {
|
|
||||||
auto &d = stickerSet.c_stickerSetCovered();
|
|
||||||
if (d.vset().type() == mtpc_stickerSet) {
|
|
||||||
setData = &d.vset().c_stickerSet();
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case mtpc_stickerSetMultiCovered: {
|
|
||||||
auto &d = stickerSet.c_stickerSetMultiCovered();
|
|
||||||
if (d.vset().type() == mtpc_stickerSet) {
|
|
||||||
setData = &d.vset().c_stickerSet();
|
|
||||||
}
|
|
||||||
for (const auto &cover : d.vcovers().v) {
|
|
||||||
const auto document = session().data().processDocument(cover);
|
|
||||||
if (document->sticker()) {
|
|
||||||
covers.push_back(document);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
if (!setData) continue;
|
|
||||||
|
|
||||||
if (const auto set = session().data().stickers().feedSet(*setData)) {
|
|
||||||
if (!covers.empty()) {
|
|
||||||
set->covers = covers;
|
|
||||||
}
|
|
||||||
if (set->stickers.empty() && set->covers.empty()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
it->second.push_back(set->id);
|
|
||||||
}
|
}
|
||||||
|
it->second.push_back(set->id);
|
||||||
}
|
}
|
||||||
showSearchResults();
|
showSearchResults();
|
||||||
}
|
}
|
||||||
|
|
|
@ -351,36 +351,19 @@ void Stickers::applyArchivedResult(
|
||||||
|
|
||||||
auto masksCount = 0;
|
auto masksCount = 0;
|
||||||
auto stickersCount = 0;
|
auto stickersCount = 0;
|
||||||
for (const auto &stickerSet : v) {
|
for (const auto &data : v) {
|
||||||
const MTPDstickerSet *setData = nullptr;
|
const auto set = feedSetCovered(data);
|
||||||
switch (stickerSet.type()) {
|
if (set->flags & SetFlag::NotLoaded) {
|
||||||
case mtpc_stickerSetCovered: {
|
setsToRequest.insert(set->id, set->accessHash);
|
||||||
auto &d = stickerSet.c_stickerSetCovered();
|
|
||||||
if (d.vset().type() == mtpc_stickerSet) {
|
|
||||||
setData = &d.vset().c_stickerSet();
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case mtpc_stickerSetMultiCovered: {
|
|
||||||
auto &d = stickerSet.c_stickerSetMultiCovered();
|
|
||||||
if (d.vset().type() == mtpc_stickerSet) {
|
|
||||||
setData = &d.vset().c_stickerSet();
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
}
|
}
|
||||||
if (setData) {
|
const auto masks = !!(set->flags & SetFlag::Masks);
|
||||||
auto set = feedSet(*setData);
|
(masks ? masksCount : stickersCount)++;
|
||||||
if (set->stickers.isEmpty()) {
|
auto &order = masks ? maskSetsOrderRef() : setsOrderRef();
|
||||||
setsToRequest.insert(set->id, set->accessHash);
|
const auto index = order.indexOf(set->id);
|
||||||
}
|
if (index >= 0) {
|
||||||
const auto masks = !!(set->flags & SetFlag::Masks);
|
order.removeAt(index);
|
||||||
(masks ? masksCount : stickersCount)++;
|
|
||||||
auto &order = masks ? maskSetsOrderRef() : setsOrderRef();
|
|
||||||
const auto index = order.indexOf(set->id);
|
|
||||||
if (index >= 0) {
|
|
||||||
order.removeAt(index);
|
|
||||||
}
|
|
||||||
archived.push_back(set->id);
|
|
||||||
}
|
}
|
||||||
|
archived.push_back(set->id);
|
||||||
}
|
}
|
||||||
if (!setsToRequest.isEmpty()) {
|
if (!setsToRequest.isEmpty()) {
|
||||||
for (auto i = setsToRequest.cbegin(), e = setsToRequest.cend(); i != e; ++i) {
|
for (auto i = setsToRequest.cbegin(), e = setsToRequest.cend(); i != e; ++i) {
|
||||||
|
@ -686,7 +669,7 @@ void Stickers::emojiReceived(
|
||||||
}
|
}
|
||||||
|
|
||||||
void Stickers::somethingReceived(
|
void Stickers::somethingReceived(
|
||||||
const QVector<MTPStickerSet> &data,
|
const QVector<MTPStickerSet> &list,
|
||||||
uint64 hash,
|
uint64 hash,
|
||||||
StickersType type) {
|
StickersType type) {
|
||||||
auto &setsOrder = (type == StickersType::Emoji)
|
auto &setsOrder = (type == StickersType::Emoji)
|
||||||
|
@ -711,11 +694,8 @@ void Stickers::somethingReceived(
|
||||||
set->installDate = 0;
|
set->installDate = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const auto &setData : data) {
|
for (const auto &info : list) {
|
||||||
if (setData.type() != mtpc_stickerSet) {
|
const auto set = feedSet(info);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const auto set = feedSet(setData.c_stickerSet());
|
|
||||||
if (!(set->flags & SetFlag::Archived)
|
if (!(set->flags & SetFlag::Archived)
|
||||||
|| (set->flags & SetFlag::Official)) {
|
|| (set->flags & SetFlag::Official)) {
|
||||||
setsOrder.push_back(set->id);
|
setsOrder.push_back(set->id);
|
||||||
|
@ -1279,8 +1259,9 @@ std::optional<std::vector<not_null<EmojiPtr>>> Stickers::getEmojiListFromSet(
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
StickersSet *Stickers::feedSet(const MTPDstickerSet &data) {
|
not_null<StickersSet*> Stickers::feedSet(const MTPStickerSet &info) {
|
||||||
auto &sets = setsRef();
|
auto &sets = setsRef();
|
||||||
|
const auto &data = info.data();
|
||||||
auto it = sets.find(data.vid().v);
|
auto it = sets.find(data.vid().v);
|
||||||
auto title = getSetTitle(data);
|
auto title = getSetTitle(data);
|
||||||
auto oldFlags = StickersSetFlags(0);
|
auto oldFlags = StickersSetFlags(0);
|
||||||
|
@ -1356,31 +1337,50 @@ StickersSet *Stickers::feedSet(const MTPDstickerSet &data) {
|
||||||
return it->second.get();
|
return it->second.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
StickersSet *Stickers::feedSetFull(const MTPDmessages_stickerSet &d) {
|
not_null<StickersSet*> Stickers::feedSetFull(
|
||||||
Expects(d.vset().type() == mtpc_stickerSet);
|
const MTPDmessages_stickerSet &data) {
|
||||||
|
const auto set = feedSet(data.vset());
|
||||||
|
feedSetStickers(set, data.vdocuments().v, data.vpacks().v);
|
||||||
|
return set;
|
||||||
|
}
|
||||||
|
|
||||||
const auto &s = d.vset().c_stickerSet();
|
not_null<StickersSet*> Stickers::feedSetCovered(
|
||||||
|
const MTPStickerSetCovered &data) {
|
||||||
|
const auto set = data.match([&](const auto &data) {
|
||||||
|
return feedSet(data.vset());
|
||||||
|
});
|
||||||
|
data.match([](const MTPDstickerSetCovered &data) {
|
||||||
|
}, [&](const MTPDstickerSetMultiCovered &data) {
|
||||||
|
feedSetCovers(set, data.vcovers().v);
|
||||||
|
}, [&](const MTPDstickerSetFullCovered &data) {
|
||||||
|
feedSetStickers(set, data.vdocuments().v, data.vpacks().v);
|
||||||
|
});
|
||||||
|
return set;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Stickers::feedSetStickers(
|
||||||
|
not_null<StickersSet*> set,
|
||||||
|
const QVector<MTPDocument> &documents,
|
||||||
|
const QVector<MTPStickerPack> &packs) {
|
||||||
|
set->flags &= ~SetFlag::NotLoaded;
|
||||||
|
|
||||||
auto &sets = setsRef();
|
auto &sets = setsRef();
|
||||||
const auto wasArchived = [&] {
|
const auto wasArchived = [&] {
|
||||||
auto it = sets.find(s.vid().v);
|
const auto it = sets.find(set->id);
|
||||||
return (it != sets.end())
|
return (it != sets.end())
|
||||||
&& (it->second->flags & SetFlag::Archived);
|
&& (it->second->flags & SetFlag::Archived);
|
||||||
}();
|
}();
|
||||||
|
|
||||||
auto set = feedSet(s);
|
|
||||||
|
|
||||||
set->flags &= ~SetFlag::NotLoaded;
|
|
||||||
|
|
||||||
const auto &d_docs = d.vdocuments().v;
|
|
||||||
auto customIt = sets.find(Stickers::CustomSetId);
|
auto customIt = sets.find(Stickers::CustomSetId);
|
||||||
const auto inputSet = set->identifier();
|
const auto inputSet = set->identifier();
|
||||||
|
|
||||||
auto pack = StickersPack();
|
auto pack = StickersPack();
|
||||||
pack.reserve(d_docs.size());
|
pack.reserve(documents.size());
|
||||||
for (const auto &item : d_docs) {
|
for (const auto &item : documents) {
|
||||||
const auto document = owner().processDocument(item);
|
const auto document = owner().processDocument(item);
|
||||||
if (!document->sticker()) continue;
|
if (!document->sticker()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
pack.push_back(document);
|
pack.push_back(document);
|
||||||
if (!document->sticker()->set.id) {
|
if (!document->sticker()->set.id) {
|
||||||
|
@ -1402,7 +1402,8 @@ StickersSet *Stickers::feedSetFull(const MTPDmessages_stickerSet &d) {
|
||||||
auto writeRecent = false;
|
auto writeRecent = false;
|
||||||
auto &recent = getRecentPack();
|
auto &recent = getRecentPack();
|
||||||
for (auto i = recent.begin(); i != recent.cend();) {
|
for (auto i = recent.begin(); i != recent.cend();) {
|
||||||
if (set->stickers.indexOf(i->first) >= 0 && pack.indexOf(i->first) < 0) {
|
if (set->stickers.indexOf(i->first) >= 0
|
||||||
|
&& pack.indexOf(i->first) < 0) {
|
||||||
i = recent.erase(i);
|
i = recent.erase(i);
|
||||||
writeRecent = true;
|
writeRecent = true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1412,43 +1413,24 @@ StickersSet *Stickers::feedSetFull(const MTPDmessages_stickerSet &d) {
|
||||||
|
|
||||||
const auto isEmoji = !!(set->flags & SetFlag::Emoji);
|
const auto isEmoji = !!(set->flags & SetFlag::Emoji);
|
||||||
const auto isMasks = !!(set->flags & SetFlag::Masks);
|
const auto isMasks = !!(set->flags & SetFlag::Masks);
|
||||||
if (pack.isEmpty()) {
|
set->stickers = pack;
|
||||||
const auto removeIndex = (isEmoji
|
set->emoji.clear();
|
||||||
? emojiSetsOrder()
|
for (auto i = 0, l = int(packs.size()); i != l; ++i) {
|
||||||
: isMasks
|
const auto &pack = packs[i].data();
|
||||||
? maskSetsOrder()
|
if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon()))) {
|
||||||
: setsOrder()).indexOf(set->id);
|
emoji = emoji->original();
|
||||||
if (removeIndex >= 0) {
|
auto &stickers = pack.vdocuments().v;
|
||||||
(isEmoji
|
|
||||||
? emojiSetsOrderRef()
|
|
||||||
: isMasks
|
|
||||||
? maskSetsOrderRef()
|
|
||||||
: setsOrderRef()).removeAt(removeIndex);
|
|
||||||
}
|
|
||||||
sets.remove(set->id);
|
|
||||||
set = nullptr;
|
|
||||||
} else {
|
|
||||||
set->stickers = pack;
|
|
||||||
set->emoji.clear();
|
|
||||||
auto &v = d.vpacks().v;
|
|
||||||
for (auto i = 0, l = int(v.size()); i != l; ++i) {
|
|
||||||
if (v[i].type() != mtpc_stickerPack) continue;
|
|
||||||
|
|
||||||
auto &pack = v[i].c_stickerPack();
|
auto p = StickersPack();
|
||||||
if (auto emoji = Ui::Emoji::Find(qs(pack.vemoticon()))) {
|
p.reserve(stickers.size());
|
||||||
emoji = emoji->original();
|
for (auto j = 0, c = int(stickers.size()); j != c; ++j) {
|
||||||
auto &stickers = pack.vdocuments().v;
|
const auto document = owner().document(stickers[j].v);
|
||||||
|
if (!document->sticker()) {
|
||||||
StickersPack p;
|
continue;
|
||||||
p.reserve(stickers.size());
|
|
||||||
for (auto j = 0, c = int(stickers.size()); j != c; ++j) {
|
|
||||||
auto doc = owner().document(stickers[j].v);
|
|
||||||
if (!doc || !doc->sticker()) continue;
|
|
||||||
|
|
||||||
p.push_back(doc);
|
|
||||||
}
|
}
|
||||||
set->emoji.insert(emoji, p);
|
p.push_back(document);
|
||||||
}
|
}
|
||||||
|
set->emoji.insert(emoji, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1456,34 +1438,40 @@ StickersSet *Stickers::feedSetFull(const MTPDmessages_stickerSet &d) {
|
||||||
session().saveSettings();
|
session().saveSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set) {
|
const auto isArchived = !!(set->flags & SetFlag::Archived);
|
||||||
const auto isArchived = !!(set->flags & SetFlag::Archived);
|
if ((set->flags & SetFlag::Installed) && !isArchived) {
|
||||||
if ((set->flags & SetFlag::Installed) && !isArchived) {
|
if (isEmoji) {
|
||||||
if (isEmoji) {
|
session().local().writeInstalledCustomEmoji();
|
||||||
session().local().writeInstalledCustomEmoji();
|
} else if (isMasks) {
|
||||||
} else if (isMasks) {
|
session().local().writeInstalledMasks();
|
||||||
session().local().writeInstalledMasks();
|
} else {
|
||||||
} else {
|
session().local().writeInstalledStickers();
|
||||||
session().local().writeInstalledStickers();
|
}
|
||||||
}
|
}
|
||||||
}
|
if (set->flags & SetFlag::Featured) {
|
||||||
if (set->flags & SetFlag::Featured) {
|
session().local().writeFeaturedStickers();
|
||||||
session().local().writeFeaturedStickers();
|
}
|
||||||
}
|
if (wasArchived != isArchived) {
|
||||||
if (wasArchived != isArchived) {
|
if (isEmoji) {
|
||||||
if (isEmoji) {
|
} else if (isMasks) {
|
||||||
|
session().local().writeArchivedMasks();
|
||||||
} else if (isMasks) {
|
} else {
|
||||||
session().local().writeArchivedMasks();
|
session().local().writeArchivedStickers();
|
||||||
} else {
|
|
||||||
session().local().writeArchivedStickers();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyUpdated();
|
notifyUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
return set;
|
void Stickers::feedSetCovers(
|
||||||
|
not_null<StickersSet*> set,
|
||||||
|
const QVector<MTPDocument> &documents) {
|
||||||
|
set->covers = StickersPack();
|
||||||
|
for (const auto &cover : documents) {
|
||||||
|
const auto document = session().data().processDocument(cover);
|
||||||
|
if (document->sticker()) {
|
||||||
|
set->covers.push_back(document);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Stickers::newSetReceived(const MTPDmessages_stickerSet &set) {
|
void Stickers::newSetReceived(const MTPDmessages_stickerSet &set) {
|
||||||
|
|
|
@ -228,8 +228,16 @@ public:
|
||||||
std::optional<std::vector<not_null<EmojiPtr>>> getEmojiListFromSet(
|
std::optional<std::vector<not_null<EmojiPtr>>> getEmojiListFromSet(
|
||||||
not_null<DocumentData*> document);
|
not_null<DocumentData*> document);
|
||||||
|
|
||||||
StickersSet *feedSet(const MTPDstickerSet &data);
|
not_null<StickersSet*> feedSet(const MTPStickerSet &data);
|
||||||
StickersSet *feedSetFull(const MTPDmessages_stickerSet &d);
|
not_null<StickersSet*> feedSetFull(const MTPDmessages_stickerSet &data);
|
||||||
|
not_null<StickersSet*> feedSetCovered(const MTPStickerSetCovered &data);
|
||||||
|
void feedSetStickers(
|
||||||
|
not_null<StickersSet*> set,
|
||||||
|
const QVector<MTPDocument> &documents,
|
||||||
|
const QVector<MTPStickerPack> &packs);
|
||||||
|
void feedSetCovers(
|
||||||
|
not_null<StickersSet*> set,
|
||||||
|
const QVector<MTPDocument> &documents);
|
||||||
void newSetReceived(const MTPDmessages_stickerSet &set);
|
void newSetReceived(const MTPDmessages_stickerSet &set);
|
||||||
|
|
||||||
QString getSetTitle(const MTPDstickerSet &s);
|
QString getSetTitle(const MTPDstickerSet &s);
|
||||||
|
@ -266,7 +274,7 @@ private:
|
||||||
const std::vector<TimeId> &&dates,
|
const std::vector<TimeId> &&dates,
|
||||||
const QVector<MTPStickerPack> &packs);
|
const QVector<MTPStickerPack> &packs);
|
||||||
void somethingReceived(
|
void somethingReceived(
|
||||||
const QVector<MTPStickerSet> &data,
|
const QVector<MTPStickerSet> &list,
|
||||||
uint64 hash,
|
uint64 hash,
|
||||||
StickersType type);
|
StickersType type);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue