[Slim-Checkins] r8779 - in /trunk: platforms/debian/
platforms/redhat/ platforms/win32/installer/ server/ server/HTML/EN/
server/Plugins/Favorites/ server/Slim/Buttons/ server/Slim/Control/
server/Slim/Player/ server/Slim/Web/ server/Slim/Web/Pages/
dsully at svn.slimdevices.com
dsully at svn.slimdevices.com
Thu Aug 3 12:54:57 PDT 2006
Author: dsully
Date: Thu Aug 3 12:54:50 2006
New Revision: 8779
URL: http://svn.slimdevices.com?rev=8779&view=rev
Log:
Bug: 3859
Description: Refactor Favorites:
* No longer a plugin (never should have been).
* Playing db:* favorites from the WebUI now works.
* Added _playlistXtracksCommand_parseFavorite() which does the dirty work.
Added:
trunk/server/HTML/EN/favorites_list.html (with props)
trunk/server/Slim/Buttons/Favorites.pm (with props)
trunk/server/Slim/Web/Pages/Favorites.pm (with props)
Removed:
trunk/server/Plugins/Favorites/
Modified:
trunk/platforms/debian/slimserver.postinst
trunk/platforms/redhat/slimserver.spec.build
trunk/platforms/win32/installer/SlimServer.iss
trunk/server/Changelog6.html
trunk/server/Slim/Buttons/Common.pm
trunk/server/Slim/Control/Commands.pm
trunk/server/Slim/Player/Player.pm
trunk/server/Slim/Web/Pages.pm
trunk/server/Slim/Web/Pages/Status.pm
trunk/server/strings.txt
Modified: trunk/platforms/debian/slimserver.postinst
URL: http://svn.slimdevices.com/trunk/platforms/debian/slimserver.postinst?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/platforms/debian/slimserver.postinst (original)
+++ trunk/platforms/debian/slimserver.postinst Thu Aug 3 12:54:50 2006
@@ -15,6 +15,9 @@
else
VERBOSE=""
fi
+
+ # Remove the old Favorites module.
+ rm -rf /usr/share/slimserver/Plugins/Favorites
# Create a "slimserver" user. This has modeled after the code in the postfix.deb
# postinst. We first try to set the ownership of /var/lib/slimserver. If that
Modified: trunk/platforms/redhat/slimserver.spec.build
URL: http://svn.slimdevices.com/trunk/platforms/redhat/slimserver.spec.build?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/platforms/redhat/slimserver.spec.build (original)
+++ trunk/platforms/redhat/slimserver.spec.build Thu Aug 3 12:54:50 2006
@@ -74,6 +74,9 @@
/usr/sbin/useradd -c "SlimServer" -g $SLIMSERVER_USER -m -d %{slimdir} -s /sbin/nologin $SLIMSERVER_USER
fi
+# Remove the old Favorites plugin
+rm -rf /usr/local/slimserver/Plugins/Favorites
+
%post
export SLIMSERVER_USER=slimserver
Modified: trunk/platforms/win32/installer/SlimServer.iss
URL: http://svn.slimdevices.com/trunk/platforms/win32/installer/SlimServer.iss?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/platforms/win32/installer/SlimServer.iss (original)
+++ trunk/platforms/win32/installer/SlimServer.iss Thu Aug 3 12:54:50 2006
@@ -316,6 +316,9 @@
DelTree(NewServerDir + AddBackslash('HTML') + AddBackslash('WebPad'), true, true, true);
DelTree(NewServerDir + AddBackslash('HTML') + AddBackslash('xml'), true, true, true);
+ // Remove old Favorites plugin - now standard
+ DelTree(NewServerDir + AddBackslash('Plugins') + AddBackslash('Favorites'), true, true, true);
+
// Remove defunct radio plugins (now replaced by new
// in their own directories)
DeleteFile(NewServerDir + AddBackslash('Plugins') + 'RadioIO.pm');
Modified: trunk/server/Changelog6.html
URL: http://svn.slimdevices.com/trunk/server/Changelog6.html?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/server/Changelog6.html (original)
+++ trunk/server/Changelog6.html Thu Aug 3 12:54:50 2006
@@ -459,6 +459,7 @@
<li><a href="http://bugs.slimdevices.com/show_bug.cgi?id=3844">#3844</a> - Synced players - problem moving track past 'now playing' ...</li>
<li><a href="http://bugs.slimdevices.com/show_bug.cgi?id=3850">#3850</a> - Some cover art is not resized for gallery view thumbnails</li>
<li><a href="http://bugs.slimdevices.com/show_bug.cgi?id=3853">#3853</a> - playing genre favorite plays songs in track order</li>
+ <li><a href="http://bugs.slimdevices.com/show_bug.cgi?id=3859">#3859</a> - genre favorites play via player, but not via web interface</li>
</ul>
</ul>
Added: trunk/server/HTML/EN/favorites_list.html
URL: http://svn.slimdevices.com/trunk/server/HTML/EN/favorites_list.html?rev=8779&view=auto
==============================================================================
--- trunk/server/HTML/EN/favorites_list.html (added)
+++ trunk/server/HTML/EN/favorites_list.html Thu Aug 3 12:54:50 2006
@@ -1,0 +1,41 @@
+[%- pageicon = 'BROWSE_PLAYLISTS' -%]
+[%- pagetitle = 'FAVORITES' | string -%]
+[%- pwd_list = BLOCK -%]/ <a href="favorites_list.html?player=[% player | uri %]">[% "FAVORITES" | string %]</a>
+[% END -%]
+[%- PROCESS pageheader.html -%]
+
+[% warning %]
+
+[% WRAPPER contentcontainer %]
+ [% odd = 1 %]
+ [% FOREACH fav = titles %]
+ [% text = IF fav ; fav ; ELSE ;"EMPTY" | string ; END; %]
+
+ [% BLOCK favcontrols %]
+ [% WRAPPER moveuplink noTarget=1 %]
+ href="favorites_list.html?p0=favorites&p1=move&p2=[% loop.index %]&p3=%2D1&player=[% player | uri %]"
+ [% END %]
+
+ [% WRAPPER movedownlink noTarget=1 %]
+ href="favorites_list.html?p0=favorites&p1=move&p2=[% loop.index %]&p3=%2B1&player=[% player | uri %]"
+ [% END %]
+
+ [% WRAPPER removelink noTarget=1 %]
+ href="favorites_list.html?p0=favorites&p1=delete&p2=[% loop.index %]&player=[% player | uri %]"
+ [% END %]
+
+ [% WRAPPER playlink %]
+ href="[% webroot %][% statusroot %]?command=playlist&subcommand=loadtracks&favorite=[% faves.$fav | uri %]&player=[% player | uri %]"
+ [% END %]
+
+ [% END %]
+
+ [% WRAPPER contentitem controls = 'favcontrols' %]
+ [% loop.count _ '. ' _ text %]
+ [% END %]
+ [% odd = (not odd) %]
+ [% END %]
+
+[% END %]
+
+[% PROCESS pagefooter.html %]
Propchange: trunk/server/HTML/EN/favorites_list.html
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/server/HTML/EN/favorites_list.html
------------------------------------------------------------------------------
svn:executable = *
Propchange: trunk/server/HTML/EN/favorites_list.html
------------------------------------------------------------------------------
svn:keywords = Id Author LastChangedDate LastChangedBy
Propchange: trunk/server/HTML/EN/favorites_list.html
------------------------------------------------------------------------------
svn:mime-type = text/html
Modified: trunk/server/Slim/Buttons/Common.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Buttons/Common.pm?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/server/Slim/Buttons/Common.pm (original)
+++ trunk/server/Slim/Buttons/Common.pm Thu Aug 3 12:54:50 2006
@@ -17,6 +17,7 @@
use Slim::Utils::Misc;
use Slim::Utils::PluginManager;
use Slim::Display::Display;
+use Slim::Buttons::Favorites;
use Slim::Buttons::SqueezeNetwork;
use Slim::Buttons::XMLBrowser;
use Slim::Buttons::Volume;
@@ -72,6 +73,7 @@
Slim::Buttons::AlarmClock::init();
Slim::Buttons::BrowseDB::init();
Slim::Buttons::BrowseTree::init();
+ Slim::Buttons::Favorites::init();
Slim::Buttons::Information::init();
Slim::Buttons::Playlist::init();
Slim::Buttons::XMLBrowser::init();
@@ -438,6 +440,7 @@
my $button = shift;
my $buttonarg = shift;
my $playdisp = undef;
+
if (mode($client) ne 'search') {
Slim::Buttons::Home::jumpToMenu($client,"SEARCH");
$client->update();
@@ -449,7 +452,7 @@
my $button = shift;
my $buttonarg = shift;
my $playdisp = undef;
-
+
setMode($client, 'home');
Slim::Buttons::Home::jumpToMenu($client,"BROWSE_MUSIC");
$client->update();
@@ -491,11 +494,11 @@
}
}
- } elsif (mode($client) ne 'PLUGIN.Favorites') {
-
- Slim::Buttons::Common::setMode($client, 'home');
- Slim::Buttons::Home::jump($client, 'PLUGIN.Favorites');
- Slim::Buttons::Common::pushModeLeft($client, 'PLUGIN.Favorites');
+ } elsif (mode($client) ne 'FAVORITES') {
+
+ setMode($client, 'home');
+ Slim::Buttons::Home::jump($client, 'FAVORITES');
+ Slim::Buttons::Common::pushModeLeft($client, 'FAVORITES');
}
},
'repeat' => sub {
Added: trunk/server/Slim/Buttons/Favorites.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Buttons/Favorites.pm?rev=8779&view=auto
==============================================================================
--- trunk/server/Slim/Buttons/Favorites.pm (added)
+++ trunk/server/Slim/Buttons/Favorites.pm Thu Aug 3 12:54:50 2006
@@ -1,0 +1,344 @@
+package Slim::Buttons::Favorites;
+
+# $Id$
+#
+# Copyright (C) 2005-2006 Slim Devices Inc.
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License,
+# version 2.
+
+# This module defines both a mode for listing all favorites, and a
+# mode for displaying the details of a station or track.
+
+# Other modes are encouraged to use the details mode, called
+# 'Favorites.details'. To use it, setup a hash of params, and
+# push into the mode. The params hash must contain strings for
+# 'title' and 'url'. You may also include an array of strings called
+# 'details'. If included, each string in the details will be
+# displayed as well. The mode also adds a line allowing the user to
+# add the url to his/her favorites.
+
+use strict;
+use File::Spec::Functions qw(:ALL);
+use Scalar::Util qw(blessed);
+
+use Slim::Buttons::Common;
+use Slim::Utils::Favorites;
+use Slim::Utils::Misc;
+use Slim::Utils::Strings qw(string);
+
+my %context = ();
+
+my %mapping = (
+ 'play' => 'dead',
+ 'play.hold' => 'play',
+ 'play.single' => 'play',
+);
+
+my %mainModeFunctions = (
+
+ 'play' => sub {
+ my $client = shift;
+
+ my $listIndex = $client->param('listIndex');
+ my $urls = $client->param('urls');
+ my $titles = $client->param('listRef');
+
+ _addOrPlayFavoriteUrl($client, $urls->[$listIndex], $titles->[$listIndex], $listIndex);
+ },
+
+ 'add' => sub {
+ my $client = shift;
+
+ my $listIndex = $client->param('listIndex');
+ my $urls = $client->param('urls');
+ my $titles = $client->param('listRef');
+
+ _addOrPlayFavoriteUrl($client, $urls->[$listIndex], $titles->[$listIndex], $listIndex, 'add');
+ },
+);
+
+sub getDisplayName {
+ return 'FAVORITES';
+}
+
+sub init {
+ $::d_favorites && msg("Favorites: init\n");
+
+ Slim::Buttons::Common::addMode('FAVORITES', \%mainModeFunctions, \&setMode);
+
+ # Slim::Buttons::Home::addMenuOption('FAVORITES', { 'useMode' => 'FAVORITES' });
+
+ Slim::Buttons::Common::setFunction('playFavorite', \&playFavorite);
+
+ # register our functions
+
+# |requires Client
+# | |is a Query
+# | | |has Tags
+# | | | |Function to call
+# C Q T F
+ Slim::Control::Request::addDispatch(['favorites', '_index', '_quantity'],
+ [0, 1, 1, \&listQuery]);
+ Slim::Control::Request::addDispatch(['favorites', 'move', '_fromindex', '_toindex'],
+ [0, 0, 0, \&moveCommand]);
+ Slim::Control::Request::addDispatch(['favorites', 'delete', '_index'],
+ [0, 0, 0, \&deleteCommand]);
+ Slim::Control::Request::addDispatch(['favorites', 'add', '_url', '_title'],
+ [0, 0, 0, \&addCommand]);
+}
+
+sub setMode {
+ my $client = shift;
+ my $method = shift;
+
+ if ($method eq 'pop') {
+
+ if (!$context{$client}->{'blocking'}) {
+ Slim::Buttons::Common::popMode($client);
+ }
+
+ return;
+ }
+
+ my $favs = Slim::Utils::Favorites->new($client);
+ my @titles = $favs->titles;
+ my @urls = $favs->urls;
+
+ # don't give list mode an empty list!
+ if (!scalar @titles) {
+ push @titles, $client->string('EMPTY');
+ }
+
+ my %params = (
+ stringHeader => 1,
+ header => 'FAVORITES',
+ listRef => \@titles,
+ callback => \&mainModeCallback,
+ valueRef => \$context{$client}->{mainModeIndex},
+ externRef => sub {return $_[1] || $_[0]->string('EMPTY')},
+ headerAddCount => scalar (@urls) ? 1 : 0,
+ urls => \@urls,
+ parentMode => Slim::Buttons::Common::mode($client),
+ overlayRef => sub {
+ if (scalar @urls) {
+ return (undef,Slim::Display::Display::symbol('notesymbol'));
+ } else {
+ return undef;
+ }
+ },
+ );
+
+ Slim::Buttons::Common::pushMode($client, 'INPUT.List', \%params);
+}
+
+sub mainModeCallback {
+ my ($client, $exittype) = @_;
+
+ $exittype = uc($exittype);
+
+ if ($exittype eq 'LEFT') {
+
+ Slim::Buttons::Common::popModeRight($client);
+
+ } elsif ($exittype eq 'RIGHT') {
+
+ my $listIndex = $client->param('listIndex');
+ my $urls = $client->param('urls');
+
+ my %params = (
+ title => $context{$client}->{'mainModeIndex'},
+ url => $urls->[$listIndex],
+ );
+
+ Slim::Buttons::Common::pushModeLeft($client, 'remotetrackinfo', \%params);
+
+ } else {
+
+ $client->bumpRight;
+ }
+}
+
+sub defaultMap {
+ return \%mapping;
+}
+
+sub getFunctions {
+ return \%mainModeFunctions;
+}
+
+####################################################################
+# Adds a mapping for 'playFavorite' function in all modes
+####################################################################
+sub playFavorite {
+ my $client = shift;
+ my $button = shift;
+ my $digit = shift;
+
+ if ($digit == 0) {
+ $digit = 10;
+ }
+
+ my $listIndex = $digit - 1;
+ my $favs = Slim::Utils::Favorites->new($client);
+ my @titles = $favs->titles;
+ my @urls = $favs->urls;
+
+ if (!$urls[$listIndex]) {
+
+ $client->showBriefly({
+ 'line' => [ sprintf($client->string('FAVORITES_NOT_DEFINED'), $digit) ],
+ });
+
+ return;
+ }
+
+ $::d_favorites && msg("Favorites: playing favorite number $digit, $titles[$listIndex]\n");
+
+ _addOrPlayFavoriteUrl($client, $urls[$listIndex], $titles[$listIndex], $listIndex);
+}
+
+sub _addOrPlayFavoriteUrl {
+ my $client = shift;
+ my $url = shift;
+ my $title = shift;
+ my $index = shift;
+ my $add = shift || 0;
+
+ my $string = $add ? 'FAVORITES_ADDING' : 'FAVORITES_PLAYING';
+ my $command = $add ? 'inserttracks' : 'loadtracks';
+
+ if (defined $index) {
+
+ $client->showBriefly({
+ 'line' => [ sprintf($client->string($string), $index+1), $title ],
+ });
+ }
+
+ $::d_favorites && msg("Favorites: Calling $command on favorite [$title] ($url)\n");
+
+ if (!$add) {
+ $client->execute([ 'playlist', 'clear' ] );
+ }
+
+ $client->execute([ 'playlist', $command, 'favorite', $url ]);
+}
+
+# These are all CLI commands
+# move from to command
+sub moveCommand {
+ my $request = shift;
+
+ # check this is the correct command.
+ if ($request->isNotCommand([['favorites'], ['move']])) {
+ $request->setStatusBadDispatch();
+ return;
+ }
+
+ # get the parameters
+ my $client = $request->client();
+ my $fromindex = $request->getParam('_fromindex');;
+ my $toindex = $request->getParam('_toindex');;
+
+ if (!defined $fromindex || !defined $toindex) {
+ $request->setStatusBadParams();
+ return;
+ }
+
+ Slim::Utils::Favorites->moveItem($client, $fromindex, $toindex);
+
+ $request->setStatusDone();
+}
+
+# add to favorites
+sub addCommand {
+ my $request = shift;
+
+ # check this is the correct command.
+ if ($request->isNotCommand([['favorites'], ['add']])) {
+ $request->setStatusBadDispatch();
+ return;
+ }
+
+ # get the parameters
+ my $client = $request->client();
+ my $url = $request->getParam('_url');;
+ my $title = $request->getParam('_title');;
+
+ if (!defined $url || !defined $title) {
+ $request->setStatusBadParams();
+ return;
+ }
+
+ Slim::Utils::Favorites->clientAdd($client, $url, $title);
+
+ $request->setStatusDone();
+}
+
+# delete command
+sub deleteCommand {
+ my $request = shift;
+
+ # check this is the correct command.
+ if ($request->isNotCommand([['favorites'], ['delete']])) {
+ $request->setStatusBadDispatch();
+ return;
+ }
+
+ # get the parameters
+ my $client = $request->client();
+ my $index = $request->getParam('_index');;
+
+ if (!defined $index) {
+ $request->setStatusBadParams();
+ return;
+ }
+
+ Slim::Utils::Favorites->deleteByClientAndId($client, $index);
+
+ $request->setStatusDone();
+}
+
+# favorites list
+sub listQuery {
+ my $request = shift;
+
+ if ($request->isNotQuery([['favorites']])) {
+ $request->setStatusBadDispatch();
+ return;
+ }
+
+ # get our parameters
+ my $client = $request->client();
+ my $index = $request->getParam('_index');
+ my $quantity = $request->getParam('_quantity');
+
+ my $favs = Slim::Utils::Favorites->new($client);
+ my @titles = $favs->titles;
+ my @urls = $favs->urls;
+
+ my $count = scalar(@titles);
+
+ $request->addResult('count', $count);
+
+ my ($valid, $start, $end) = $request->normalize(scalar($index), scalar($quantity), $count);
+
+ if ($valid) {
+ my $idx = $start;
+ my $cnt = 0;
+
+ for my $eachtitle (@titles[$start..$end]) {
+ $request->addResultLoop('@favorites', $cnt, 'id', $idx);
+ $request->addResultLoop('@favorites', $cnt, 'title', $eachtitle);
+ $request->addResultLoop('@favorites', $cnt, 'url', $urls[$idx]);
+ $cnt++;
+ $idx++;
+ }
+ }
+
+ $request->setStatusDone();
+}
+
+1;
+
+__END__
Propchange: trunk/server/Slim/Buttons/Favorites.pm
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/server/Slim/Buttons/Favorites.pm
------------------------------------------------------------------------------
svn:keywords = Id Author LastChangedDate LastChangedBy
Propchange: trunk/server/Slim/Buttons/Favorites.pm
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: trunk/server/Slim/Control/Commands.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Control/Commands.pm?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/server/Slim/Control/Commands.pm (original)
+++ trunk/server/Slim/Control/Commands.pm Thu Aug 3 12:54:50 2006
@@ -1006,6 +1006,10 @@
@tracks = _playlistXtracksCommand_parseListRef($client, $what, $listref);
+ } elsif ($what =~ /favorite/i) {
+
+ @tracks = _playlistXtracksCommand_parseFavorite($client, $what, $listref);
+
} elsif ($what =~ /searchRef/i) {
@tracks = _playlistXtracksCommand_parseSearchRef($client, $what, $listref);
@@ -2213,6 +2217,58 @@
return Slim::Schema->rs('Track')->search($cond, $attr)->distinct->all;
}
+# Allow any URL to be a favorite - this includes things like iTunes playlists.
+sub _playlistXtracksCommand_parseFavorite {
+ my $client = shift;
+ my $what = shift;
+ my $url = shift;
+
+ my $class = 'Track';
+ my $obj = undef;
+ my $terms = undef;
+
+ $d_commands && msg("Commands::_playlistXtracksCommand_parseFavorite()\n");
+
+ # If coming from the web UI.
+ if ($what =~ /favorite=(.+?)\&/i) {
+ $url = Slim::Utils::Misc::unescape($1);
+ }
+
+ # Bug: 2569
+ # We need to ask for the right type of object.
+ #
+ # Contributors, Genres & Albums have a url of:
+ # db:contributor.namesearch=BEATLES
+ #
+ # Remote playlists are Track objects, not Playlist objects.
+ if ($url =~ /^db:(\w+)\.(\w+)=(.+)/) {
+
+ $class = ucfirst($1);
+ $obj = Slim::Schema->single($class, { $2 => Slim::Utils::Misc::unescape($3) });
+
+ } elsif (Slim::Music::Info::isPlaylist($url) && !Slim::Music::Info::isRemoteURL($url)) {
+
+ $class = 'Playlist';
+ }
+
+ # else we assume it's a track
+ if ($class eq 'Track' || $class eq 'Playlist') {
+
+ $obj = Slim::Schema->rs($class)->objectForUrl({
+ 'url' => $url,
+ 'create' => 1,
+ 'readTags' => 1
+ });
+ }
+
+ if (blessed($obj)) {
+
+ $terms = sprintf('%s.id=%d', lc($class), $obj->id);
+ }
+
+ return _playlistXtracksCommand_parseSearchTerms($client, $terms);
+}
+
sub _showCommand_done {
my $args = shift;
Modified: trunk/server/Slim/Player/Player.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Player/Player.pm?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/server/Slim/Player/Player.pm (original)
+++ trunk/server/Slim/Player/Player.pm Thu Aug 3 12:54:50 2006
@@ -33,6 +33,7 @@
BROWSE_MUSIC
SEARCH
RandomPlay::Plugin
+ FAVORITES
SAVED_PLAYLISTS
RADIO
SETTINGS
@@ -57,6 +58,7 @@
'upgrade-6.1b1-script' => 1,
'upgrade-6.2-script' => 1,
'upgrade-R4627-script' => 1,
+ 'upgrade-R8775-script' => 1,
'volume' => 50,
'syncBufferThreshold' => 128,
'bufferThreshold' => 255,
@@ -114,6 +116,7 @@
$client->prefPush('menuItem', 'SQUEEZENETWORK_CONNECT');
}
},
+
'6.2' => sub {
my $client = shift;
#kill all alarm settings
@@ -133,15 +136,19 @@
$client->prefSet('alarmvolume',[$alarmvolume,50,50,50,50,50,50,50]);
}
},
+
'R4627' => sub {
my $client = shift;
- # Add RandomMix to home and clear unused prefs
my $menuItem = $client->prefGet('menuItem') || 0;
+ # Add RandomMix to home and clear unused prefs
if (ref $menuItem eq 'ARRAY') {
+
my $insertPos = undef;
my $randomMixFound = 0;
+
for (my $i = 0; $i < @$menuItem; $i++) {
+
if (@$menuItem[$i] eq 'RandomPlay::Plugin') {
$randomMixFound = 1;
last;
@@ -150,16 +157,16 @@
}
}
- if (! $randomMixFound) {
- if ($insertPos != undef) {
+ if (!$randomMixFound) {
+
+ if (defined $insertPos) {
+
# Insert random mix after SEARCH
- $menuItem = [(@$menuItem[0 .. $insertPos - 1],
- 'RandomPlay::Plugin',
- @$menuItem[$insertPos .. scalar @$menuItem - 1]
- )];
+ splice(@$menuItem, $insertPos, 0, 'RandomPlay::Plugin');
} else {
push (@$menuItem, 'RandomPlay::Plugin');
}
+
$client->prefSet('menuItem', $menuItem);
}
@@ -168,6 +175,42 @@
Slim::Utils::Prefs::delete('plugin_random_remove_old_tracks');
}
},
+
+ 'R8775' => sub {
+ my $client = shift;
+ my $menuItem = $client->prefGet('menuItem') || 0;
+
+ # Add Favorites to home
+ if (ref($menuItem) ne 'ARRAY') {
+ return;
+ }
+
+ my $insertPos = undef;
+
+ # Insert Favorites before SAVED_PLAYLISTS
+ for (my $i = 0; $i < @$menuItem; $i++) {
+
+ if (@$menuItem[$i] eq 'FAVORITES') {
+
+ return;
+
+ } elsif (@$menuItem[$i] eq 'SAVED_PLAYLISTS') {
+
+ $insertPos = $i;
+ }
+ }
+
+ if (defined $insertPos) {
+
+ splice(@$menuItem, $insertPos, 0, 'FAVORITES');
+
+ } else {
+
+ push (@$menuItem, 'FAVORITES');
+ }
+
+ $client->prefSet('menuItem', $menuItem);
+ }
);
sub new {
@@ -640,9 +683,8 @@
my $scale = $client->mixerConstant($feature,'scale');
my $headerValue = $client->mixerConstant($feature,'balanced') ?
- int( ( ($featureValue - $mid) * $scale) + 0.5) :
- int( ( $featureValue * $scale) + 0.5);
-
+ int( ( ($featureValue - $mid) * $scale) + 0.5) :
+ int( ( $featureValue * $scale) + 0.5);
if ($feature eq 'volume' && $featureValue <= 0) {
$headerValue = $client->string('MUTED');
@@ -656,14 +698,13 @@
my $oldvisu = $client->modeParam('visu');
$client->modeParam('visu', [0]);
- my @lines = Slim::Buttons::Input::Bar::lines($client, $featureValue, $featureHeader,
- {
- 'min' => $client->mixerConstant($feature,'min'),
- 'mid' => $mid,
- 'max' => $client->mixerConstant($feature,'max'),
- 'noOverlay' => 1,
- }
- );
+ my @lines = Slim::Buttons::Input::Bar::lines($client, $featureValue, $featureHeader, {
+ 'min' => $client->mixerConstant($feature,'min'),
+ 'mid' => $mid,
+ 'max' => $client->mixerConstant($feature,'max'),
+ 'noOverlay' => 1,
+ });
+
# trim off any overlay for showBriefly
$client->display->showBriefly(@lines[0,1]);
Modified: trunk/server/Slim/Web/Pages.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Web/Pages.pm?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/server/Slim/Web/Pages.pm (original)
+++ trunk/server/Slim/Web/Pages.pm Thu Aug 3 12:54:50 2006
@@ -19,6 +19,7 @@
use Slim::Web::Pages::Search;
use Slim::Web::Pages::BrowseDB;
use Slim::Web::Pages::BrowseTree;
+use Slim::Web::Pages::Favorites;
use Slim::Web::Pages::Home;
use Slim::Web::Pages::Status;
use Slim::Web::Pages::Playlist;
@@ -56,6 +57,7 @@
Slim::Web::Pages::Home->init();
Slim::Web::Pages::BrowseDB::init();
Slim::Web::Pages::BrowseTree::init();
+ Slim::Web::Pages::Favorites::init();
Slim::Web::Pages::Search::init();
Slim::Web::Pages::Status::init();
Slim::Web::Pages::EditPlaylist::init(); # must precede Playlist::init();
Added: trunk/server/Slim/Web/Pages/Favorites.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Web/Pages/Favorites.pm?rev=8779&view=auto
==============================================================================
--- trunk/server/Slim/Web/Pages/Favorites.pm (added)
+++ trunk/server/Slim/Web/Pages/Favorites.pm Thu Aug 3 12:54:50 2006
@@ -1,0 +1,52 @@
+package Slim::Web::Pages::Favorites;
+
+# $Id$
+#
+# Copyright (C) 2005-2006 Slim Devices Inc.
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License,
+# version 2.
+
+use strict;
+
+use Slim::Utils::Favorites;
+use Slim::Utils::Misc;
+use Slim::Utils::Strings qw(string);
+
+sub init {
+
+ Slim::Web::HTTP::addPageFunction("favorites_list\.htm", \&handleWebIndex);
+
+ Slim::Web::Pages->addPageLinks("browse", { 'FAVORITES' => "favorites_list.html" });
+}
+
+sub handleWebIndex {
+ my ($client, $params) = @_;
+
+ $params->{'favList'} = {};
+
+ my $favs = Slim::Utils::Favorites->new($client);
+ my @titles = $favs->titles;
+ my @urls = $favs->urls;
+ my $i = 0;
+
+ if (scalar @titles) {
+
+ $params->{'titles'} = \@titles;
+ $params->{'urls'} = \@urls;
+
+ for (@titles) {
+ $params->{'faves'}{$_} = $urls[$i++];
+ }
+
+ } else {
+
+ $params->{'warning'} = string('FAVORITES_NONE_DEFINED');
+ }
+
+ return Slim::Web::HTTP::filltemplatefile('favorites_list.html', $params);
+}
+
+1;
+
+__END__
Propchange: trunk/server/Slim/Web/Pages/Favorites.pm
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/server/Slim/Web/Pages/Favorites.pm
------------------------------------------------------------------------------
svn:keywords = Id Author LastChangedDate LastChangedBy
Propchange: trunk/server/Slim/Web/Pages/Favorites.pm
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: trunk/server/Slim/Web/Pages/Status.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Web/Pages/Status.pm?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/server/Slim/Web/Pages/Status.pm (original)
+++ trunk/server/Slim/Web/Pages/Status.pm Thu Aug 3 12:54:50 2006
@@ -41,7 +41,7 @@
Slim::Web::Pages->addPlayerList($client, $params);
$params->{'refresh'} = Slim::Utils::Prefs::get('refreshRate');
-
+
if (!defined($client)) {
# fixed faster rate for noclients
@@ -57,7 +57,7 @@
my $current_player;
my $songcount = 0;
-
+
if (defined($client)) {
$songcount = Slim::Player::Playlist::count($client);
@@ -151,7 +151,7 @@
$params->{'currentsong'} = Slim::Player::Source::playingSongIndex($client) + 1;
$params->{'thissongnum'} = Slim::Player::Source::playingSongIndex($client);
$params->{'songcount'} = $songcount;
- $params->{'itemobj'} = Slim::Player::Playlist::song($client);
+ $params->{'itemobj'} = Slim::Player::Playlist::song($client);
Slim::Web::Pages->addSongInfo($client, $params, 1);
Modified: trunk/server/strings.txt
URL: http://svn.slimdevices.com/trunk/server/strings.txt?rev=8779&r1=8778&r2=8779&view=diff
==============================================================================
--- trunk/server/strings.txt (original)
+++ trunk/server/strings.txt Thu Aug 3 12:54:50 2006
@@ -11824,6 +11824,38 @@
DE 1
EN 0
+FAVORITES
+ DE Favoriten
+ EN Favorites
+ ES Favoritas
+ FI Suosikit
+ FR Favoris
+ HE ×××¢×פ××
+ IT Favoriti
+ NL Favorieten
+
+FAVORITES_NOT_DEFINED
+ DE Favorit Nr. %s existiert nicht!
+ EN Favorite #%s not defined.
+ ES Favorita #%s no definida
+ FR Favori n°%s non défini
+ NL Favoriet #%s niet gedefinieerd.
+
+FAVORITES_NONE_DEFINED
+ DE Es sind noch keine Favoriten definiert
+ EN No Favorites exist
+ ES No existen Favoritas
+ FI Suosikkeja ei ole
+ FR Aucun favori défini
+ NL Er zijn geen favorieten
+
+FAVORITES_PLAYING
+ DE Spiele Favorit Nr. %s...
+ EN Playing favorite #%s
+ ES Se está escuchando favorita #%s
+ FR Lecture favori n°%s
+ NL Speel favoriet #%s
+
FAVORITES_FAVORITE_NUM
DE Favorit Nr.
EN Favorite #
More information about the checkins
mailing list