[Slim-Checkins] r10587 - in /trunk/server: HTML/EN/setupfiletypes.html Slim/Web/HTTP.pm Slim/Web/Pages.pm Slim/Web/Setup.pm strings.txt

kdf at svn.slimdevices.com kdf at svn.slimdevices.com
Fri Nov 3 23:16:13 PST 2006


Author: kdf
Date: Fri Nov  3 23:16:09 2006
New Revision: 10587

URL: http://svn.slimdevices.com?rev=10587&view=rev
Log:
Bug: 3267
Description: rework for file types page.  Uses it's own handler and potentially scalable to allow multiple options for binary usage


Added:
    trunk/server/HTML/EN/setupfiletypes.html
Modified:
    trunk/server/Slim/Web/HTTP.pm
    trunk/server/Slim/Web/Pages.pm
    trunk/server/Slim/Web/Setup.pm
    trunk/server/strings.txt

Added: trunk/server/HTML/EN/setupfiletypes.html
URL: http://svn.slimdevices.com/trunk/server/HTML/EN/setupfiletypes.html?rev=10587&view=auto
==============================================================================
--- trunk/server/HTML/EN/setupfiletypes.html (added)
+++ trunk/server/HTML/EN/setupfiletypes.html Fri Nov  3 23:16:09 2006
@@ -1,0 +1,79 @@
+[% FILTER null %]
+
+	[% pwd_list = BLOCK %]
+
+		<a href="setup.html?page=BASIC_SERVER_SETTINGS">[% "SERVER_SETTINGS" | string %]</a>
+
+		 / <a href="setupfiletypes.html">[% page | string %]</a>
+
+	[% END %]
+
+	[% pageHeaderInfo = BLOCK %]
+		[%- PROCESS setting_chooser.html setting_chooser_noHome = 1 %]
+	[% END %]
+
+[% END %]
+
+[% pagetitle = pagetitle; pageicon = 'settings'; noSpacer = 1; PROCESS pageheader.html %] 
+
+<div class="statusarea">
+	[% IF warning %]
+		[% warning %]
+	[% END %]
+</div>
+
+<form method="post" action="setupfiletypes.html">
+
+	<input type=hidden value="[% page %]" name="page">
+
+	<div class="settingSection">
+
+		<div class="prefHead">[% "SETUP_DISABLEDEXTENSIONSAUDIO" | string | upper %]</div>
+		<div class="prefDesc">[% "SETUP_DISABLEDEXTENSIONSAUDIO_DESC" | string %]</div>
+
+		<input type=text class="stdedit" name="disabledextensionsaudio" id="disabledextensionsaudio" value="[% disabledextensionsaudio %]" size="40">
+
+		<div class="prefHead">[% "SETUP_DISABLEDEXTENSIONSPLAYLIST" | string | upper %]</div>
+		<div class="prefDesc">[% "SETUP_DISABLEDEXTENSIONSPLAYLIST_DESC" | string %]</div>
+
+		<input type=text class="stdedit" name="disabledextensionsplaylist" id="disabledextensionsplaylist" value="[% disabledextensionsplaylist %]" size="40">
+
+		<div class="prefHead">[% "SETUP_GROUP_FORMATS_CONVERSION" | string | upper %]</div>
+		<div class="prefDesc">[% "SETUP_GROUP_FORMATS_CONVERSION_DESC" | string %]</div>
+
+		<table border="0" cellspacing="0" width="100%">
+			<tr><th>[% 'FILE_FORMAT' | string %]</th><th>[% 'STREAM_FORMAT' | string %]</th><th>[% 'DECODER' | string %]</th></tr>
+	
+			[% FOREACH format = formats %]
+				[% frame = format.input != loop.prev.input %]
+				[% IF frame %]
+					<tr style="height: 5px;"><td class="[% odd ? "odd" : "even" %]" colspan="3"></td></tr>
+					[% odd = (not odd) %]<tr style="height: 5px;"><td class="[% odd ? "odd" : "even" %]" colspan="3"></td></tr>
+				[% END %]
+				<tr>
+				<td class="[% odd ? "odd" : "even" %]">[% IF frame %][% format.input | string %][% END %]</td>
+				
+				<td class="[% odd ? "odd" : "even" %]"><label for="[% format.profile %]" class="stdlabel">[% format.output | string %]</label></td>
+				
+				<td class="[% odd ? "odd" : "even" %]">
+					<select class="stdedit" name="[% format.profile %]" id="[% format.profile %]">
+		
+					[%- FOREACH value = format.binaries -%]
+						<option [% IF loop.index == format.enabled %]selected [% END %]value="[% value %]">[% value | getstring %]</option>
+					[%- END -%]
+					
+					</select>
+				</td>
+				</tr>
+			[% END %]
+			<tr style="height: 5px;"><td class="[% odd ? "odd" : "even" %]" colspan="3"></td></tr>
+		</table>
+
+	<p><input name="submit" type="submit" class="stdclick" value="[% "SAVE_SETTINGS" | string %]"></p>
+</form>
+
+</div>
+
+<p></p>
+
+[% PROCESS pagefooter.html %]

