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

View File

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

View File

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

View File

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