diff --git a/Slim/Plugin/ExtendedBrowseModes/HTML/EN/plugins/ExtendedBrowseModes/settings/browsemodes.html b/Slim/Plugin/ExtendedBrowseModes/HTML/EN/plugins/ExtendedBrowseModes/settings/browsemodes.html index 30dfd49ffe2..569436aa74f 100644 --- a/Slim/Plugin/ExtendedBrowseModes/HTML/EN/plugins/ExtendedBrowseModes/settings/browsemodes.html +++ b/Slim/Plugin/ExtendedBrowseModes/HTML/EN/plugins/ExtendedBrowseModes/settings/browsemodes.html @@ -19,13 +19,13 @@ [% ELSE %] [% "NAME" | string %] - [% END %] [% "PLUGIN_EXTENDED_BROWSEMODES_APPLY_TO" | string %] [% "PLUGIN_EXTENDED_BROWSEMODES_BROWSE_BY" | string %] [% "PLUGIN_EXTENDED_BROWSEMODES_ROLES" | string %] [% "PLUGIN_EXTENDED_BROWSEMODES_RELEASE_TYPE" | string %] [% "GENRES" | string %][% "COLON" | string %] [% IF menu.id != '_new_' %][% "DELETE" | string %][% "COLON" | string %][% END %] + [% END %] [% seen = 1; END %] @@ -33,12 +33,12 @@ [% IF needsClient && menu.name %][% END %] - [% IF !menu.feed && menu.id != '_new_' %] + [% IF (needsClient || !menu.feed) && menu.id != '_new_' %] - [% ELSE %] + [% ELSIF !needsClient %] - [% FOREACH library = libraries %] @@ -61,13 +61,15 @@ [% END %] [% END %] + [% IF !needsClient %]  [% "PLUGIN_EXTENDED_BROWSEMODES_CONTRIBUTOR_HINT" | string %] [% roles.join(', ') %]  [% "PLUGIN_EXTENDED_BROWSEMODES_RELEASE_TYPE_HINT" | string %] [% release_types.join(', ') %]  [% "GENRES" | string %][% "COLON" | string %] [% genre_list.join(', ') %] + [% END %] [% END %] - [% WRAPPER setting title="PLUGIN_EXTENDED_BROWSEMODES_TAGS" desc="PLUGIN_EXTENDED_BROWSEMODES_TAGS_DESC" %] + [% IF !needsClient; WRAPPER setting title="PLUGIN_EXTENDED_BROWSEMODES_TAGS" desc="PLUGIN_EXTENDED_BROWSEMODES_TAGS_DESC" %] @@ -84,7 +86,7 @@
[% "PLUGIN_EXTENDED_BROWSEMODES_ROLE" | string %]
- [% END %] + [% END; END %] [% IF needsClient %] diff --git a/Slim/Plugin/ExtendedBrowseModes/PlayerSettings.pm b/Slim/Plugin/ExtendedBrowseModes/PlayerSettings.pm index 752a57869ae..1bc62e0263f 100644 --- a/Slim/Plugin/ExtendedBrowseModes/PlayerSettings.pm +++ b/Slim/Plugin/ExtendedBrowseModes/PlayerSettings.pm @@ -11,6 +11,9 @@ use base qw(Slim::Plugin::ExtendedBrowseModes::Settings); use Slim::Utils::Prefs; +my $prefs = preferences('plugin.extendedbrowsemodes'); +my $serverPrefs = preferences('server'); + sub name { return Slim::Web::HTTP::CSRF->protectName('PLUGIN_EXTENDED_BROWSEMODES'); } @@ -21,9 +24,25 @@ sub page { sub needsClient { 1 } -sub getServerPrefs { - my ($class, $client) = @_; - return preferences('server')->client($client); +sub handler { + my ($class, $client, $params) = @_; + + my $clientPrefs = $serverPrefs->client($client); + + if ($params->{'saveSettings'}) { + my $menus = $prefs->get('additionalMenuItems'); + + for (my $i = 1; defined $params->{"id$i"}; $i++) { + my ($menu) = $params->{"id$i"} eq '_new_' ? {} : grep { $_->{id} eq $params->{"id$i"} } @$menus; + + if ($clientPrefs) { + $clientPrefs->set('disabled_' . $params->{"id$i"}, $params->{"enabled$i"} ? 0 : 1); + delete $menu->{enabled}; + } + } + } + + $class->SUPER::handler($client, $params); } 1; diff --git a/Slim/Plugin/ExtendedBrowseModes/Settings.pm b/Slim/Plugin/ExtendedBrowseModes/Settings.pm index b1455b2e237..0799a60c9b8 100644 --- a/Slim/Plugin/ExtendedBrowseModes/Settings.pm +++ b/Slim/Plugin/ExtendedBrowseModes/Settings.pm @@ -34,6 +34,7 @@ use constant AUDIOBOOKS_MENUS => [{ }]; my $prefs = preferences('plugin.extendedbrowsemodes'); +my $serverPrefs = preferences('server'); sub name { return Slim::Web::HTTP::CSRF->protectName('PLUGIN_EXTENDED_BROWSEMODES'); @@ -50,15 +51,14 @@ sub page { sub handler { my ($class, $client, $params) = @_; - my $serverPrefs = $class->getServerPrefs($client); - - if ($params->{'saveSettings'}) { - - my $serverPrefs = preferences('server'); + # if we're called from the client prefs, we've already saved the client prefs + if ($params->{'saveSettings'} && !$class->needsClient) { + # custom role handling my $currentRoles = $serverPrefs->get('userDefinedRoles'); my $customTags = {}; my $id = 21; my $changed = 0; + foreach my $pref (keys %{$params}) { if ($pref =~ /(.*)_tag$/) { my $key = $1; @@ -80,6 +80,7 @@ sub handler { } } } + foreach my $old (keys %{$currentRoles}) { $changed = 1 if !$customTags->{$old}; } @@ -88,13 +89,13 @@ sub handler { $serverPrefs->set('userDefinedRoles', $customTags); } + # browse menu handling my $menus = $prefs->get('additionalMenuItems'); for (my $i = 1; defined $params->{"id$i"}; $i++) { if ( $params->{"delete$i"} ) { Slim::Menu::BrowseLibrary->deregisterNode($params->{"id$i"}); - my $serverPrefs = preferences('server'); # remove prefs related to this menu item foreach my $clientPref ( $serverPrefs->allClients ) { @@ -108,12 +109,6 @@ sub handler { my ($menu) = $params->{"id$i"} eq '_new_' ? {} : grep { $_->{id} eq $params->{"id$i"} } @$menus; - if ( $class->needsClient && $serverPrefs ) { - $serverPrefs->set('disabled_' . $params->{"id$i"}, $params->{"enabled$i"} ? 0 : 1); - } - - delete $menu->{enabled} if $serverPrefs; - next unless $params->{"name$i"} && $params->{"feed$i"} && ($params->{"roleid$i"} || $params->{"releasetype$i"} || $params->{"genreid$i"} || $params->{"libraryid$i"}); if ( $params->{"id$i"} eq '_new_' ) { @@ -151,9 +146,6 @@ sub handler { $menu->{weight} = "15.$ts" * 1; } - # need to migrate the enabled flag - my $serverPrefs = preferences('server'); - # remove prefs related to this menu item foreach my $clientPref ( $serverPrefs->allClients ) { my $oldPref = $clientPref->get('disabled_' . $oldId); @@ -214,22 +206,16 @@ sub handler { $prefs->set('additionalMenuItems', $menus); } - $params->{genre_list} = [ sort map { $_->name } Slim::Schema->search('Genre')->all ]; - $params->{roles} = [ Slim::Schema::Contributor->contributorRoles ]; - $params->{release_types} = Slim::Schema::Album->releaseTypes; - $class->SUPER::handler($client, $params); } -sub getServerPrefs {} - - sub beforeRender { my ($class, $params, $client) = @_; - my $serverPrefs = preferences('server'); + $params->{genre_list} = [ sort map { $_->name } Slim::Schema->search('Genre')->all ]; + $params->{roles} = [ Slim::Schema::Contributor->contributorRoles ]; + $params->{release_types} = Slim::Schema::Album->releaseTypes; $params->{customTags} = $serverPrefs->get('userDefinedRoles'); - $params->{libraries} = {}; if ($params->{'needsAudioBookUpdate'}) { @@ -247,19 +233,19 @@ sub beforeRender { $prefs->set('additionalMenuItems', $menus); } - my $serverPrefs = $class->getServerPrefs($client); + my $clientPrefs = $serverPrefs->client($client) if $class->needsClient; my %ids; $params->{menu_items} = [ map { $ids{$_->{id}}++; - $_->{enabled} = $serverPrefs ? ($serverPrefs->get('disabled_' . $_->{id}) ? 0 : 1) : 1; + $_->{enabled} = $clientPrefs ? ($clientPrefs->get('disabled_' . $_->{id}) ? 0 : 1) : 1; $_; } @{Storable::dclone($prefs->get('additionalMenuItems'))}, { id => '_new_' } ]; unshift @{$params->{menu_items}}, map { { name => $_->{name}, id => $_->{id}, - enabled => $serverPrefs ? ($serverPrefs->get('disabled_' . $_->{id}) ? 0 : 1) : 1, + enabled => $clientPrefs ? ($clientPrefs->get('disabled_' . $_->{id}) ? 0 : 1) : 1, } } sort { $a->{weight} <=> $b->{weight} # don't allow to disable some select browse menus