Modified: trunk/server/Slim/Web/HTTP.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Web/HTTP.pm?rev=10587&r1=10586&r2=10587&view=diff
==============================================================================
--- trunk/server/Slim/Web/HTTP.pm (original)
+++ trunk/server/Slim/Web/HTTP.pm Fri Nov  3 23:16:09 2006
@@ -99,9 +99,11 @@
 	#	\&Slim::Web::Pages::status => '\bp0=rescan\b'
 	# means inisist on CSRF protection for the status command *only*
 	# if the URL includes p0=rescan
-	\&Slim::Web::Setup::setup_HTTP => '.',
-	\&Slim::Web::EditPlaylist::editplaylist => '.',
-	\&Slim::Web::Pages::Status::status => '(p0=debug|p0=pause|p0=stop|p0=play|p0=sleep|p0=playlist|p0=mixer|p0=display|p0=button|p0=rescan|(p0=(|player)pref\b.*p2=[^\?]|p2=[^\?].*p0=(|player)pref))',
+	\&Slim::Web::Setup::setup_HTTP             => '.',
+	\&Slim::Web::Setup::handleDebugSettings    => '.',
+	\&Slim::Web::Setup::handleFileTypeSettings => '.',
+	\&Slim::Web::EditPlaylist::editplaylist    => '.',
+	\&Slim::Web::Pages::Status::status         => '(p0=debug|p0=pause|p0=stop|p0=play|p0=sleep|p0=playlist|p0=mixer|p0=display|p0=button|p0=rescan|(p0=(|player)pref\b.*p2=[^\?]|p2=[^\?].*p0=(|player)pref))',
 );
 
 # flag for when we are in a child process

Modified: trunk/server/Slim/Web/Pages.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Web/Pages.pm?rev=10587&r1=10586&r2=10587&view=diff
==============================================================================
--- trunk/server/Slim/Web/Pages.pm (original)
+++ trunk/server/Slim/Web/Pages.pm Fri Nov  3 23:16:09 2006
@@ -43,6 +43,7 @@
 	Slim::Web::HTTP::addPageFunction(qr/^tunein\.(?:htm|xml)/,\&tuneIn);
 	Slim::Web::HTTP::addPageFunction(qr/^update_firmware\.(?:htm|xml)/,\&update_firmware);
 	Slim::Web::HTTP::addPageFunction(qr/^debugging\.(?:htm|xml)/, \&Slim::Web::Setup::handleDebugSettings);
