2020-08-10 21:17:13 +03:00
|
|
|
#include "tdlibreceiver.h"
|
|
|
|
|
|
|
|
TDLibReceiver::TDLibReceiver(void *tdLibClient, QObject *parent) : QThread(parent)
|
|
|
|
{
|
|
|
|
this->tdLibClient = tdLibClient;
|
|
|
|
this->isActive = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TDLibReceiver::setActive(const bool &active)
|
|
|
|
{
|
2020-08-12 11:50:01 +03:00
|
|
|
if (active) {
|
|
|
|
qDebug() << "[TDLibReceiver] Activating receiver loop...";
|
|
|
|
} else {
|
|
|
|
qDebug() << "[TDLibReceiver] Deactivating receiver loop, this may take a while...";
|
|
|
|
}
|
2020-08-10 21:17:13 +03:00
|
|
|
this->isActive = active;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TDLibReceiver::receiverLoop()
|
|
|
|
{
|
|
|
|
qDebug() << "[TDLibReceiver] Starting receiver loop";
|
|
|
|
const double WAIT_TIMEOUT = 5.0;
|
|
|
|
while (this->isActive) {
|
|
|
|
const char *result = td_json_client_receive(this->tdLibClient, WAIT_TIMEOUT);
|
|
|
|
if (result) {
|
2020-08-11 00:37:25 +03:00
|
|
|
QJsonDocument receivedJsonDocument = QJsonDocument::fromJson(QByteArray(result));
|
|
|
|
qDebug().noquote() << "[TDLibReceiver] Raw result: " << receivedJsonDocument.toJson(QJsonDocument::Indented);
|
2020-08-12 11:50:01 +03:00
|
|
|
processReceivedDocument(receivedJsonDocument);
|
2020-08-10 21:17:13 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
qDebug() << "[TDLibReceiver] Stopping receiver loop";
|
|
|
|
}
|
2020-08-11 00:37:25 +03:00
|
|
|
|
2020-08-12 11:50:01 +03:00
|
|
|
void TDLibReceiver::processReceivedDocument(const QJsonDocument &receivedJsonDocument)
|
2020-08-11 00:37:25 +03:00
|
|
|
{
|
|
|
|
QVariantMap receivedInformation = receivedJsonDocument.object().toVariantMap();
|
|
|
|
QString objectTypeName = receivedInformation.value("@type").toString();
|
|
|
|
|
|
|
|
if (objectTypeName == "updateOption") {
|
2020-08-12 11:50:01 +03:00
|
|
|
this->processUpdateOption(receivedInformation);
|
2020-08-11 00:37:25 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
if (objectTypeName == "updateAuthorizationState") {
|
2020-08-12 11:50:01 +03:00
|
|
|
this->processUpdateAuthorizationState(receivedInformation);
|
2020-08-11 00:37:25 +03:00
|
|
|
}
|
2020-08-13 01:20:28 +03:00
|
|
|
|
|
|
|
if (objectTypeName == "updateConnectionState") {
|
|
|
|
this->processUpdateConnectionState(receivedInformation);
|
|
|
|
}
|
2020-08-11 00:37:25 +03:00
|
|
|
}
|
|
|
|
|
2020-08-12 11:50:01 +03:00
|
|
|
void TDLibReceiver::processUpdateOption(const QVariantMap &receivedInformation)
|
2020-08-11 00:37:25 +03:00
|
|
|
{
|
|
|
|
QString currentOption = receivedInformation.value("name").toString();
|
|
|
|
if (currentOption == "version") {
|
|
|
|
QString detectedVersion = receivedInformation.value("value").toMap().value("value").toString();
|
|
|
|
qDebug() << "[TDLibReceiver] TD Lib version detected: " << detectedVersion;
|
|
|
|
emit versionDetected(detectedVersion);
|
2020-08-13 00:51:09 +03:00
|
|
|
} else {
|
|
|
|
QVariant currentValue = receivedInformation.value("value").toMap().value("value");
|
|
|
|
qDebug() << "[TDLibReceiver] Option updated: " << currentOption << currentValue;
|
|
|
|
emit optionUpdated(currentOption, currentValue);
|
2020-08-11 00:37:25 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-08-12 11:50:01 +03:00
|
|
|
void TDLibReceiver::processUpdateAuthorizationState(const QVariantMap &receivedInformation)
|
2020-08-11 00:37:25 +03:00
|
|
|
{
|
|
|
|
QString authorizationState = receivedInformation.value("authorization_state").toMap().value("@type").toString();
|
|
|
|
qDebug() << "[TDLibReceiver] Authorization state changed: " << authorizationState;
|
|
|
|
emit authorizationStateChanged(authorizationState);
|
|
|
|
}
|
2020-08-13 01:20:28 +03:00
|
|
|
|
|
|
|
void TDLibReceiver::processUpdateConnectionState(const QVariantMap &receivedInformation)
|
|
|
|
{
|
|
|
|
QString connectionState = receivedInformation.value("state").toMap().value("@type").toString();
|
|
|
|
qDebug() << "[TDLibReceiver] Connection state changed: " << connectionState;
|
|
|
|
emit connectionStateChanged(connectionState);
|
|
|
|
}
|