[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=">">
<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=">">
</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