Fix crash in internet services

This commit is contained in:
Jonas Kvinge
2019-08-05 18:38:27 +02:00
parent be1e14df81
commit c6e08e0039
13 changed files with 76 additions and 53 deletions

View File

@@ -46,16 +46,7 @@ SubsonicBaseRequest::SubsonicBaseRequest(SubsonicService *service, NetworkAccess
network_(network)
{}
SubsonicBaseRequest::~SubsonicBaseRequest() {
while (!replies_.isEmpty()) {
QNetworkReply *reply = replies_.takeFirst();
disconnect(reply, 0, this, 0);
if (reply->isRunning()) reply->abort();
reply->deleteLater();
}
}
SubsonicBaseRequest::~SubsonicBaseRequest() {}
QUrl SubsonicBaseRequest::CreateUrl(const QString &ressource_name, const QList<Param> &params_provided) {
@@ -101,7 +92,6 @@ QNetworkReply *SubsonicBaseRequest::CreateGetRequest(const QString &ressource_na
QNetworkReply *reply = network_->get(req);
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(HandleSSLErrors(QList<QSslError>)));
replies_ << reply;
//qLog(Debug) << "Subsonic: Sending request" << url;
@@ -119,11 +109,6 @@ void SubsonicBaseRequest::HandleSSLErrors(QList<QSslError> ssl_errors) {
QByteArray SubsonicBaseRequest::GetReplyData(QNetworkReply *reply) {
if (replies_.contains(reply)) {
replies_.removeAll(reply);
reply->deleteLater();
}
QByteArray data;
if (reply->error() == QNetworkReply::NoError && reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200) {

View File

@@ -81,7 +81,6 @@ class SubsonicBaseRequest : public QObject {
SubsonicService *service_;
NetworkAccessManager *network_;
QList<QNetworkReply*> replies_;
};

View File

@@ -69,6 +69,13 @@ SubsonicRequest::SubsonicRequest(SubsonicService *service, SubsonicUrlHandler *u
SubsonicRequest::~SubsonicRequest() {
while (!replies_.isEmpty()) {
QNetworkReply *reply = replies_.takeFirst();
disconnect(reply, 0, this, 0);
if (reply->isRunning()) reply->abort();
reply->deleteLater();
}
while (!album_cover_replies_.isEmpty()) {
QNetworkReply *reply = album_cover_replies_.takeFirst();
disconnect(reply, 0, this, 0);
@@ -99,6 +106,7 @@ void SubsonicRequest::Reset() {
songs_.clear();
errors_.clear();
no_results_ = false;
replies_.clear();
album_cover_replies_.clear();
}
@@ -134,6 +142,7 @@ void SubsonicRequest::FlushAlbumsRequests() {
QNetworkReply *reply;
reply = CreateGetRequest(QString("getAlbumList2"), params);
replies_ << reply;
NewClosure(reply, SIGNAL(finished()), this, SLOT(AlbumsReplyReceived(QNetworkReply*, int)), reply, request.offset);
}
@@ -142,6 +151,10 @@ void SubsonicRequest::FlushAlbumsRequests() {
void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset_requested) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
reply->deleteLater();
--albums_requests_active_;
QByteArray data = GetReplyData(reply);
@@ -318,6 +331,7 @@ void SubsonicRequest::FlushAlbumSongsRequests() {
++album_songs_requests_active_;
ParamList params = ParamList() << Param("id", QString::number(request.album_id));
QNetworkReply *reply = CreateGetRequest(QString("getAlbum"), params);
replies_ << reply;
NewClosure(reply, SIGNAL(finished()), this, SLOT(AlbumSongsReplyReceived(QNetworkReply*, const qint64, const qint64, const QString&)), reply, request.artist_id, request.album_id, request.album_artist);
}
@@ -326,6 +340,10 @@ void SubsonicRequest::FlushAlbumSongsRequests() {
void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const qint64 artist_id, const qint64 album_id, const QString &album_artist) {
if (!replies_.contains(reply)) return;
replies_.removeAll(reply);
reply->deleteLater();
--album_songs_requests_active_;
++album_songs_received_;
@@ -719,4 +737,3 @@ void SubsonicRequest::Warn(const QString &error, const QVariant &debug) {
if (debug.isValid()) qLog(Debug) << debug;
}

View File

@@ -138,6 +138,7 @@ class SubsonicRequest : public SubsonicBaseRequest {
SongList songs_;
QStringList errors_;
bool no_results_;
QList<QNetworkReply*> replies_;
QList<QNetworkReply*> album_cover_replies_;
};