Subsonic: Add support for using album id to retrieve album covers

This commit is contained in:
Leandro Matheus
2025-01-04 17:11:09 -03:00
committed by Jonas Kvinge
parent 8302a95bc1
commit 24af1be666
36 changed files with 149 additions and 4 deletions

View File

@@ -69,6 +69,7 @@ class SubsonicBaseRequest : public QObject {
bool http2() const { return service_->http2(); }
bool verify_certificate() const { return service_->verify_certificate(); }
bool download_album_covers() const { return service_->download_album_covers(); }
bool use_album_id_for_album_covers() const { return service_->use_album_id_for_album_covers(); }
private Q_SLOTS:
void HandleSSLErrors(const QList<QSslError> &ssl_errors);

View File

@@ -606,12 +606,20 @@ QString SubsonicRequest::ParseSong(Song &song, const QJsonObject &json_obj, cons
if (json_obj.contains("genre"_L1)) genre = json_obj["genre"_L1].toString();
QString cover_id;
if (json_obj.contains("coverArt"_L1)) {
if (json_obj["coverArt"_L1].type() == QJsonValue::String) {
cover_id = json_obj["coverArt"_L1].toString();
if (use_album_id_for_album_covers()) {
cover_id = album_id;
}
else {
if (json_obj.contains("coverArt"_L1)) {
if (json_obj["coverArt"_L1].type() == QJsonValue::String) {
cover_id = json_obj["coverArt"_L1].toString();
}
else {
cover_id = QString::number(json_obj["coverArt"_L1].toInt());
}
}
else {
cover_id = QString::number(json_obj["coverArt"_L1].toInt());
cover_id = song_id;
}
}

View File

@@ -122,6 +122,7 @@ class SubsonicRequest : public SubsonicBaseRequest {
QHash<QString, Request> album_songs_requests_pending_;
QMultiMap<QString, QString> album_covers_requests_sent_;
QMultiMap<QString, QUrl> album_covers_retrieved_;
int albums_requests_active_;

View File

@@ -82,6 +82,7 @@ SubsonicService::SubsonicService(const SharedPtr<TaskManager> task_manager,
http2_(false),
verify_certificate_(false),
download_album_covers_(true),
use_album_id_for_album_covers_(false),
auth_method_(SubsonicSettings::AuthMethod::MD5),
ping_redirects_(0) {
@@ -128,6 +129,7 @@ void SubsonicService::ReloadSettings() {
http2_ = s.value(SubsonicSettings::kHTTP2, false).toBool();
verify_certificate_ = s.value(SubsonicSettings::kVerifyCertificate, false).toBool();
download_album_covers_ = s.value(SubsonicSettings::kDownloadAlbumCovers, true).toBool();
use_album_id_for_album_covers_ = s.value(SubsonicSettings::kUseAlbumIdForAlbumCovers, false).toBool();
auth_method_ = static_cast<SubsonicSettings::AuthMethod>(s.value(SubsonicSettings::kAuthMethod, static_cast<int>(SubsonicSettings::AuthMethod::MD5)).toInt());
s.endGroup();

View File

@@ -80,6 +80,7 @@ class SubsonicService : public StreamingService {
bool http2() const { return http2_; }
bool verify_certificate() const { return verify_certificate_; }
bool download_album_covers() const { return download_album_covers_; }
bool use_album_id_for_album_covers() const { return use_album_id_for_album_covers_; }
SubsonicSettings::AuthMethod auth_method() const { return auth_method_; }
SharedPtr<CollectionBackend> collection_backend() const { return collection_backend_; }
@@ -123,6 +124,7 @@ class SubsonicService : public StreamingService {
bool http2_;
bool verify_certificate_;
bool download_album_covers_;
bool use_album_id_for_album_covers_;
SubsonicSettings::AuthMethod auth_method_;
QStringList errors_;