[Slim-Checkins] r12508 - in /trunk/server: HTML/EN/html/fileselector.js HTML/EN/settings/server/fileselector.html Slim/Control/Queries.pm

mherger at svn.slimdevices.com mherger at svn.slimdevices.com
Wed Aug 8 07:35:08 PDT 2007


Author: mherger
Date: Wed Aug  8 07:35:08 2007
New Revision: 12508

URL: http://svn.slimdevices.com?rev=12508&view=rev
Log:
Bug: n/a
Description: Windows compatibility fixes (who doesn't hate the the slash/backslash mess?)

Modified:
    trunk/server/HTML/EN/html/fileselector.js
    trunk/server/HTML/EN/settings/server/fileselector.html
    trunk/server/Slim/Control/Queries.pm

Modified: trunk/server/HTML/EN/html/fileselector.js
URL: http://svn.slimdevices.com/trunk/server/HTML/EN/html/fileselector.js?rev=12508&r1=12507&r2=12508&view=diff
==============================================================================
--- trunk/server/HTML/EN/html/fileselector.js (original)
+++ trunk/server/HTML/EN/html/fileselector.js Wed Aug  8 07:35:08 2007
@@ -92,20 +92,12 @@
 	
 	// render the tree
 	this.render();
-
-	// select the current setting, if available
-	input = Ext.get(this.input);
-	if (input != null && input.dom.value != null) {
-		path = input.dom.value.split('/');
-		prev = '';
-		target = '|' + root.id;
-		for (x=1; x<path.length; x++) {
-			prev += '/' + path[x];
-			target += '|' + prev;
-		}
-		this.selectPath(target);
+	this.selectMyPath();	
+	// activate button to add path to the selector box
+	gotoBtn = Ext.get(this.gotoBtn);
+	if (gotoBtn != null) {
+		gotoBtn.on('click', this.showPath, this)
 	}
-
 };
 
 
@@ -120,7 +112,66 @@
 		if (input != null && input.dom.value != null) {
 			input.dom.value = node.id;
 		}
-		else alert(this.input);
+	},
+	
+	selectMyPath: function(){
+		// select the current setting, if available
+		input = Ext.get(this.input);
+		if (input != null && input.dom.value != null) {
+			separator = '/';
+			if (input.dom.value.match(/^[a-z]:\\/i)){
+				separator = '\\';
+			}
+
+			path = input.dom.value.split(separator);
+			prev = '';
+			target = '|' + this.root.id;
+
+			// we don't need the root element on *X systems, but on Windows...
+			for (x=(path[0]=='/' ? 1 : 0); x<path.length; x++) {
+				if (path[x] == '') continue;
+				prev += (x==0 ? '' : separator) + path[x];
+				target += '|' + prev;
+			}
+			this.selectPath(target);
+		}
+	},
+
+	// select path (if available) or try to add it to the tree if it's a network share
+	showPath: function(){
+		input = Ext.get(this.input);
+		if (input != null && input.dom.value != null) {
+			Ext.Ajax.request({
+				url: '/jsonrpc.js',
+
+				params: Ext.util.JSON.encode({ 
+					id: 1,
+					method: "slim.request",
+					params: [
+						"",
+						[
+							'pref',
+							'validate',
+							'audiodir',
+							input.dom.value
+						]
+					]
+				}),
+
+				scope: this,
+
+				success: function(response, options){
+					result = Ext.util.JSON.decode(response.responseText);
+					if (result.result.valid == '1') {
+						this.selectMyPath();
+					}
+					else {
+						// need to give some reasonable feedback here...
+						alert("incorrect path or something...:\n" + input.dom.value);
+					}
+				}
+			});
+		}
 	}
 });
 

Modified: trunk/server/HTML/EN/settings/server/fileselector.html
URL: http://svn.slimdevices.com/trunk/server/HTML/EN/settings/server/fileselector.html?rev=12508&r1=12507&r2=12508&view=diff
==============================================================================
--- trunk/server/HTML/EN/settings/server/fileselector.html (original)
+++ trunk/server/HTML/EN/settings/server/fileselector.html Wed Aug  8 07:35:08 2007
@@ -11,20 +11,6 @@
 
 		<script type="text/javascript" src="/html/fileselector.js"></script>
 
