slimserver icon indicating copy to clipboard operation
slimserver copied to clipboard

Favorites drill down setting on server makes favorite deletion impossible using Touch UI

Open darrell-k opened this issue 2 years ago • 6 comments

If the Favorites plugin setting "Local music items behavior" is set to "When you select a favorite contributor, genre or album, drill down to its content" (PLUGIN_FAVORITES_DONT_BROWSEDB_OFF) , a long press on a local album favorite in the Touch UI shows an option "save to favorites" (which does nothing) rather than "delete favorite".

If "Local music items behavior" is set to PLUGIN_FAVORITES_DONT_BROWSEDB_ON, the long-press menu behaves as expected, with a "delete favorite" option.

I can see this in the JSON sent to the player:

                           {
                             actions => {
                                          go => {
                                                  cmd => ["jivefavorites", "add"],
                                                  params => {
                                                        icon => "music/059863fd/cover.png",
                                                        isContextMenu => 1,
                                                        parser => undef,
                                                        title => "All Live and All of the Night",
                                                        type => "audio",
                                                        url => "db:album.title=All%20Live%20and%20All%20of%20the%20Night&contributor.name=The%20Stranglers&libraryTracks.library=-1",
                                                      },
                                                  player => 0,
                                                },
                                        },
                             style   => "item_fav",
                             text    => "Save to Favorites",
                           },

And in the debug log I get this: it looks like having found the album URL, it's constructing a track URL which it then can't find:

[23-10-18 16:11:23.8376] Slim::Plugin::Favorites::OpmlFavorites::findUrl (399) Match db:album.title=All%20Live%20and%20All%20of%20the%20Night&contributor.name=The%20Stranglers at index 5
[23-10-18 16:11:23.8379] Slim::Plugin::Favorites::Plugin::_objectInfoHandler (1085) Item is a favorite [db:album.title=All%20Live%20and%20All%20of%20the%20Night&contributor.name=The%20Stranglers]
[23-10-18 16:11:23.8563] Slim::Plugin::Favorites::OpmlFavorites::findUrl (404) No match for db:album.title=All%20Live%20and%20All%20of%20the%20Night&contributor.name=The%20Stranglers&libraryTracks.library=-1

darrell-k avatar Oct 18 '23 16:10 darrell-k

