/
s5z6
/
telegraf
Обзор
Документация
Войти
/
s5z6
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/data/stickermanager.cpp
121 строка
4 KB
mbarashkov
Версия 0.97.4: ленивая загрузка стикеров; ускорена в 4 раза очередь запросов.
04 июл 2025, 15:26
04 июл 2025, 15:26
2779850
Код
Авторство
О чём код?
#include "stickermanager.h" #include <QListIterator> #include "../debuglog.h" StickerManager* StickerManager::instance; StickerManager::StickerManager(QObject *parent) : QObject(parent) { connect(TDLibResponseHandler::getInstance(), SIGNAL(recentStickersUpdated(QVariantList)), this, SLOT(handleRecentStickersUpdated(QVariantList))); connect(TDLibResponseHandler::getInstance(), SIGNAL(stickersReceived(QVariantList)), this, SLOT(handleStickersReceived(QVariantList))); connect(TDLibResponseHandler::getInstance(), SIGNAL(installedStickerSetsUpdated(QVariantList)), this, SLOT(handleInstalledStickerSetsUpdated(QVariantList))); connect(TDLibResponseHandler::getInstance(), SIGNAL(stickerSetsReceived(QVariantList)), this, SLOT(handleStickerSetsReceived(QVariantList))); connect(TDLibResponseHandler::getInstance(), SIGNAL(stickerSetReceived(QVariantMap)), this, SLOT(handleStickerSetReceived(QVariantMap))); StickerManager::instance = this; } QVariantList StickerManager::getRecentStickers() { return this->recentStickers; } QVariantList StickerManager::getInstalledStickerSets() { return this->installedStickerSets; } QVariantMap StickerManager::getStickerSet(const QString &stickerSetId) { return this->stickerSets.value(stickerSetId).toMap(); } bool StickerManager::hasStickerSet(const QString &stickerSetId) { return this->stickerSets.contains(stickerSetId); } bool StickerManager::isStickerSetInstalled(const QString &stickerSetId) { return this->installedStickerSetIds.contains(stickerSetId); } bool StickerManager::needsReload() { return this->reloadNeeded; } void StickerManager::setNeedsReload(const bool &reloadNeeded) { this->reloadNeeded = reloadNeeded; } void StickerManager::handleRecentStickersUpdated(const QVariantList &stickerIds) { this->recentStickerIds = stickerIds; } void StickerManager::handleStickersReceived(const QVariantList &stickers) { QListIterator<QVariant> stickersIterator(stickers); while (stickersIterator.hasNext()) { QVariantMap newSticker = stickersIterator.next().toMap(); this->stickers.insert(newSticker.value("sticker").toMap().value("id").toString(), newSticker); } this->recentStickers.clear(); QListIterator<QVariant> stickerIdIterator(this->recentStickerIds); while (stickerIdIterator.hasNext()) { QString stickerId = stickerIdIterator.next().toString(); this->recentStickers.append(this->stickers.value(stickerId)); } } void StickerManager::handleInstalledStickerSetsUpdated(const QVariantList &stickerSetIds) { this->installedStickerSetIds = stickerSetIds; } void StickerManager::handleStickerSetsReceived(const QVariantList &stickerSets) { QListIterator<QVariant> stickerSetsIterator(stickerSets); while (stickerSetsIterator.hasNext()) { QVariantMap newStickerSet = stickerSetsIterator.next().toMap(); QString newSetId = newStickerSet.value("id").toString(); bool isInstalled = newStickerSet.value("is_installed").toBool(); if (isInstalled && !this->installedStickerSetIds.contains(newSetId)) { this->installedStickerSetIds.append(newSetId); } if (!isInstalled && this->installedStickerSetIds.contains(newSetId)) { this->installedStickerSetIds.removeAll(newSetId); } if (!this->stickerSets.contains(newSetId)) { this->stickerSets.insert(newSetId, newStickerSet); } } this->installedStickerSets.clear(); QListIterator<QVariant> stickerSetIdIterator(this->installedStickerSetIds); int i = 0; this->stickerSetMap.clear(); while (stickerSetIdIterator.hasNext()) { QString stickerSetId = stickerSetIdIterator.next().toString(); if (this->stickerSets.contains(stickerSetId)) { this->installedStickerSets.append(this->stickerSets.value(stickerSetId)); this->stickerSetMap.insert(stickerSetId, i); i++; } } emit stickerSetsReceived(); } void StickerManager::handleStickerSetReceived(const QVariantMap &stickerSet) { QString stickerSetId = stickerSet.value("id").toString(); this->stickerSets.insert(stickerSetId, stickerSet); if (this->installedStickerSetIds.contains(stickerSetId)) { int setIndex = this->stickerSetMap.value(stickerSetId).toInt(); this->installedStickerSets.replace(setIndex, stickerSet); } }