mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added initial api support of stickerset attribute in web pages.
This commit is contained in:
parent
a3b8397361
commit
f43f99cff2
6 changed files with 52 additions and 0 deletions
|
@ -312,6 +312,7 @@ PreviewWrap::PreviewWrap(
|
||||||
nullptr, // document
|
nullptr, // document
|
||||||
WebPageCollage(),
|
WebPageCollage(),
|
||||||
nullptr, // iv
|
nullptr, // iv
|
||||||
|
nullptr, // stickerSet
|
||||||
0, // duration
|
0, // duration
|
||||||
QString(), // author
|
QString(), // author
|
||||||
false, // hasLargeMedia
|
false, // hasLargeMedia
|
||||||
|
|
|
@ -3377,6 +3377,7 @@ not_null<WebPageData*> Session::processWebpage(
|
||||||
nullptr,
|
nullptr,
|
||||||
WebPageCollage(),
|
WebPageCollage(),
|
||||||
nullptr,
|
nullptr,
|
||||||
|
nullptr,
|
||||||
0,
|
0,
|
||||||
QString(),
|
QString(),
|
||||||
false,
|
false,
|
||||||
|
@ -3402,6 +3403,7 @@ not_null<WebPageData*> Session::webpage(
|
||||||
nullptr,
|
nullptr,
|
||||||
WebPageCollage(),
|
WebPageCollage(),
|
||||||
nullptr,
|
nullptr,
|
||||||
|
nullptr,
|
||||||
0,
|
0,
|
||||||
QString(),
|
QString(),
|
||||||
false,
|
false,
|
||||||
|
@ -3420,6 +3422,7 @@ not_null<WebPageData*> Session::webpage(
|
||||||
DocumentData *document,
|
DocumentData *document,
|
||||||
WebPageCollage &&collage,
|
WebPageCollage &&collage,
|
||||||
std::unique_ptr<Iv::Data> iv,
|
std::unique_ptr<Iv::Data> iv,
|
||||||
|
std::unique_ptr<WebPageStickerSet> stickerSet,
|
||||||
int duration,
|
int duration,
|
||||||
const QString &author,
|
const QString &author,
|
||||||
bool hasLargeMedia,
|
bool hasLargeMedia,
|
||||||
|
@ -3438,6 +3441,7 @@ not_null<WebPageData*> Session::webpage(
|
||||||
document,
|
document,
|
||||||
std::move(collage),
|
std::move(collage),
|
||||||
std::move(iv),
|
std::move(iv),
|
||||||
|
std::move(stickerSet),
|
||||||
duration,
|
duration,
|
||||||
author,
|
author,
|
||||||
hasLargeMedia,
|
hasLargeMedia,
|
||||||
|
@ -3490,6 +3494,29 @@ void Session::webpageApplyFields(
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
};
|
};
|
||||||
|
using WebPageStickerSetPtr = std::unique_ptr<WebPageStickerSet>;
|
||||||
|
const auto lookupStickerSet = [&]() -> WebPageStickerSetPtr {
|
||||||
|
if (const auto attributes = data.vattributes()) {
|
||||||
|
for (const auto &attribute : attributes->v) {
|
||||||
|
auto result = attribute.match([&](
|
||||||
|
const MTPDwebPageAttributeStickerSet &data) {
|
||||||
|
auto result = std::make_unique<WebPageStickerSet>();
|
||||||
|
result->isEmoji = data.is_emojis();
|
||||||
|
result->isTextColor = data.is_text_color();
|
||||||
|
for (const auto &tl : data.vstickers().v) {
|
||||||
|
result->items.push_back(processDocument(tl));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}, [](const auto &) {
|
||||||
|
return WebPageStickerSetPtr(nullptr);
|
||||||
|
});
|
||||||
|
if (!result->items.empty()) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
};
|
||||||
auto story = (Data::Story*)nullptr;
|
auto story = (Data::Story*)nullptr;
|
||||||
auto storyId = FullStoryId();
|
auto storyId = FullStoryId();
|
||||||
if (const auto attributes = data.vattributes()) {
|
if (const auto attributes = data.vattributes()) {
|
||||||
|
@ -3581,6 +3608,7 @@ void Session::webpageApplyFields(
|
||||||
: lookupThemeDocument()),
|
: lookupThemeDocument()),
|
||||||
WebPageCollage(this, data),
|
WebPageCollage(this, data),
|
||||||
std::move(iv),
|
std::move(iv),
|
||||||
|
lookupStickerSet(),
|
||||||
data.vduration().value_or_empty(),
|
data.vduration().value_or_empty(),
|
||||||
qs(data.vauthor().value_or_empty()),
|
qs(data.vauthor().value_or_empty()),
|
||||||
data.is_has_large_media(),
|
data.is_has_large_media(),
|
||||||
|
@ -3600,6 +3628,7 @@ void Session::webpageApplyFields(
|
||||||
DocumentData *document,
|
DocumentData *document,
|
||||||
WebPageCollage &&collage,
|
WebPageCollage &&collage,
|
||||||
std::unique_ptr<Iv::Data> iv,
|
std::unique_ptr<Iv::Data> iv,
|
||||||
|
std::unique_ptr<WebPageStickerSet> stickerSet,
|
||||||
int duration,
|
int duration,
|
||||||
const QString &author,
|
const QString &author,
|
||||||
bool hasLargeMedia,
|
bool hasLargeMedia,
|
||||||
|
@ -3617,6 +3646,7 @@ void Session::webpageApplyFields(
|
||||||
document,
|
document,
|
||||||
std::move(collage),
|
std::move(collage),
|
||||||
std::move(iv),
|
std::move(iv),
|
||||||
|
std::move(stickerSet),
|
||||||
duration,
|
duration,
|
||||||
author,
|
author,
|
||||||
hasLargeMedia,
|
hasLargeMedia,
|
||||||
|
|
|
@ -17,6 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
class Image;
|
class Image;
|
||||||
class HistoryItem;
|
class HistoryItem;
|
||||||
struct WebPageCollage;
|
struct WebPageCollage;
|
||||||
|
struct WebPageStickerSet;
|
||||||
enum class WebPageType : uint8;
|
enum class WebPageType : uint8;
|
||||||
enum class NewMessageType;
|
enum class NewMessageType;
|
||||||
|
|
||||||
|
@ -579,6 +580,7 @@ public:
|
||||||
DocumentData *document,
|
DocumentData *document,
|
||||||
WebPageCollage &&collage,
|
WebPageCollage &&collage,
|
||||||
std::unique_ptr<Iv::Data> iv,
|
std::unique_ptr<Iv::Data> iv,
|
||||||
|
std::unique_ptr<WebPageStickerSet> stickerSet,
|
||||||
int duration,
|
int duration,
|
||||||
const QString &author,
|
const QString &author,
|
||||||
bool hasLargeMedia,
|
bool hasLargeMedia,
|
||||||
|
@ -857,6 +859,7 @@ private:
|
||||||
DocumentData *document,
|
DocumentData *document,
|
||||||
WebPageCollage &&collage,
|
WebPageCollage &&collage,
|
||||||
std::unique_ptr<Iv::Data> iv,
|
std::unique_ptr<Iv::Data> iv,
|
||||||
|
std::unique_ptr<WebPageStickerSet> stickerSet,
|
||||||
int duration,
|
int duration,
|
||||||
const QString &author,
|
const QString &author,
|
||||||
bool hasLargeMedia,
|
bool hasLargeMedia,
|
||||||
|
|
|
@ -166,6 +166,8 @@ WebPageType ParseWebPageType(
|
||||||
return WebPageType::ChannelBoost;
|
return WebPageType::ChannelBoost;
|
||||||
} else if (type == u"telegram_giftcode"_q) {
|
} else if (type == u"telegram_giftcode"_q) {
|
||||||
return WebPageType::Giftcode;
|
return WebPageType::Giftcode;
|
||||||
|
} else if (type == u"telegram_stickerset"_q) {
|
||||||
|
return WebPageType::StickerSet;
|
||||||
} else if (hasIV) {
|
} else if (hasIV) {
|
||||||
return WebPageType::ArticleWithIV;
|
return WebPageType::ArticleWithIV;
|
||||||
} else {
|
} else {
|
||||||
|
@ -219,6 +221,7 @@ bool WebPageData::applyChanges(
|
||||||
DocumentData *newDocument,
|
DocumentData *newDocument,
|
||||||
WebPageCollage &&newCollage,
|
WebPageCollage &&newCollage,
|
||||||
std::unique_ptr<Iv::Data> newIv,
|
std::unique_ptr<Iv::Data> newIv,
|
||||||
|
std::unique_ptr<WebPageStickerSet> newStickerSet,
|
||||||
int newDuration,
|
int newDuration,
|
||||||
const QString &newAuthor,
|
const QString &newAuthor,
|
||||||
bool newHasLargeMedia,
|
bool newHasLargeMedia,
|
||||||
|
@ -272,6 +275,7 @@ bool WebPageData::applyChanges(
|
||||||
&& collage.items == newCollage.items
|
&& collage.items == newCollage.items
|
||||||
&& (!iv == !newIv)
|
&& (!iv == !newIv)
|
||||||
&& (!iv || iv->partial() == newIv->partial())
|
&& (!iv || iv->partial() == newIv->partial())
|
||||||
|
&& (!stickerSet == !newStickerSet)
|
||||||
&& duration == newDuration
|
&& duration == newDuration
|
||||||
&& author == resultAuthor
|
&& author == resultAuthor
|
||||||
&& hasLargeMedia == (newHasLargeMedia ? 1 : 0)
|
&& hasLargeMedia == (newHasLargeMedia ? 1 : 0)
|
||||||
|
@ -293,6 +297,7 @@ bool WebPageData::applyChanges(
|
||||||
document = newDocument;
|
document = newDocument;
|
||||||
collage = std::move(newCollage);
|
collage = std::move(newCollage);
|
||||||
iv = std::move(newIv);
|
iv = std::move(newIv);
|
||||||
|
stickerSet = std::move(newStickerSet);
|
||||||
duration = newDuration;
|
duration = newDuration;
|
||||||
author = resultAuthor;
|
author = resultAuthor;
|
||||||
pendingTill = newPendingTill;
|
pendingTill = newPendingTill;
|
||||||
|
|
|
@ -46,6 +46,7 @@ enum class WebPageType : uint8 {
|
||||||
WallPaper,
|
WallPaper,
|
||||||
Theme,
|
Theme,
|
||||||
Story,
|
Story,
|
||||||
|
StickerSet,
|
||||||
|
|
||||||
Article,
|
Article,
|
||||||
ArticleWithIV,
|
ArticleWithIV,
|
||||||
|
@ -68,6 +69,15 @@ struct WebPageCollage {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct WebPageStickerSet {
|
||||||
|
WebPageStickerSet() = default;
|
||||||
|
|
||||||
|
std::vector<not_null<DocumentData*>> items;
|
||||||
|
bool isEmoji = false;
|
||||||
|
bool isTextColor = false;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
struct WebPageData {
|
struct WebPageData {
|
||||||
WebPageData(not_null<Data::Session*> owner, const WebPageId &id);
|
WebPageData(not_null<Data::Session*> owner, const WebPageId &id);
|
||||||
~WebPageData();
|
~WebPageData();
|
||||||
|
@ -87,6 +97,7 @@ struct WebPageData {
|
||||||
DocumentData *newDocument,
|
DocumentData *newDocument,
|
||||||
WebPageCollage &&newCollage,
|
WebPageCollage &&newCollage,
|
||||||
std::unique_ptr<Iv::Data> newIv,
|
std::unique_ptr<Iv::Data> newIv,
|
||||||
|
std::unique_ptr<WebPageStickerSet> newStickerSet,
|
||||||
int newDuration,
|
int newDuration,
|
||||||
const QString &newAuthor,
|
const QString &newAuthor,
|
||||||
bool newHasLargeMedia,
|
bool newHasLargeMedia,
|
||||||
|
@ -114,6 +125,7 @@ struct WebPageData {
|
||||||
DocumentData *document = nullptr;
|
DocumentData *document = nullptr;
|
||||||
WebPageCollage collage;
|
WebPageCollage collage;
|
||||||
std::unique_ptr<Iv::Data> iv;
|
std::unique_ptr<Iv::Data> iv;
|
||||||
|
std::unique_ptr<WebPageStickerSet> stickerSet;
|
||||||
int duration = 0;
|
int duration = 0;
|
||||||
TimeId pendingTill = 0;
|
TimeId pendingTill = 0;
|
||||||
uint32 version : 30 = 0;
|
uint32 version : 30 = 0;
|
||||||
|
|
|
@ -657,6 +657,7 @@ HistoryItem::HistoryItem(
|
||||||
nullptr,
|
nullptr,
|
||||||
WebPageCollage(),
|
WebPageCollage(),
|
||||||
nullptr,
|
nullptr,
|
||||||
|
nullptr,
|
||||||
0,
|
0,
|
||||||
QString(),
|
QString(),
|
||||||
false,
|
false,
|
||||||
|
|
Loading…
Add table
Reference in a new issue