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 %]
|
- |
[% 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" %]
- [% 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