added queries
Some checks failed
buildbot/AndroidBuilder_v8Qt6 Build finished.
buildbot/DocsGenerator Build finished.
buildbot/LinuxCMakeBuilderQt6 Build finished.

This commit is contained in:
Andrei Yankovich 2024-12-14 14:50:47 +01:00
parent ea37b442e6
commit 5390532c5d
2 changed files with 90 additions and 21 deletions

View File

@ -92,9 +92,55 @@ QNetworkReply* IBot::sendRquestImpl(const QSharedPointer<iRequest> &rquest) {
return networkReplay;
}
int IBot::reqestLimitPerSecond() const {
return _reqestLimitPerSecond;
}
void IBot::setReqestLimitPerSecond(int newReqestLimitPerSecond) {
_reqestLimitPerSecond = newReqestLimitPerSecond;
}
QFuture<QByteArray>
IBot::sendRequest(const QSharedPointer<iRequest> &rquest) {
auto&& responce = QSharedPointer<QPromise<QByteArray>>::create();
responce->start();
_requestQueue.push_back(RequestData{rquest, "", responce});
return responce->future();
}
QFuture<QByteArray>
IBot::sendRequest(const QSharedPointer<iRequest> &rquest,
const QString &pathToResult) {
auto&& responce = QSharedPointer<QPromise<QByteArray>>::create();
responce->start();
_requestQueue.push_back(RequestData{rquest, pathToResult, responce});
return responce->future();
}
void IBot::markUpdateAsProcessed(const QSharedPointer<iUpdate> &message) {
_notProcessedUpdates.remove(message->updateId());
}
void IBot::markUpdateAsUnprocessed(const QSharedPointer<iUpdate> &message) {
return markUpdateAsUnprocessed(message->updateId());
}
void IBot::markUpdateAsUnprocessed(unsigned long long messageID) {
_processed.remove(messageID);
}
QString IBot::defaultFileStorageLocation() const {
return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
}
void IBot::handleIncomeNewUpdate(const QSharedPointer<iUpdate> & message) {
emit sigReceiveUpdate(message);
}
QFuture<QByteArray> IBot::sendRequestPrivate(const QSharedPointer<iRequest> &rquest) {
QNetworkReply* networkReplay = sendRquestImpl(rquest);
if (!networkReplay) {
@ -128,7 +174,8 @@ IBot::sendRequest(const QSharedPointer<iRequest> &rquest) {
return promise->future();
}
QFuture<QByteArray> IBot::sendRequest(const QSharedPointer<iRequest> &rquest, const QString &pathToResult) {
QFuture<QByteArray> IBot::sendRequestPrivate(const QSharedPointer<iRequest> &rquest,
const QString &pathToResult) {
auto&& file = QSharedPointer<QFile>::create(pathToResult);
if (!file->open(QIODeviceBase::WriteOnly | QIODevice::Truncate)) {
@ -176,26 +223,6 @@ QFuture<QByteArray> IBot::sendRequest(const QSharedPointer<iRequest> &rquest, co
return promise->future();
}
void IBot::markUpdateAsProcessed(const QSharedPointer<iUpdate> &message) {
_notProcessedUpdates.remove(message->updateId());
}
void IBot::markUpdateAsUnprocessed(const QSharedPointer<iUpdate> &message) {
return markUpdateAsUnprocessed(message->updateId());
}
void IBot::markUpdateAsUnprocessed(unsigned long long messageID) {
_processed.remove(messageID);
}
QString IBot::defaultFileStorageLocation() const {
return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
}
void IBot::handleIncomeNewUpdate(const QSharedPointer<iUpdate> & message) {
emit sigReceiveUpdate(message);
}
QSet<unsigned long long> IBot::processed() const {
return _processed;
}

View File

@ -50,6 +50,27 @@ public:
Local
};
/**
* @brief The RequestData class is simple wrapper of request object with path of responce.
* If Path of responce is empty then responce will saved in RAM.
*/
struct RequestData {
/**
* @brief request saved request object.
*/
QSharedPointer<iRequest> request;
/**
* @brief responceFilePath path to responce.
*/
QString responceFilePath = "";
/**
* @brief responce This is promise to responce of this requests that will sets back.
*/
QSharedPointer<QPromise<QByteArray>> responce;
};
/**
* @brief login This method get bae information of the bot from remote server.
* @param token This is token value for login
@ -145,6 +166,18 @@ public:
*/
virtual void setProcessed(const QSet<unsigned long long> &newProcessed);
/**
* @brief reqestLimitPerSecond this is request performence limitation. by default is 20 requests per second
* @return
*/
int reqestLimitPerSecond() const;
/**
* @brief setReqestLimitPerSecond this method sets new limitation of bot performance.
* @param newReqestLimitPerSecond this is a new value of performance.
*/
void setReqestLimitPerSecond(int newReqestLimitPerSecond);
protected:
/**
@ -254,6 +287,13 @@ signals:
void sigStopRequire();
private:
QFuture<QByteArray>
sendRequestPrivate(const QSharedPointer<iRequest>& rquest);
QFuture<QByteArray>
sendRequestPrivate(const QSharedPointer<iRequest>& rquest,
const QString& pathToResult);
QNetworkReply *sendRquestImpl(const QSharedPointer<iRequest> &rquest);
QByteArray _token;
@ -261,6 +301,8 @@ private:
QMap<unsigned long long, QSharedPointer<iUpdate>> _notProcessedUpdates;
QSet<unsigned long long> _processed;
QNetworkAccessManager *_manager = nullptr;
int _reqestLimitPerSecond = 20;
QList<RequestData> _requestQueue;
};