+	Slim::Web::HTTP::addPageFunction(qr/^setupfiletypes\.(?:htm|xml)/, \&Slim::Web::Setup::handleFileTypeSettings);
 
 	# pull in the memory usage module if requested.
 	if (logger('server.memory')->is_info) {

Modified: trunk/server/Slim/Web/Setup.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Web/Setup.pm?rev=10587&r1=10586&r2=10587&view=diff
==============================================================================
--- trunk/server/Slim/Web/Setup.pm (original)
+++ trunk/server/Slim/Web/Setup.pm Fri Nov  3 23:16:09 2006
@@ -1600,149 +1600,7 @@
 		}
 	}# end of setup{'INTERFACE_SETTINGS'} hash
 
-	,'FORMATS_SETTINGS' => {
-		'title' => string('FORMATS_SETTINGS')
-		,'parent' => 'BASIC_SERVER_SETTINGS'
-		,'preEval' => sub {
-			my ($client,$paramref,$pageref) = @_;
-			my $i = 0;
-			my %formats = map {$_ => 1} Slim::Utils::Prefs::getArray('disabledformats');
-			my $formatslistref = Slim::Player::TranscodingHelper::Conversions();
-
-			foreach my $formats (sort {$a cmp $b}(keys %{$formatslistref})) {
-				next if $formats =~ /\-transcode\-/;
-				my $oldVal = exists $formats{$formats} ? 0 : (Slim::Player::TranscodingHelper::checkBin($formats) ? 1 : 0);
-				if (exists $paramref->{"formatslist$i"} && $paramref->{"formatslist$i"} == $oldVal) {
-					delete $paramref->{"formatslist$i"};
-				}
-				$i++;
-			}
-			$pageref->{'Prefs'}{'formatslist'}{'arrayMax'} = $i - 1;
-		}
-		,'postChange' => sub {
-			my ($client,$paramref,$pageref) = @_;
-			my $i = 0;
-			my %formats = map {$_ => 1} Slim::Utils::Prefs::getArray('disabledformats');
-
-			Slim::Utils::Prefs::delete('disabledformats');
-
-			my $formatslistref = Slim::Player::TranscodingHelper::Conversions();
-
-			foreach my $formats (sort {$a cmp $b}(keys %{$formatslistref})) {
-				next if $formats =~ /\-transcode\-/;
-				my $binAvailable = Slim::Player::TranscodingHelper::checkBin($formats);
-
-				# First time through, set the value of the checkbox
-				# based on whether the conversion was explicitly 
-				# disabled or implicitly disallowed because the 
-				# corresponding binary does not exist.
-				if (!exists $paramref->{"formatslist$i"}) {
-					$paramref->{"formatslist$i"} = exists $formats{$formats} ? 0 : ($binAvailable ? 1 : 0);
-				} 
-				# If the conversion pref is checked confirm that 
-				# it's allowed to be checked.
-				elsif ($paramref->{"formatslist$i"} && !$binAvailable) {
-					$paramref->{'warning'} .= 
-						string('SETUP_FORMATSLIST_MISSING_BINARY') .
-							" " . $formatslistref->{$formats}."<br>";
-					$paramref->{"formatslist$i"} = $binAvailable;
-				} 
-
-				# If the conversion pref is not checked, persist
-				# the pref only in the explicit change case: if
-				# the binary is available or if it previously was
-				# explicitly disabled.  This way we don't persist
-				# the pref if it wasn't explicitly changed.
-				if (!$paramref->{"formatslist$i"} && ($binAvailable || exists $formats{$formats})) {
-
-					Slim::Utils::Prefs::push('disabledformats',$formats);
-				}
-
-				$i++;
-			}
-
-			foreach my $group (Slim::Utils::Prefs::getArray('disabledformats')) {
-				delGroup('formats',$group,1);
-			}
-		}
-
-		,'GroupOrder' => [qw(Default FormatsList)]
-		,'Groups' => {
-
-			'Default' => {
-				'PrefOrder' => [qw(disabledextensionsaudio disabledextensionsplaylist)],
-				'GroupHead' => 'SETUP_GROUP_FORMATS_EXTENSIONS',
-			},
-
-			'FormatsList' => {
-				'PrefOrder' => ['formatslist'],
-				'PrefsInTable' => 1,
-				'Suppress_PrefHead' => 1,
-				'Suppress_PrefDesc' => 1,
-				'Suppress_PrefLine' => 1,
-				'Suppress_PrefSub' => 1,
-				'GroupLine' => 1,
-				'GroupSub' => 1,
-				'GroupHead' => 'SETUP_GROUP_FORMATS_CONVERSION',
-				'GroupDesc' => 'SETUP_GROUP_FORMATS_CONVERSION_DESC',
-				'GroupPrefHead' => '<tr><th>&nbsp;' .
-					'</th><th>' . string('FILE_FORMAT') .
-					'</th><th>' . string('STREAM_FORMAT') .
-					'</th><th>' . string('DECODER') .
-					'</th></tr>',
-			}
-		},
-
-		'Prefs' => {
-			'disabledextensionsaudio' => {
-
-				'validate'      => \&Slim::Utils::Validate::acceptAll,
-				'inputTemplate' => 'setup_input_txt.html',
-				'PrefSize'      => 'large',
-			},
-
-			'disabledextensionsplaylist' => {
-
-				'validate'      => \&Slim::Utils::Validate::acceptAll,
-				'inputTemplate' => 'setup_input_txt.html',
-				'PrefSize'      => 'large',
-			},
-
-			'formatslist' => {
-				'isArray' => 1
-				,'dontSet' => 1
-				,'validate' => \&Slim::Utils::Validate::trueFalse
-				,'inputTemplate' => 'setup_input_array_chk.html'
-				,'arrayMax' => undef #set in preEval
-				,'changeMsg' => 'SETUP_FORMATSLIST_CHANGE'
-				,'externalValue' => sub {
-					my ($client,$value,$key) = @_;
-						
-					if ($key =~ /\D+(\d+)$/) {
-						my $formatslistref = Slim::Player::TranscodingHelper::Conversions();
-						my $profile = (sort {$a cmp $b} (grep {$_ !~ /transcode/} (keys %{$formatslistref})))[$1];
-						my @profileitems = split('-', $profile);
-						pop @profileitems; # drop ID
-						$profileitems[0] = string($profileitems[0]);
-						$profileitems[1] = string($profileitems[1]);
-						$profileitems[2] = $formatslistref->{$profile}; #replace model with binary string
-						my $dec = $formatslistref->{$profile};
-						$dec =~ s{
-								^\[(.*?)\](.*?\|?\[(.*?)\].*?)?
-							}{
-								$profileitems[2] = $1;
-								if (defined $3) {$profileitems[2] .= "/".$3;}
-							}iegsx;
-						$profileitems[2] = '(built-in)' unless defined $profileitems[2] && $profileitems[2] ne '-';
-						
-						return join('</td><td>', @profileitems);
-					} else {
-						return $value;
-					}
-				}
-			}
-		}
-	} #end of setup{'formats'}
+	,'FORMATS_SETTINGS' => { }
 
 	,'BEHAVIOR_SETTINGS' => {
 		'title' => string('BEHAVIOR_SETTINGS'),
@@ -2299,6 +2157,86 @@
 	fillAlarmOptions();
 }
 
