diff --git a/src/tdlibreceiver.cpp b/src/tdlibreceiver.cpp index 44034c7..fc6d7bd 100644 --- a/src/tdlibreceiver.cpp +++ b/src/tdlibreceiver.cpp @@ -81,6 +81,8 @@ namespace { const QString TYPE_ANIMATED_EMOJI("animatedEmoji"); const QString TYPE_INPUT_MESSAGE_REPLY_TO_MESSAGE("inputMessageReplyToMessage"); const QString TYPE_DRAFT_MESSAGE("draftMessage"); + + const double POWERSAVING_TDLIB_REQUEST_INTERVAL = 100; } static QString getChatPositionOrder(const QVariantMap &position) @@ -191,9 +193,15 @@ void TDLibReceiver::setActive(bool active) } else { LOG("Deactivating receiver loop, this may take a while..."); } + this->powerSavingMode = false; this->isActive = active; } +void TDLibReceiver::setPowerSavingMode(bool powerSavingMode) +{ + this->powerSavingMode = powerSavingMode; +} + void TDLibReceiver::receiverLoop() { LOG("Starting receiver loop"); @@ -205,6 +213,9 @@ void TDLibReceiver::receiverLoop() VERBOSE("Raw result:" << receivedJsonDocument.toJson(QJsonDocument::Indented).constData()); processReceivedDocument(receivedJsonDocument); } + if(this->powerSavingMode) { + msleep(POWERSAVING_TDLIB_REQUEST_INTERVAL); + } } LOG("Stopping receiver loop"); } diff --git a/src/tdlibreceiver.h b/src/tdlibreceiver.h index 33771b6..b235461 100644 --- a/src/tdlibreceiver.h +++ b/src/tdlibreceiver.h @@ -35,6 +35,7 @@ class TDLibReceiver : public QThread public: explicit TDLibReceiver(void *tdLibClient, QObject *parent = nullptr); void setActive(bool active); + void setPowerSavingMode(bool active); signals: void versionDetected(const QString &version); @@ -115,6 +116,7 @@ private: QHash handlers; void *tdLibClient; bool isActive; + bool powerSavingMode; private: static const QVariantList cleanupList(const QVariantList& list, bool *updated = Q_NULLPTR); diff --git a/src/tdlibwrapper.cpp b/src/tdlibwrapper.cpp index c174e47..72b5ba6 100644 --- a/src/tdlibwrapper.cpp +++ b/src/tdlibwrapper.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -102,7 +103,7 @@ TDLibWrapper::TDLibWrapper(AppSettings *settings, MceInterface *mce, QObject *pa connect(this->appSettings, SIGNAL(useOpenWithChanged()), this, SLOT(handleOpenWithChanged())); connect(this->appSettings, SIGNAL(storageOptimizerChanged()), this, SLOT(handleStorageOptimizerChanged())); - + connect(qGuiApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(handleApplicationStateChanged(Qt::ApplicationState))); connect(networkConfigurationManager, SIGNAL(configurationChanged(QNetworkConfiguration)), this, SLOT(handleNetworkConfigurationChanged(QNetworkConfiguration))); this->setLogVerbosityLevel(); @@ -2211,6 +2212,10 @@ void TDLibWrapper::handleGetPageSourceFinished() } } +void TDLibWrapper::handleApplicationStateChanged(Qt::ApplicationState state) { + this->tdLibReceiver->setPowerSavingMode(state != Qt::ApplicationState::ApplicationActive); +} + QVariantMap& TDLibWrapper::fillTdlibParameters(QVariantMap& parameters) { parameters.insert("api_id", TDLIB_API_ID); diff --git a/src/tdlibwrapper.h b/src/tdlibwrapper.h index 12bd604..15fd7e7 100644 --- a/src/tdlibwrapper.h +++ b/src/tdlibwrapper.h @@ -373,6 +373,7 @@ public slots: void handleNetworkConfigurationChanged(const QNetworkConfiguration &config); void handleActiveEmojiReactionsUpdated(const QStringList& emojis); void handleGetPageSourceFinished(); + void handleApplicationStateChanged(Qt::ApplicationState state); private: void setOption(const QString &name, const QString &type, const QVariant &value);