-		<script type="text/javascript">		
-			function getSelected() {
-//				var selected = FileTree.tree.getSelectionModel().getSelectedNode();
-selected = Ext.get('audiodir');
-				if (selected != null && selected.id) {
-					alert("[% "SETUP_OK_USING" | string %]\n" + selected.id);
-				}
-				else {
-					alert("nothing selected");
-				}
-			}
-			
-		</script>
-
 		<style type="text/css">
 		<!--
 			.x-tree-node-leaf .x-tree-node-alwayscollapsed {
@@ -37,21 +23,25 @@
 	<body>
 		<h1>A folder selector</h1>
 		<div id="folderselector" style="overflow:auto; height:200px; width:400px;"></div>
-		<input type="text" name="audiodir" id="audiodir" value="[% audiodir %]" size="80">
+		<input type="text" name="audiodir" id="audiodir" value="[% audiodir %]" size="45">
+		<input type="button" name"gotoAudiodir" id="gotoAudiodir" value="&gt;">
 
 		<h1>A file selector (XML files only)</h1>
 		<div id="fileselector" style="overflow:auto; height:200px; width:400px;"></div>
-		<input type="text" name="xml_path" id="xml_path" value="[% xml_path %]" size="80">
+		<input type="text" name="xml_path" id="xml_path" value="[% xml_path %]" size="45">
+		<input type="button" name="gotoXML_path" id="gotoXML_path" value="&gt;">
 	</body>
 	<script type="text/javascript">		
 		new FileSelector('folderselector', {
 			filter: 'foldersonly',
-			input: 'audiodir'
+			input: 'audiodir',
+			gotoBtn: 'gotoAudiodir'
 		});
 
 		new FileSelector('fileselector', {
 			filter: 'filetype:xml',
-			input: 'xml_path'
+			input: 'xml_path',
+			gotoBtn: 'gotoXML_path'
 		});
 	</script>
 </html>

Modified: trunk/server/Slim/Control/Queries.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Control/Queries.pm?rev=12508&r1=12507&r2=12508&view=diff
==============================================================================
--- trunk/server/Slim/Control/Queries.pm (original)
+++ trunk/server/Slim/Control/Queries.pm Wed Aug  8 07:35:08 2007
@@ -830,103 +830,6 @@
 }
 
 
