Delete remaining network replies and local redirct server in destructor

This commit is contained in:
Jonas Kvinge
2020-05-12 21:28:42 +02:00
parent 4bfad9dad8
commit e35501ff0a
46 changed files with 424 additions and 30 deletions

View File

@@ -57,6 +57,12 @@ AcoustidClient::AcoustidClient(QObject *parent)
network_(new NetworkAccessManager(this)),
timeouts_(new NetworkTimeouts(kDefaultTimeout, this)) {}
AcoustidClient::~AcoustidClient() {
CancelAll();
}
void AcoustidClient::SetTimeout(const int msec) { timeouts_->SetTimeout(msec); }
void AcoustidClient::Start(const int id, const QString &fingerprint, int duration_msec) {
@@ -82,10 +88,13 @@ void AcoustidClient::Start(const int id, const QString &fingerprint, int duratio
requests_[id] = reply;
timeouts_->AddReply(reply);
}
void AcoustidClient::Cancel(const int id) {
if (requests_.contains(id)) delete requests_.take(id);
}
void AcoustidClient::CancelAll() {
@@ -113,6 +122,7 @@ struct IdSource {
void AcoustidClient::RequestFinished(QNetworkReply *reply, const int request_id) {
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
requests_.remove(request_id);

View File

@@ -43,6 +43,7 @@ class AcoustidClient : public QObject {
public:
explicit AcoustidClient(QObject *parent = nullptr);
~AcoustidClient();
// Network requests will be aborted after this interval.
void SetTimeout(const int msec);
@@ -70,6 +71,7 @@ class AcoustidClient : public QObject {
QNetworkAccessManager *network_;
NetworkTimeouts *timeouts_;
QMap<int, QNetworkReply*> requests_;
};
#endif // ACOUSTIDCLIENT_H

View File

@@ -69,6 +69,12 @@ MusicBrainzClient::MusicBrainzClient(QObject *parent, QNetworkAccessManager *net
}
MusicBrainzClient::~MusicBrainzClient() {
CancelAll();
}
QByteArray MusicBrainzClient::GetReplyData(QNetworkReply *reply, QString &error) {
QByteArray data;
@@ -114,7 +120,7 @@ void MusicBrainzClient::Cancel(int id) {
while (!requests_.isEmpty() && requests_.contains(id)) {
QNetworkReply *reply = requests_.take(id);
disconnect(reply, 0, this, 0);
disconnect(reply, nullptr, this, nullptr);
if (reply->isRunning()) reply->abort();
reply->deleteLater();
}
@@ -187,6 +193,7 @@ void MusicBrainzClient::FlushRequests() {
void MusicBrainzClient::RequestFinished(QNetworkReply *reply, const int id, const int request_number) {
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
const int nb_removed = requests_.remove(id, reply);
@@ -232,6 +239,7 @@ void MusicBrainzClient::RequestFinished(QNetworkReply *reply, const int id, cons
void MusicBrainzClient::DiscIdRequestFinished(const QString &discid, QNetworkReply *reply) {
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
ResultList ret;

View File

@@ -51,6 +51,7 @@ class MusicBrainzClient : public QObject {
// The second argument allows for specifying a custom network access manager.
// It is used in tests. The ownership of network is not transferred.
explicit MusicBrainzClient(QObject *parent = nullptr, QNetworkAccessManager *network = nullptr);
~MusicBrainzClient();
struct Result {
Result() : duration_msec_(0), track_(0), year_(-1) {}