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

@@ -83,7 +83,22 @@ ListenBrainzScrobbler::ListenBrainzScrobbler(Application *app, QObject *parent)
}
ListenBrainzScrobbler::~ListenBrainzScrobbler() {}
ListenBrainzScrobbler::~ListenBrainzScrobbler() {
while (!replies_.isEmpty()) {
QNetworkReply *reply = replies_.takeFirst();
disconnect(reply, nullptr, this, nullptr);
reply->abort();
reply->deleteLater();
}
if (server_) {
disconnect(server_, nullptr, this, nullptr);
if (server_->isListening()) server_->close();
server_->deleteLater();
}
}
void ListenBrainzScrobbler::ReloadSettings() {
@@ -231,12 +246,16 @@ void ListenBrainzScrobbler::RequestAccessToken(const QUrl &redirect_url, const Q
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
QByteArray query = url_query.toString(QUrl::FullyEncoded).toUtf8();
QNetworkReply *reply = network_->post(req, query);
replies_ << reply;
connect(reply, &QNetworkReply::finished, [=] { AuthenticateReplyFinished(reply); });
}
void ListenBrainzScrobbler::AuthenticateReplyFinished(QNetworkReply *reply) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
QByteArray data;
@@ -330,6 +349,7 @@ QNetworkReply *ListenBrainzScrobbler::CreateRequest(const QUrl &url, const QJson
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
req.setRawHeader("Authorization", QString("Token %1").arg(user_token_).toUtf8());
QNetworkReply *reply = network_->post(req, json_doc.toJson());
replies_ << reply;
//qLog(Debug) << "ListenBrainz: Sending request" << json_doc.toJson();
@@ -433,6 +453,9 @@ void ListenBrainzScrobbler::UpdateNowPlaying(const Song &song) {
void ListenBrainzScrobbler::UpdateNowPlayingRequestFinished(QNetworkReply *reply) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
QByteArray data = GetReplyData(reply);
@@ -555,6 +578,9 @@ void ListenBrainzScrobbler::Submit() {
void ListenBrainzScrobbler::ScrobbleRequestFinished(QNetworkReply *reply, QList<quint64> list) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
QByteArray data = GetReplyData(reply);

View File

@@ -117,6 +117,8 @@ class ListenBrainzScrobbler : public ScrobblerService {
quint64 timestamp_;
QTimer refresh_login_timer_;
QList<QNetworkReply*> replies_;
};
#endif // LISTENBRAINZSCROBBLER_H

View File

@@ -80,7 +80,22 @@ ScrobblingAPI20::ScrobblingAPI20(const QString &name, const QString &settings_gr
scrobbled_(false),
timestamp_(0) {}
ScrobblingAPI20::~ScrobblingAPI20() {}
ScrobblingAPI20::~ScrobblingAPI20() {
while (!replies_.isEmpty()) {
QNetworkReply *reply = replies_.takeFirst();
disconnect(reply, nullptr, this, nullptr);
reply->abort();
reply->deleteLater();
}
if (server_) {
disconnect(server_, nullptr, this, nullptr);
if (server_->isListening()) server_->close();
server_->deleteLater();
}
}
void ScrobblingAPI20::ReloadSettings() {
@@ -232,12 +247,16 @@ void ScrobblingAPI20::RequestSession(const QString &token) {
QNetworkRequest req(session_url);
req.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
QNetworkReply *reply = network()->get(req);
replies_ << reply;
connect(reply, &QNetworkReply::finished, [=] { AuthenticateReplyFinished(reply); });
}
void ScrobblingAPI20::AuthenticateReplyFinished(QNetworkReply *reply) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
QByteArray data;
@@ -362,6 +381,7 @@ QNetworkReply *ScrobblingAPI20::CreateRequest(const ParamList &request_params) {
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
QByteArray query = url_query.toString(QUrl::FullyEncoded).toUtf8();
QNetworkReply *reply = network()->post(req, query);
replies_ << reply;
//qLog(Debug) << name_ << "Sending request" << query;
@@ -454,6 +474,9 @@ void ScrobblingAPI20::UpdateNowPlaying(const Song &song) {
void ScrobblingAPI20::UpdateNowPlayingRequestFinished(QNetworkReply *reply) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
QByteArray data = GetReplyData(reply);
@@ -573,6 +596,9 @@ void ScrobblingAPI20::Submit() {
void ScrobblingAPI20::ScrobbleRequestFinished(QNetworkReply *reply, QList<quint64> list) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
QByteArray data = GetReplyData(reply);
@@ -750,6 +776,9 @@ void ScrobblingAPI20::SendSingleScrobble(ScrobblerCacheItemPtr item) {
void ScrobblingAPI20::SingleScrobbleRequestFinished(QNetworkReply *reply, quint64 timestamp) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
ScrobblerCacheItemPtr item = cache()->Get(timestamp);
@@ -898,6 +927,9 @@ void ScrobblingAPI20::Love() {
void ScrobblingAPI20::LoveRequestFinished(QNetworkReply *reply) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
disconnect(reply, nullptr, this, nullptr);
reply->deleteLater();
QByteArray data = GetReplyData(reply);

View File

@@ -157,6 +157,8 @@ class ScrobblingAPI20 : public ScrobblerService {
bool scrobbled_;
quint64 timestamp_;
QList<QNetworkReply*> replies_;
};
#endif // SCROBBLINGAPI20_H