Merge pull request #6480 from jbroadus/gpodder-timeout

Add timeouts for gpodder requests.
This commit is contained in:
John Maguire 2019-12-26 21:42:23 +00:00 committed by GitHub
commit 922e10bc48
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 3 deletions

View File

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

View File

@ -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 {

View File

@ -38,11 +38,12 @@ const char* GPodderSync::kSettingsGroup = "Podcasts";
const int GPodderSync::kFlushUpdateQueueDelay = 30 * kMsecPerSec; // 30 seconds const int GPodderSync::kFlushUpdateQueueDelay = 30 * kMsecPerSec; // 30 seconds
const int GPodderSync::kGetUpdatesInterval = const int GPodderSync::kGetUpdatesInterval =
30 * 60 * kMsecPerSec; // 30 minutes 30 * 60 * kMsecPerSec; // 30 minutes
const int GPodderSync::kRequestTimeout = 30 * kMsecPerSec; // 30 seconds
GPodderSync::GPodderSync(Application* app, QObject* parent) GPodderSync::GPodderSync(Application* app, QObject* parent)
: QObject(parent), : QObject(parent),
app_(app), app_(app),
network_(new NetworkAccessManager(this)), network_(new NetworkAccessManager(kRequestTimeout, this)),
backend_(app_->podcast_backend()), backend_(app_->podcast_backend()),
loader_(new PodcastUrlLoader(this)), loader_(new PodcastUrlLoader(this)),
get_updates_timer_(new QTimer(this)), get_updates_timer_(new QTimer(this)),

View File

@ -51,6 +51,7 @@ class GPodderSync : public QObject {
static const char* kSettingsGroup; static const char* kSettingsGroup;
static const int kFlushUpdateQueueDelay; static const int kFlushUpdateQueueDelay;
static const int kGetUpdatesInterval; static const int kGetUpdatesInterval;
static const int kRequestTimeout;
static QString DefaultDeviceName(); static QString DefaultDeviceName();
static QString DeviceId(); static QString DeviceId();