-sub readDirectoryQuery {
-	my $request = shift;
-
-	$log->debug("readDirectoryQuery");
-
-	# check this is the correct query.
-	if ($request->isNotQuery([['readdirectory']])) {
-		$request->setStatusBadDispatch();
-		return;
-	}
-
-	# get our parameters
-	my $index        = $request->getParam('_index');
-	my $quantity     = $request->getParam('_quantity');
-	my $folder       = $request->getParam('folder');
-	my $filter       = $request->getParam('filter');
-
-	use File::Spec::Functions qw(catdir);
-	my @fsitems;
-	if ($folder eq '/' && Slim::Utils::OSDetect::OS() eq 'win') {
-		@fsitems = map { "$_:" } Win32::DriveInfo::DrivesInUse();
-	}
-	else {
-		$filter ||= '';
-
-		my $filterRE = qr/./;
-
-		# search within filename
-		if ($filter =~ /^filename:(.*)/) {
-		#	@fsitems = grep { $_ !~ /$1/i ? not -f catdir($folder, $_) : 1 } @fsitems;
-			$log->debug("filename: $1");
-			$filterRE = qr/$1/i;
-		}
-		elsif ($filter =~ /^filetype:(.*)/) {
-			$log->debug("filetype: $1");
-			$filterRE = qr/\.(?:$1)$/;
-		}
-
-		# get file system items in $folder
-		@fsitems = Slim::Utils::Misc::readDirectory($folder, $filterRE);
-
-		if ($filter =~ /^foldersonly$/) {
-			@fsitems = grep { -d catdir($folder, $_) } @fsitems;
-		}
-		elsif ($filter =~ /^filesonly$/) {
-			@fsitems = grep { -f catdir($folder, $_) } @fsitems;
-		}
-		# search anywhere within path/filename
-		elsif ($filter && $filter !~ /^(?:filename|filetype):/) {
-			@fsitems = grep { catdir($folder, $_) =~ /$filter/i } @fsitems;
-		}
-	}
-
-	my $count = @fsitems;
-	$count += 0;
-	$request->addResult('count', $count);
-
-	my ($valid, $start, $end) = $request->normalize(scalar($index), scalar($quantity), $count);
-
-	if ($valid) {
-		my $idx = $start;
-		my $cnt = 0;
-
-		if (scalar(@fsitems) > 0) {
-			# sort folders < files
-			@fsitems = sort { 
-				my $aa = catdir($folder, $a);
-				my $bb = catdir($folder, $b);
-		
-				if (-d $aa) {
-					if (-d $bb) { uc($a) cmp uc($b) }
-					else { -1 }
-				}
-				else {
-					if (-d $bb) { 1 }
-					else { uc($a) cmp uc($b) }
-				}
-			} @fsitems;
-
-			my $path;
-			for my $item (@fsitems[$start..$end]) {
-				$path = catdir($folder, $item);
-
-				$request->addResultLoop('fsitems_loop', $cnt, 'path', $path);
-				$request->addResultLoop('fsitems_loop', $cnt, 'name', $item );
-				$request->addResultLoop('fsitems_loop', $cnt, 'isfolder', -d $path || 0);
-
-				$idx++;
-				$cnt++;
-			}	
-		}
-	}
-
-	$request->setStatusDone();	
-}
-
-
 sub genresQuery {
 	my $request = shift;
 
@@ -2108,6 +2011,101 @@
 	$request->addResult('_rate', Slim::Player::Source::rate($client));
 	
 	$request->setStatusDone();
+}
+
+
+sub readDirectoryQuery {
+	my $request = shift;
+
+	$log->debug("readDirectoryQuery");
+
+	# check this is the correct query.
+	if ($request->isNotQuery([['readdirectory']])) {
+		$request->setStatusBadDispatch();
+		return;
+	}
+
+	# get our parameters
+	my $index        = $request->getParam('_index');
+	my $quantity     = $request->getParam('_quantity');
+	my $folder       = $request->getParam('folder');
+	my $filter       = $request->getParam('filter');
+
+	use File::Spec::Functions qw(catdir);
+	my @fsitems;
+	if ($folder eq '/' && Slim::Utils::OSDetect::OS() eq 'win') {
+		@fsitems = map { "$_:" } Win32::DriveInfo::DrivesInUse();
+		$folder = '';
+	}
+	else {
+		$filter ||= '';
+
+		my $filterRE = qr/./;
+
+		# search within filename
+		if ($filter =~ /^filename:(.*)/) {
+			$filterRE = qr/$1/i;
+		}
+		elsif ($filter =~ /^filetype:(.*)/) {
+			$filterRE = qr/\.(?:$1)$/;
+		}
+
+		# get file system items in $folder
+		@fsitems = Slim::Utils::Misc::readDirectory(catdir($folder), $filterRE);
+
+		if ($filter =~ /^foldersonly$/) {
+			@fsitems = grep { -d catdir($folder, $_) } @fsitems;
+		}
+		elsif ($filter =~ /^filesonly$/) {
+			@fsitems = grep { -f catdir($folder, $_) } @fsitems;
+		}
+		# search anywhere within path/filename
+		elsif ($filter && $filter !~ /^(?:filename|filetype):/) {
+			@fsitems = grep { catdir($folder, $_) =~ /$filter/i } @fsitems;
+		}
+	}
+
+	my $count = @fsitems;
+	$count += 0;
+	$request->addResult('count', $count);
+
+	my ($valid, $start, $end) = $request->normalize(scalar($index), scalar($quantity), $count);
+
+	if ($valid) {
+		my $idx = $start;
+		my $cnt = 0;
+
+		if (scalar(@fsitems) > 0) {
+			# sort folders < files
+			@fsitems = sort { 
+				my $aa = catdir($folder, $a);
+				my $bb = catdir($folder, $b);
+		
+				if (-d $aa) {
+					if (-d $bb) { uc($a) cmp uc($b) }
+					else { -1 }
+				}
+				else {
+					if (-d $bb) { 1 }
+					else { uc($a) cmp uc($b) }
+				}
+			} @fsitems;
+
+			my $path;
+			for my $item (@fsitems[$start..$end]) {
+				$path = $folder ? catdir($folder, $item) : $item;
+
+				$request->addResultLoop('fsitems_loop', $cnt, 'path', $path);
+				$request->addResultLoop('fsitems_loop', $cnt, 'name', $item );
+				$request->addResultLoop('fsitems_loop', $cnt, 'isfolder', -d $path || 0);
+
+				$idx++;
+				$cnt++;
+			}	
+		}
+	}
+
+	$request->setStatusDone();	
 }
 
 



More information about the checkins mailing list