[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&amp;p1=move&amp;p2=[% loop.index %]&amp;p3=%2D1&amp;player=[% player | uri %]"
+			[% END %]
+		
+			[% WRAPPER movedownlink noTarget=1 %]
+				href="favorites_list.html?p0=favorites&amp;p1=move&amp;p2=[% loop.index %]&amp;p3=%2B1&amp;player=[% player | uri %]"
+			[% END %]
+		
+			[% WRAPPER removelink noTarget=1 %]
+				href="favorites_list.html?p0=favorites&amp;p1=delete&amp;p2=[% loop.index %]&amp;player=[% player | uri %]"
+			[% END %]
+		
+			[% WRAPPER playlink %]
+				href="[% webroot %][% statusroot %]?command=playlist&amp;subcommand=loadtracks&amp;favorite=[% faves.$fav | uri %]&amp;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