Save power by adding delay between network requests in background.

This commit is contained in:
Mikhail Barashkov 2024-07-02 11:01:39 +03:00
parent fd7563bc88
commit 15caa6f3c6
4 changed files with 20 additions and 1 deletions

View file

@ -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");
}

View file

@ -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<QString, Handler> handlers;
void *tdLibClient;
bool isActive;
bool powerSavingMode;
private:
static const QVariantList cleanupList(const QVariantList& list, bool *updated = Q_NULLPTR);

View file

@ -22,6 +22,7 @@
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QGuiApplication>
#include <QLocale>
#include <QProcess>
#include <QSysInfo>
@ -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();
@ -2204,6 +2205,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);

View file

@ -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);