Add a timeout option to NetworkAccessManager.
In most cases, timeouts can be applied to a reply after a request has been made. But some APIs, such as libmygpo-qt, don't always provide access to the reply or provide abort methods. For these cases, add an optional timeout to NetworkAccessManager. If set, create a NetworkTimeouts instance in createRequest and add the reply. Use the reply as the parent so that it is destroyed when the reply is destroyed.
This commit is contained in:
parent
82b185c087
commit
77d5d8bdea
@ -84,7 +84,12 @@ void ThreadSafeNetworkDiskCache::clear() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NetworkAccessManager::NetworkAccessManager(QObject* parent)
|
NetworkAccessManager::NetworkAccessManager(QObject* parent)
|
||||||
: QNetworkAccessManager(parent) {
|
: QNetworkAccessManager(parent), timeout_msec_(0) {
|
||||||
|
setCache(new ThreadSafeNetworkDiskCache(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkAccessManager::NetworkAccessManager(int timeout, QObject* parent)
|
||||||
|
: QNetworkAccessManager(parent), timeout_msec_(timeout) {
|
||||||
setCache(new ThreadSafeNetworkDiskCache(this));
|
setCache(new ThreadSafeNetworkDiskCache(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +122,15 @@ QNetworkReply* NetworkAccessManager::createRequest(
|
|||||||
QNetworkRequest::PreferCache);
|
QNetworkRequest::PreferCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
return QNetworkAccessManager::createRequest(op, new_request, outgoingData);
|
QNetworkReply* reply =
|
||||||
|
QNetworkAccessManager::createRequest(op, new_request, outgoingData);
|
||||||
|
if (timeout_msec_ > 0) {
|
||||||
|
// Since the parent is the reply, this object will be destroyed when the
|
||||||
|
// reply is destroyed.
|
||||||
|
NetworkTimeouts* timeout = new NetworkTimeouts(timeout_msec_, reply);
|
||||||
|
timeout->AddReply(reply);
|
||||||
|
}
|
||||||
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkTimeouts::NetworkTimeouts(int timeout_msec, QObject* parent)
|
NetworkTimeouts::NetworkTimeouts(int timeout_msec, QObject* parent)
|
||||||
|
@ -51,10 +51,12 @@ class NetworkAccessManager : public QNetworkAccessManager {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit NetworkAccessManager(QObject* parent = nullptr);
|
explicit NetworkAccessManager(QObject* parent = nullptr);
|
||||||
|
explicit NetworkAccessManager(int timeout, QObject* parent = nullptr);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QNetworkReply* createRequest(Operation op, const QNetworkRequest& request,
|
QNetworkReply* createRequest(Operation op, const QNetworkRequest& request,
|
||||||
QIODevice* outgoingData);
|
QIODevice* outgoingData);
|
||||||
|
int timeout_msec_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RedirectFollower : public QObject {
|
class RedirectFollower : public QObject {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user