/
erhoof
/
telegraf
Обзор
Документация
Войти
/
erhoof
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/tdlib/tdlibrequestservice.cpp
101 строка
3 KB
Nikolay Sinyov
- Подправил фильтрацию для комментариев в chatmodel. Теперь выводит корректно чат-группы - закомментировал log_debug
17 сен 2025, 18:20
17 сен 2025, 18:20
0701420
Код
Авторство
О чём код?
#include "tdlibrequestservice.h" #include <QJsonDocument> #include <td/telegram/td_json_client.h> #include <td/telegram/Client.h> #include <td/telegram/td_api.h> #include "../debuglog.h" TDLibRequestService* TDLibRequestService::instance; namespace { const char _TYPE[] = "@type"; const int REQUEST_QUEUE_INTERVAL_MS = 100; } TDLibRequestService::TDLibRequestService(QObject *parent): QObject(parent) { _requestTimer.setSingleShot(true); connect(&_requestTimer, &QTimer::timeout, this, &TDLibRequestService::processNextRequest); TDLibRequestService::instance = this; } void TDLibRequestService::sendRequest(const QVariantMap &requestObject) { QJsonDocument requestDocument = QJsonDocument::fromVariant(requestObject); if (TDLibState::getInstance()->loggingOut) { _requestTimer.stop(); _requestQueue.clear(); return; } auto type = requestObject[_TYPE].toString(); if (shouldExecuteRequestImmediately(type)) { //LOG_DEBUG(LOG_TDLIB_COMM, "Sending request to TD Lib w/o queue, object: " << requestObject); td_send(TDLibState::getInstance()->getClientId(), requestDocument.toJson().constData()); return; } if(isQueuedRequestTopPriority(type)) { _requestQueue.push_front(requestDocument.object()); } else { _requestQueue.enqueue(requestDocument.object()); } if (!_requestTimer.isActive()) { processNextRequest(); } } bool TDLibRequestService::isRequestTimerActive() { return _requestTimer.isActive(); } void TDLibRequestService::callProcessNextRequest() { processNextRequest(); } void TDLibRequestService::processNextRequest() { if (_requestQueue.isEmpty()) { return; } /*else if(TDLibState::getInstance()->floodWait) { LOG_DEBUG(LOG_TDLIB_FLOODWAIT, "Пропускаем processNextRequest из-за floodwait"); return; }*/ auto time = REQUEST_QUEUE_INTERVAL_MS; if (!_requestTimer.isActive()) { QJsonObject request = _requestQueue.dequeue(); QJsonDocument requestDocument(request); //LOG_DEBUG(LOG_TDLIB_COMM, "Sending request to TD Lib from queue, object: " << requestDocument); td_send(TDLibState::getInstance()->getClientId(), requestDocument.toJson().constData()); _requestTimer.start(time); } } bool TDLibRequestService::shouldExecuteRequestImmediately(QString type) { return type != "downloadFile" && type != "getStickerSet" && type != "getUser" && type != "getChatFolder" && type != "loadChats" && type != "getUserPrivacySettingRules" && type != "getRecentStickers" && type != "contactsRequested"; } bool TDLibRequestService::isQueuedRequestTopPriority(QString type) { return type == "getChatFolder" || type == "loadChats"; }