Heh... thanks for the pointer! A few days ago I was looking into another issue related drilling down to items from Favorites (https://github.com/Logitech/slimserver/issues/918) - and I didn't figure it out quickly. You might actually have pointed me at something.

But anyway, that's another story... You're on 8.4, aren't you? Would you know whether this is a regression?

michaelherger avatar Oct 18 '23 18:10 michaelherger

Yes, 8.4 12th October, so pretty recent. I just fired up 8.3.1 on my laptop and it's the same behaviour.

darrell-k avatar Oct 18 '23 20:10 darrell-k

Ok, so it's not related to my recent work for the Releases items.

BTW: this made me realise that the other issue #918 can't be as absolutely true as it seemed in my earlier test...

mherger avatar Oct 18 '23 20:10 mherger

Here's the call stack at the "No match" point:

[23-10-18 21:14:09.5729] Slim::Plugin::Favorites::OpmlFavorites::findUrl (411) No match for db:album.title=All%20Live%20and%20All%20of%20the%20Night&contributor.name=The%20Stranglers&libraryTracks.library=-1
[23-10-18 21:14:09.5730] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Control::XMLBrowser /usr/share/perl5/Slim/Control/XMLBrowser.pm 1878 Slim::Plugin::Favorites::OpmlFavorites::findUrl
[23-10-18 21:14:09.5731] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Control::XMLBrowser /usr/share/perl5/Slim/Control/XMLBrowser.pm 850 Slim::Control::XMLBrowser::_playlistControlContextMenu
[23-10-18 21:14:09.5732] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Control::XMLBrowser /usr/share/perl5/Slim/Control/XMLBrowser.pm 1572 Slim::Control::XMLBrowser::_cliQuery_done
[23-10-18 21:14:09.5733] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Control::XMLBrowser /usr/share/perl5/Slim/Control/XMLBrowser.pm 486 Slim::Control::XMLBrowser::_cliQuerySubFeed_done
[23-10-18 21:14:09.5734] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Menu::BrowseLibrary /usr/share/perl5/Slim/Menu/BrowseLibrary.pm 873 Slim::Control::XMLBrowser::__ANON__
[23-10-18 21:14:09.5735] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Menu::BrowseLibrary /usr/share/perl5/Slim/Menu/BrowseLibrary.pm 951 Slim::Menu::BrowseLibrary::__ANON__
[23-10-18 21:14:09.5735] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Menu::BrowseLibrary /usr/share/perl5/Slim/Menu/BrowseLibrary.pm 884 Slim::Menu::BrowseLibrary::_doRequest
[23-10-18 21:14:09.5736] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Menu::BrowseLibrary /usr/share/perl5/Slim/Menu/BrowseLibrary.pm 928 Slim::Menu::BrowseLibrary::__ANON__
[23-10-18 21:14:09.5737] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Menu::BrowseLibrary /usr/share/perl5/Slim/Menu/BrowseLibrary.pm 1874 Slim::Menu::BrowseLibrary::_generic
[23-10-18 21:14:09.5738] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Plugin::Favorites::OpmlFavorites /usr/share/perl5/Slim/Plugin/Favorites/OpmlFavorites.pm 285 Slim::Menu::BrowseLibrary::_tracks
[23-10-18 21:14:09.5739] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Control::XMLBrowser /usr/share/perl5/Slim/Control/XMLBrowser.pm 520 Slim::Plugin::Favorites::OpmlFavorites::_dbItem
[23-10-18 21:14:09.5740] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Control::XMLBrowser /usr/share/perl5/Slim/Control/XMLBrowser.pm 121 Slim::Control::XMLBrowser::_cliQuery_done
[23-10-18 21:14:09.5741] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Plugin::Favorites::Plugin /usr/share/perl5/Slim/Plugin/Favorites/Plugin.pm 760 Slim::Control::XMLBrowser::cliQuery
[23-10-18 21:14:09.5741] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Control::Request /usr/share/perl5/Slim/Control/Request.pm 1880 Slim::Plugin::Favorites::Plugin::cliBrowse
[23-10-18 21:14:09.5742] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Control::Request /usr/share/perl5/Slim/Control/Request.pm 1880 (eval)
[23-10-18 21:14:09.5743] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Web::Cometd /usr/share/perl5/Slim/Web/Cometd.pm 896 Slim::Control::Request::execute
[23-10-18 21:14:09.5744] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Web::Cometd /usr/share/perl5/Slim/Web/Cometd.pm 547 Slim::Web::Cometd::handleRequest
[23-10-18 21:14:09.5745] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Web::Cometd /usr/share/perl5/Slim/Web/Cometd.pm 116 Slim::Web::Cometd::handler
[23-10-18 21:14:09.5746] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Web::HTTP /usr/share/perl5/Slim/Web/HTTP.pm 484 Slim::Web::Cometd::webHandler
[23-10-18 21:14:09.5747] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Networking::IO::Select /usr/share/perl5/Slim/Networking/IO/Select.pm 123 Slim::Web::HTTP::processHTTP
[23-10-18 21:14:09.5747] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Networking::IO::Select /usr/share/perl5/Slim/Networking/IO/Select.pm 119 (eval)
[23-10-18 21:14:09.5748] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Networking::IO::Select /usr/share/perl5/Slim/Networking/IO/Select.pm 169 Slim::Networking::IO::Select::__ANON__
[23-10-18 21:14:09.5749] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK Slim::Networking::IO::Select /usr/share/perl5/Slim/Networking/IO/Select.pm 169 (eval)
[23-10-18 21:14:09.5750] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK main /usr/sbin/squeezeboxserver 724 Slim::Networking::IO::Select::loop
[23-10-18 21:14:09.5751] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK main /usr/sbin/squeezeboxserver 674 main::idle
[23-10-18 21:14:09.5751] Slim::Plugin::Favorites::OpmlFavorites::findUrl (414) DK main /usr/sbin/squeezeboxserver 1211 main::main

darrell-k avatar Oct 18 '23 20:10 darrell-k

Re #918 clicking on the album brings up the list of tracks for me.

darrell-k avatar Oct 18 '23 20:10 darrell-k

Let me park some findings here while I try to clear my head dealing with other (more important? - sorry!) stuff.

Here are $args and $pt as sent to the Slim::Menu::BrowseLibrary::_tracks() call. First when coming from a favourite album entry:

(
  {
    "index"      => undef,
    isWeb        => 1,
    library_id   => undef,
    orderBy      => undef,
    params       => undef,
    quantity     => 50,
    search       => undef,
    wantIndex    => 1,
    wantMetadata => 1,
  },
  {
    "join"       => ["contributor"],
    library_id   => -1,
    query        => {
                      "contributor.name" => "Cat Stevens",
                      title => "Harold and Maude [Original Motion Picture Soundtrack]",
                    },
    searchTags   => ["album_id:5340", "library_id:-1"],
    wantIndex    => 1,
    wantMetadata => 1,
  },
)

Second when navigating a "normal" way like Artist/Album:

(
  {
    "index"   => 0,
    isControl => 1,
    params    => {
                   _index       => 0,
                   _quantity    => 50,
                   album_id     => 5340,
                   artist_id    => 8459,
                   feedMode     => 1,
                   library_id   => -1,
                   mode         => "tracks",
                   release_type => "ALBUM,BOXSET,EP",
                   wantIndex    => 1,
                   wantMetadata => 1,
                 },
    quantity  => 50,
  },
  {
    library_id   => -1,
    searchTags   => [
                      "artist_id:8459",
                      "album_id:5340",
                      "library_id:-1",
                      "release_type:ALBUM,BOXSET,EP",
                    ],
    wantIndex    => 1,
    wantMetadata => 1,
  },
)

I'll have to figure out which of these numerous differences are causing the issue.

michaelherger avatar Oct 19 '23 13:10 michaelherger

:warning: This issue is stale because it has been open for 720 days with no activity. Please chime in if you want to keep it alive.

github-actions[bot] avatar Oct 08 '25 13:10 github-actions[bot]

I might look at this soon!

darrell-k avatar Oct 08 '25 14:10 darrell-k

EDIT: It seems that my comment below should have been posted against issue #919. For what it may be worth.

It sounds as if some of this may be relevant to you:

Be aware that if a feed has over 200 items and is passed to a SqueezePlay based player, S::C::XMLBrowser will split the feed into chunks of 200 items each. These are not necessarily sent/received consecutively.

Nevertheless, SqueezePlay does re-assemble them in the correct order, but I forget the details. In fact, I've probably forgotten quite a lot of details.

What Squeezeplay doesn't do quite right is handle the case where each chunk happens to have a differing set of $baseActions. Squeezeplay assumes that the $baseActions will be the same for the whole feed, and only reacts to the $baseActions from the last chunk received. That is not always a correct assumption. S::C::XMLBrowser figures out $baseActions chunk by chunk, and they can differ.

(I noticed this in the Podcast app some while ago, as a result of some strange handling of 'Touch to Play' items.)

mw9 avatar Oct 08 '25 16:10 mw9