Fix crash in internet services
This commit is contained in:
@@ -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> ¶ms_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) {
|
||||
|
||||
@@ -81,7 +81,6 @@ class SubsonicBaseRequest : public QObject {
|
||||
|
||||
SubsonicService *service_;
|
||||
NetworkAccessManager *network_;
|
||||
QList<QNetworkReply*> replies_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -138,6 +138,7 @@ class SubsonicRequest : public SubsonicBaseRequest {
|
||||
SongList songs_;
|
||||
QStringList errors_;
|
||||
bool no_results_;
|
||||
QList<QNetworkReply*> replies_;
|
||||
QList<QNetworkReply*> album_cover_replies_;
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user