+sub handleFileTypeSettings {
+	my ($client, $paramRef, $pageSetup) = @_;
+
+	# If this is a settings update
+	if ($paramRef->{'submit'}) {
+
+		Slim::Utils::Prefs::set('disabledextensionsaudio',    $paramRef->{'disabledextensionsaudio'});
+		Slim::Utils::Prefs::set('disabledextensionsplaylist', $paramRef->{'disabledextensionsplaylist'});
+
+		my %disabledformats = map {$_ => 1} Slim::Utils::Prefs::getArray('disabledformats');
+
+		Slim::Utils::Prefs::delete('disabledformats');
+
+		my $formatslistref = Slim::Player::TranscodingHelper::Conversions();
+
+		foreach my $profile (sort {$a cmp $b} (grep {$_ !~ /transcode/} (keys %{$formatslistref}))) {
+			
+			# If the conversion pref is enabled confirm that 
+			# it's allowed to be checked.
+			if ($paramRef->{"$profile"} ne 'DISABLED' && $disabledformats{$profile}) {
+
+				if (!Slim::Player::TranscodingHelper::checkBin($profile)) {
+
+					$paramRef->{'warning'} .= 
+						string('SETUP_FORMATSLIST_MISSING_BINARY') . " $@ ".string('FOR')." $profile<br>";
+
+					Slim::Utils::Prefs::push('disabledformats',$profile);
+				}
+
+			} elsif ($paramRef->{"$profile"} eq 'DISABLED') {
+
+				Slim::Utils::Prefs::push('disabledformats',$profile);
+			}
+		}
+	}
+
+	my %disabledformats = map {$_ => 1} Slim::Utils::Prefs::getArray('disabledformats');
+	my $formatslistref  = Slim::Player::TranscodingHelper::Conversions();
+	my @formats         = (); 
+
+	foreach my $profile (sort {$a cmp $b} (grep {$_ !~ /transcode/} (keys %{$formatslistref}))) {
+
+		my @profileitems = split('-', $profile);
+		my @binaries = 'DISABLED';
+		
+		# TODO: expand this to handle multiple command lines, but use binary case for now
+		my $enabled = Slim::Player::TranscodingHelper::checkBin($profile) ? 1 : 0;
+		
+		# build setup string from commandTable
+		my $cmdline = $formatslistref->{$profile};
+		my $binstring;
+		$cmdline =~ s{
+				^\[(.*?)\](.*?\|?\[(.*?)\].*?)?
+			}{
+				$binstring = $1;
+				if (defined $3) {$binstring .= "/".$3;}
+			}iegsx;
+		push @binaries, (defined $binstring && $binstring ne '-' ? $binstring : 'NATIVE');
+		
+		push @formats, {
+			'profile'  => $profile,
+			'input'    => $profileitems[0],
+			'output'   => $profileitems[1],
+			'binaries' => \@binaries,
+			'enabled'  => $enabled,
+		};
+	}
+	
+	$paramRef->{'formats'} = \@formats;
+	$paramRef->{'page'}       = 'FORMATS_SETTINGS';
+
+	# Needed to generate the drop down settings chooser list.
+	$paramRef->{'additionalLinks'} = \%Slim::Web::Pages::additionalLinks;
+
+	$paramRef->{'disabledextensionsaudio'}  = Slim::Utils::Prefs::get('disabledextensionsaudio');
+	$paramRef->{'disabledextensionsplaylist'} = Slim::Utils::Prefs::get('disabledextensionsplaylist');
+
+	return Slim::Web::HTTP::filltemplatefile('setupfiletypes.html', $paramRef);
+}
+
 sub handleDebugSettings {
 	my ($client, $paramRef, $pageSetup) = @_;
 
@@ -2920,6 +2858,10 @@
 			if ($page eq "DEBUGGING_SETTINGS") {
 
 				Slim::Web::Pages->addPageLinks('setup', { 'DEBUGGING_SETTINGS' => 'debugging.html' });
+
+			} elsif ($page eq "FORMATS_SETTINGS") {
+
+				Slim::Web::Pages->addPageLinks('setup', { 'FORMATS_SETTINGS' => 'setupfiletypes.html' });
 
 			} else {
 

Modified: trunk/server/strings.txt
URL: http://svn.slimdevices.com/trunk/server/strings.txt?rev=10587&r1=10586&r2=10587&view=diff
==============================================================================
--- trunk/server/strings.txt (original)
+++ trunk/server/strings.txt Fri Nov  3 23:16:09 2006
@@ -7644,6 +7644,9 @@
 	SV	Avaktiverad
 	ZH_CN	撤销
 
+NATIVE
+	EN	Native
+
 CLEAR_PLAYLIST
 	CS	Vyčistit playlist
 	DE	Wiedergabeliste Löschen



More information about the checkins mailing list