From fb756b3035575666d804ae1dc61e2fe229a1c033 Mon Sep 17 00:00:00 2001 From: darrell-k Date: Tue, 31 Mar 2026 18:15:12 +0100 Subject: [PATCH 1/2] Use getUserFavoriteIds instead of getUserFavorites for favorites management Signed-off-by: darrell-k --- API.pm | 14 ++++++++++++++ Plugin.pm | 20 ++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/API.pm b/API.pm index c7823d0..aaf150f 100644 --- a/API.pm +++ b/API.pm @@ -400,6 +400,20 @@ sub getUserFavorites { }); } +sub getUserFavoriteIds { + my ($self, $cb, $force) = @_; + + $self->_get('favorite/getUserFavoriteIds', sub { + my ($favoriteIds) = @_; + + $cb->($favoriteIds); + },{ + _ttl => QOBUZ_USER_DATA_EXPIRY, + _user_cache => 1, + _use_token => 1, + }); +} + sub createFavorite { my ($self, $cb, $args) = @_; diff --git a/Plugin.pm b/Plugin.pm index 20b9068..b7c3231 100644 --- a/Plugin.pm +++ b/Plugin.pm @@ -754,10 +754,10 @@ sub QobuzArtist { }], }; - $api->getUserFavorites(sub { + $api->getUserFavoriteIds(sub { my $favorites = shift; my $artistId = $artist->{id}; - my $isFavorite = ($favorites && $favorites->{artists}) ? grep { $_->{id} eq $artistId } @{$favorites->{artists}->{items}} : 0; + my $isFavorite = ($favorites && $favorites->{artists}) ? grep { $_ eq $artistId } @{$favorites->{artists}} : 0; push @$items, { name => cstring($client, $isFavorite ? 'PLUGIN_QOBUZ_REMOVE_FAVORITE_ARTIST' : 'PLUGIN_QOBUZ_ADD_FAVORITE_ARTIST', $artist->{name}), @@ -992,13 +992,13 @@ sub QobuzUserFavorites { sub QobuzManageFavorites { my ($client, $cb, $params, $args) = @_; - getAPIHandler($client)->getUserFavorites(sub { + getAPIHandler($client)->getUserFavoriteIds(sub { my $favorites = shift; my $items = []; if ( (my $artist = $args->{artist}) && (my $artistId = $args->{artistId}) ) { - my $isFavorite = grep { $_->{id} eq $artistId } @{$favorites->{artists}->{items}}; + my $isFavorite = grep { $_ eq $artistId } @{$favorites->{artists}}; push @$items, { name => cstring($client, $isFavorite ? 'PLUGIN_QOBUZ_REMOVE_FAVORITE_ARTIST' : 'PLUGIN_QOBUZ_ADD_FAVORITE_ARTIST', $artist), @@ -1011,7 +1011,7 @@ sub QobuzManageFavorites { } if ( (my $album = $args->{album}) && (my $albumId = $args->{albumId}) ) { - my $isFavorite = grep { $_->{id} eq $albumId } @{$favorites->{albums}->{items}}; + my $isFavorite = grep { $_ eq $albumId } @{$favorites->{albums}}; push @$items, { name => cstring($client, $isFavorite ? 'PLUGIN_QOBUZ_REMOVE_FAVORITE_RELEASE' : 'PLUGIN_QOBUZ_ADD_FAVORITE_RELEASE', $album), @@ -1024,7 +1024,7 @@ sub QobuzManageFavorites { } if ( (my $title = $args->{title}) && (my $trackId = $args->{trackId}) ) { - my $isFavorite = grep { $_->{id} eq $trackId } @{$favorites->{tracks}->{items}}; + my $isFavorite = grep { $_ eq $trackId } @{$favorites->{tracks}}; push @$items, { name => cstring($client, $isFavorite ? 'PLUGIN_QOBUZ_REMOVE_FAVORITE_TRACK' : 'PLUGIN_QOBUZ_ADD_FAVORITE_TRACK', $title), @@ -1172,9 +1172,9 @@ sub QobuzGetTracks { if (!$album) { # the album does not exist in the Qobuz library $log->warn("Get album ($albumId) failed"); - $api->getUserFavorites(sub { + $api->getUserFavoriteIds(sub { my $favorites = shift; - my $isFavorite = ($favorites && $favorites->{albums}) ? grep { $_->{id} eq $albumId } @{$favorites->{albums}->{items}} : 0; + my $isFavorite = ($favorites && $favorites->{albums}) ? grep { $_ eq $albumId } @{$favorites->{albums}} : 0; push @$items, { name => cstring($client, 'PLUGIN_QOBUZ_ALBUM_NOT_FOUND'), @@ -1448,9 +1448,9 @@ sub QobuzGetTracks { } } - $api->getUserFavorites(sub { + $api->getUserFavoriteIds(sub { my $favorites = shift; - my $isFavorite = ($favorites && $favorites->{albums}) ? grep { $_->{id} eq $albumId } @{$favorites->{albums}->{items}} : 0; + my $isFavorite = ($favorites && $favorites->{albums}) ? grep { $_ eq $albumId } @{$favorites->{albums}} : 0; push @$items, { name => cstring($client, $isFavorite ? 'PLUGIN_QOBUZ_REMOVE_FAVORITE_RELEASE' : 'PLUGIN_QOBUZ_ADD_FAVORITE_RELEASE', $album->{title}), From 5bef435d8227dcdf90d58559903ac2c6d695407a Mon Sep 17 00:00:00 2001 From: darrell-k Date: Tue, 31 Mar 2026 20:18:48 +0100 Subject: [PATCH 2/2] use favorite/status API when appropriate Signed-off-by: darrell-k --- API.pm | 28 ++++++++++++++++++++++++++-- Plugin.pm | 27 ++++++++++++++++----------- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/API.pm b/API.pm index aaf150f..8374fd2 100644 --- a/API.pm +++ b/API.pm @@ -411,9 +411,25 @@ sub getUserFavoriteIds { _ttl => QOBUZ_USER_DATA_EXPIRY, _user_cache => 1, _use_token => 1, + _wipecache => $force, }); } +sub getUserFavoriteStatus { + my ($self, $cb, $args, $force) = @_; + + $args->{_ttl} = QOBUZ_USER_DATA_EXPIRY; + $args->{_user_cache} = 1; + $args->{_use_token} = 1; + $args->{_wipecache} => $force; + + $self->_get('favorite/status', sub { + my ($favoriteStatus) = @_; + + $cb->($favoriteStatus); + }, $args); +} + sub createFavorite { my ($self, $cb, $args) = @_; @@ -422,7 +438,11 @@ sub createFavorite { $self->_get('favorite/create', sub { $cb->(shift); - $self->getUserFavorites(sub{}, 'refresh') + $self->getUserFavorites(sub{}, 'refresh'); + $self->getUserFavoriteIds(sub{}, 'refresh'); + $self->getUserFavoriteStatus(sub{}, { type => 'album', item_id => $args->{album_ids} }, 'refresh') if $args->{album_ids}; + $self->getUserFavoriteStatus(sub{}, { type => 'artist', item_id => $args->{artist_ids} }, 'refresh') if $args->{artist_ids}; + $self->getUserFavoriteStatus(sub{}, { type => 'track', item_id => $args->{track_ids} }, 'refresh') if $args->{track_ids}; }, $args); } @@ -434,7 +454,11 @@ sub deleteFavorite { $self->_get('favorite/delete', sub { $cb->(shift); - $self->getUserFavorites(sub{}, 'refresh') + $self->getUserFavorites(sub{}, 'refresh'); + $self->getUserFavoriteIds(sub{}, 'refresh'); + $self->getUserFavoriteStatus(sub{}, { type => 'album', item_id => $args->{album_ids} }, 'refresh') if $args->{album_ids}; + $self->getUserFavoriteStatus(sub{}, { type => 'artist', item_id => $args->{artist_ids} }, 'refresh') if $args->{artist_ids}; + $self->getUserFavoriteStatus(sub{}, { type => 'track', item_id => $args->{track_ids} }, 'refresh') if $args->{track_ids}; }, $args); } diff --git a/Plugin.pm b/Plugin.pm index b7c3231..b316207 100644 --- a/Plugin.pm +++ b/Plugin.pm @@ -754,10 +754,8 @@ sub QobuzArtist { }], }; - $api->getUserFavoriteIds(sub { - my $favorites = shift; - my $artistId = $artist->{id}; - my $isFavorite = ($favorites && $favorites->{artists}) ? grep { $_ eq $artistId } @{$favorites->{artists}} : 0; + $api->getUserFavoriteStatus(sub { + my $isFavorite = shift->{status}; push @$items, { name => cstring($client, $isFavorite ? 'PLUGIN_QOBUZ_REMOVE_FAVORITE_ARTIST' : 'PLUGIN_QOBUZ_ADD_FAVORITE_ARTIST', $artist->{name}), @@ -772,6 +770,9 @@ sub QobuzArtist { $cb->({ items => $items }); + }, { + type => 'artist', + item_id => $artist->{id}, }); }, $args->{artistId}); } @@ -1172,9 +1173,8 @@ sub QobuzGetTracks { if (!$album) { # the album does not exist in the Qobuz library $log->warn("Get album ($albumId) failed"); - $api->getUserFavoriteIds(sub { - my $favorites = shift; - my $isFavorite = ($favorites && $favorites->{albums}) ? grep { $_ eq $albumId } @{$favorites->{albums}} : 0; + $api->getUserFavoriteStatus(sub { + my $isFavorite = shift->{status}; push @$items, { name => cstring($client, 'PLUGIN_QOBUZ_ALBUM_NOT_FOUND'), @@ -1196,7 +1196,10 @@ sub QobuzGetTracks { $cb->({ items => $items, }, @_ ); - }); + }, { + type => 'album', + item_id => $albumId, + }); return; } elsif (!$album->{streamable} && !$prefs->get('playSamples')) { # the album is not streamable @@ -1448,9 +1451,8 @@ sub QobuzGetTracks { } } - $api->getUserFavoriteIds(sub { - my $favorites = shift; - my $isFavorite = ($favorites && $favorites->{albums}) ? grep { $_ eq $albumId } @{$favorites->{albums}} : 0; + $api->getUserFavoriteStatus(sub { + my $isFavorite = shift->{status}; push @$items, { name => cstring($client, $isFavorite ? 'PLUGIN_QOBUZ_REMOVE_FAVORITE_RELEASE' : 'PLUGIN_QOBUZ_ADD_FAVORITE_RELEASE', $album->{title}), @@ -1549,6 +1551,9 @@ sub QobuzGetTracks { $cb->({ items => $items, }, @_ ); + }, { + type => 'album', + item_id => $albumId, }); }, $albumId); }