mirror of
https://github.com/clementine-player/Clementine
synced 2025-02-03 12:47:31 +01:00
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)
|
||||
: 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));
|
||||
}
|
||||
|
||||
@ -117,7 +122,15 @@ QNetworkReply* NetworkAccessManager::createRequest(
|
||||
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)
|
||||
|
@ -51,10 +51,12 @@ class NetworkAccessManager : public QNetworkAccessManager {
|
||||
|
||||
public:
|
||||
explicit NetworkAccessManager(QObject* parent = nullptr);
|
||||
explicit NetworkAccessManager(int timeout, QObject* parent = nullptr);
|
||||
|
||||
protected:
|
||||
QNetworkReply* createRequest(Operation op, const QNetworkRequest& request,
|
||||
QIODevice* outgoingData);
|
||||
int timeout_msec_;
|
||||
};
|
||||
|
||||
class RedirectFollower : public QObject {
|
||||
|
Loading…
x
Reference in New Issue
Block a user