Index: slimserver.pl =================================================================== RCS file: /home/cvs/cvsroot/slim/server/slimserver.pl,v retrieving revision 1.104 diff -u -p -B -r1.104 slimserver.pl --- slimserver.pl 4 Jan 2005 03:38:51 -0000 1.104 +++ slimserver.pl 7 Jan 2005 06:19:02 -0000 @@ -715,8 +715,8 @@ sub initSettings { # warn if there's no audiodir preference # FIXME put the strings in strings.txt - if (!(defined Slim::Utils::Prefs::get("audiodir") && - -d Slim::Utils::Prefs::get("audiodir")) && + if (!(defined Slim::Utils::Prefs::getAudioDir() && + -d Slim::Utils::Prefs::getAudioDir()) && !$quiet && !Slim::Music::iTunes::useiTunesLibrary() && !Slim::Music::MoodLogic::useMoodLogic() && @@ -728,8 +728,8 @@ sub initSettings { } else { - if (defined(Slim::Utils::Prefs::get("audiodir")) && Slim::Utils::Prefs::get("audiodir") =~ m|[/\\]$|) { - $audiodir = Slim::Utils::Prefs::get("audiodir"); + if (defined(Slim::Utils::Prefs::getAudioDir()) && Slim::Utils::Prefs::getAudioDir() =~ m|[/\\]$|) { + $audiodir = Slim::Utils::Prefs::getAudioDir(); $audiodir =~ s|[/\\]$||; Slim::Utils::Prefs::set("audiodir",$audiodir); } Index: Slim/Buttons/Browse.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Buttons/Browse.pm,v retrieving revision 1.25 diff -u -p -B -r1.25 Browse.pm --- Slim/Buttons/Browse.pm 4 Jan 2005 03:38:52 -0000 1.25 +++ Slim/Buttons/Browse.pm 7 Jan 2005 06:19:03 -0000 @@ -46,7 +46,7 @@ sub init { ); for my $name (sort keys %browse) { - if ($name eq 'BROWSE_MUSIC_FOLDER' && !Slim::Utils::Prefs::get('audiodir')) { + if ($name eq 'BROWSE_MUSIC_FOLDER' && !Slim::Utils::Prefs::getAudioDir()) { next; } if ($name eq 'SAVED_PLAYLISTS' && @@ -402,7 +402,7 @@ sub line1 { if ($client->pwd() eq "__playlists") { $line1 = $client->string('SAVED_PLAYLISTS'); - } elsif ((defined $client->pwd() and $client->pwd() =~ m|^[/\\]?$|) || !Slim::Utils::Prefs::get('audiodir')) { + } elsif ((defined $client->pwd() and $client->pwd() =~ m|^[/\\]?$|) || !Slim::Utils::Prefs::getAudioDir()) { $line1 = $client->string('MUSIC'); } else { my $dir; Index: Slim/Buttons/Home.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Buttons/Home.pm,v retrieving revision 1.33 diff -u -p -B -r1.33 Home.pm --- Slim/Buttons/Home.pm 6 Jan 2005 03:59:51 -0000 1.33 +++ Slim/Buttons/Home.pm 7 Jan 2005 06:19:05 -0000 @@ -150,7 +150,7 @@ my %functions = ( if ($client->curSelection($client->curDepth()) eq 'MUSIC') { # add the whole of the music folder to the playlist! Slim::Buttons::Block::block($client, $client->string('ADDING_TO_PLAYLIST'), $client->string('MUSIC')); - Slim::Control::Command::execute($client, ['playlist', 'add', Slim::Utils::Prefs::get('audiodir')], \&Slim::Buttons::Block::unblock, [$client]); + Slim::Control::Command::execute($client, ['playlist', 'add', Slim::Utils::Prefs::getAudioDir()], \&Slim::Buttons::Block::unblock, [$client]); } elsif($client->curSelection($client->curDepth()) eq 'NOW_PLAYING') { $client->showBriefly($client->string('CLEARING_PLAYLIST'), ''); Slim::Control::Command::execute($client, ['playlist', 'clear']); @@ -168,7 +168,7 @@ my %functions = ( } else { Slim::Buttons::Block::block($client, $client->string('NOW_PLAYING_FROM'), $client->string('MUSIC')); } - Slim::Control::Command::execute($client, ['playlist', 'load', Slim::Utils::Prefs::get('audiodir')], \&Slim::Buttons::Block::unblock, [$client]); + Slim::Control::Command::execute($client, ['playlist', 'load', Slim::Utils::Prefs::getAudioDir()], \&Slim::Buttons::Block::unblock, [$client]); } elsif($client->curSelection($client->curDepth()) eq 'NOW_PLAYING') { Slim::Control::Command::execute($client, ['play']); #The address of the %functions hash changes from compile time to run time @@ -430,7 +430,7 @@ sub menuOptions { $menuChoices{""} = ""; for my $menuOption (sort keys %home) { - if ($menuOption eq 'BROWSE_MUSIC_FOLDER' && !Slim::Utils::Prefs::get('audiodir')) { + if ($menuOption eq 'BROWSE_MUSIC_FOLDER' && !Slim::Utils::Prefs::getAudioDir()) { next; } if ($menuOption eq 'SAVED_PLAYLISTS' && !Slim::Utils::Prefs::get('playlistdir')) { Index: Slim/Music/MusicFolderScan.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Music/MusicFolderScan.pm,v retrieving revision 1.17 diff -u -p -B -r1.17 MusicFolderScan.pm --- Slim/Music/MusicFolderScan.pm 4 Jan 2005 02:38:26 -0000 1.17 +++ Slim/Music/MusicFolderScan.pm 7 Jan 2005 06:19:19 -0000 @@ -17,7 +17,7 @@ my $stillScanning = 0; sub startScan { - if (!defined(Slim::Utils::Prefs::get('audiodir')) or not -d Slim::Utils::Prefs::get("audiodir")) { + if (!defined(Slim::Utils::Prefs::getAudioDir()) or not -d Slim::Utils::Prefs::getAudioDir()) { $::d_info && msg("Skipping music folder scan - audiodir is undefined.\n"); doneScanning(); return; @@ -30,17 +30,26 @@ sub startScan { $stillScanning = 1; - $::d_info && msg("Starting music folder scan\n"); - Slim::Utils::Scan::addToList(\@dummylist, Slim::Utils::Prefs::get('audiodir'), 1, 0, \&doneScanning, 0); - Slim::Music::Import::startScan('folder'); + my @dirs = Slim::Utils::Prefs::getAudioDirArray(); + my $dir = pop @dirs; + $::d_info && msg("Starting music folder scan: $dir\n"); + Slim::Utils::Scan::addToList(\@dummylist, $dir, 1, 0, \&doneScanning, @dirs); + Slim::Music::Import::addImporter('folder'); } sub doneScanning { - $::d_info && msg("finished background scan of music folder.\n"); - - $stillScanning = 0; - @dummylist = (); - Slim::Music::Import::endImporter('folder'); + my @dirs = shift; + my $dir = pop @dirs; + + if ($dir) { + $::d_info && msg("Starting music folder scan: $dir\n"); + Slim::Utils::Scan::addToList(\@dummylist, $dir, 1, 0, \&doneScanning, @dirs); + } else { + $::d_info && msg("finished background scan of music folder(s)\n"); + $stillScanning = 0; + @dummylist = (); + Slim::Music::Import::endImporter('folder'); + } } sub stillScanning { Index: Slim/Music/MusicMagic.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Music/MusicMagic.pm,v retrieving revision 1.5 diff -u -p -B -r1.5 MusicMagic.pm --- Slim/Music/MusicMagic.pm 6 Jan 2005 03:59:51 -0000 1.5 +++ Slim/Music/MusicMagic.pm 7 Jan 2005 06:19:20 -0000 @@ -194,7 +194,7 @@ sub convertPath { return $mmsPath if (Slim::Utils::Prefs::get('MMSHost') eq 'localhost'); my $remoteRoot = Slim::Utils::Prefs::get('MMSremoteRoot'); - my $nativeRoot = Slim::Utils::Prefs::get('audiodir'); + my $nativeRoot = Slim::Utils::Prefs::getAudioDir(); my $original = $mmsPath; my $winPath = $mmsPath =~ m/\\/; # test if this is a windows path Index: Slim/Music/iTunes.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Music/iTunes.pm,v retrieving revision 1.65 diff -u -p -B -r1.65 iTunes.pm --- Slim/Music/iTunes.pm 6 Jan 2005 03:59:51 -0000 1.65 +++ Slim/Music/iTunes.pm 7 Jan 2005 06:19:21 -0000 @@ -208,7 +208,7 @@ sub findMusicLibraryFile { my $base = ""; $base = $ENV{HOME} if $ENV{HOME}; - my $audiodir = Slim::Utils::Prefs::get('audiodir'); + my $audiodir = Slim::Utils::Prefs::getAudioDir(); my $autolocate = Slim::Utils::Prefs::get('itunes_library_autolocate'); if ($autolocate) { @@ -296,7 +296,7 @@ sub findMusicLibrary { return $path; } - $path = Slim::Utils::Prefs::get('audiodir'); + $path = Slim::Utils::Prefs::getAudioDir(); return undef unless $path; $::d_itunes && msg("itunes: set iTunes library to audiodir value of: $path\n"); Slim::Utils::Prefs::set('itunes_library_music_path',$path); Index: Slim/Utils/Misc.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Utils/Misc.pm,v retrieving revision 1.62 diff -u -p -B -r1.62 Misc.pm --- Slim/Utils/Misc.pm 4 Jan 2005 08:53:38 -0000 1.62 +++ Slim/Utils/Misc.pm 7 Jan 2005 06:19:29 -0000 @@ -287,7 +287,7 @@ sub fixPath { # the only kind of absolute file we like is one in # the music directory or the playlist directory... - my $audiodir = Slim::Utils::Prefs::get("audiodir"); + my $audiodir = Slim::Utils::Prefs::getAudioDir(); my $savedplaylistdir = Slim::Utils::Prefs::get("playlistdir"); if ($audiodir && $file =~ /^\Q$audiodir\E/) { @@ -388,7 +388,7 @@ sub descendVirtual { sub virtualToAbsolute { my $virtual = shift; my $recursion = shift; - my $curdir = Slim::Utils::Prefs::get('audiodir'); + my $curdir = Slim::Utils::Prefs::getAudioDir(); my $playdir = Slim::Utils::Prefs::get('playlistdir'); if (!defined($virtual)) { $virtual = "" }; @@ -419,7 +419,7 @@ sub virtualToAbsolute { $recursion = 1; } else { - $curdir = Slim::Utils::Prefs::get('audiodir'); + $curdir = Slim::Utils::Prefs::getAudioDir(); } return undef if (!$curdir); Index: Slim/Utils/Prefs.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Utils/Prefs.pm,v retrieving revision 1.98 diff -u -p -B -r1.98 Prefs.pm --- Slim/Utils/Prefs.pm 6 Jan 2005 03:59:51 -0000 1.98 +++ Slim/Utils/Prefs.pm 7 Jan 2005 06:19:30 -0000 @@ -389,6 +389,17 @@ sub clientGetArray { assert($client); return getArray($client->id() . "-" . $arrayPref); } + +sub getAudioDir { + my @dirs = split(/[,;]\s?/,get('audiodir')); + return $dirs[0]; +} + +sub getAudioDirArray { + my @dirs = split(/[,;]\s?/,get('audiodir')); + return @dirs; +} + # get($pref) sub get { return $prefs{$_[0]} Index: Slim/Web/History.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Web/History.pm,v retrieving revision 1.11 diff -u -p -B -r1.11 History.pm --- Slim/Web/History.pm 8 Oct 2004 06:04:29 -0000 1.11 +++ Slim/Web/History.pm 7 Jan 2005 06:19:32 -0000 @@ -65,7 +65,7 @@ sub load { my $filename = catfile(Slim::Utils::Prefs::get('playlistdir'),'__history.m3u'); open (FILE,$filename) or return undef; - @history = Slim::Formats::Parse::M3U(\*FILE, Slim::Utils::Prefs::get('audiodir')); + @history = Slim::Formats::Parse::M3U(\*FILE, Slim::Utils::Prefs::getAudioDir()); close FILE; return undef; Index: Slim/Web/Olson.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Web/Olson.pm,v retrieving revision 1.9 diff -u -p -B -r1.9 Olson.pm --- Slim/Web/Olson.pm 4 Jan 2005 03:38:53 -0000 1.9 +++ Slim/Web/Olson.pm 7 Jan 2005 06:19:32 -0000 @@ -35,7 +35,7 @@ sub olsonmain { #if (Slim::Music::iTunes::useiTunesLibrary()) { # $params->{'itunes'} = 1; #} - if (defined(Slim::Utils::Prefs::get('audiodir'))) { + if (defined(Slim::Utils::Prefs::getAudioDir())) { $params->{'audiodir'} = 1; } @@ -236,7 +236,7 @@ sub olsondetail { #if (Slim::Music::iTunes::useiTunesLibrary()) { # $params->{'itunes'} = 1; #} - if (defined(Slim::Utils::Prefs::get('audiodir'))) { + if (defined(Slim::Utils::Prefs::getAudioDir())) { $params->{'audiodir'} = 1; } Index: Slim/Web/Pages.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Web/Pages.pm,v retrieving revision 1.116 diff -u -p -B -r1.116 Pages.pm --- Slim/Web/Pages.pm 6 Jan 2005 20:50:24 -0000 1.116 +++ Slim/Web/Pages.pm 7 Jan 2005 06:19:34 -0000 @@ -343,7 +343,7 @@ sub home { $params->{'noartwork'} = 1; } - if (Slim::Utils::Prefs::get('audiodir')) { + if (Slim::Utils::Prefs::getAudioDir()) { addLinks("browse",{'BROWSE_MUSIC_FOLDER' => "browse.html?dir="}); } else { addLinks("browse",{'BROWSE_MUSIC_FOLDER' => undef}); @@ -469,7 +469,7 @@ sub browser { } else { - if (!Slim::Utils::Prefs::get("audiodir")) { + if (!Slim::Utils::Prefs::getAudioDir()) { $::d_http && msg("no audiodir, so we can't save a file!!\n"); return Slim::Web::HTTP::filltemplatefile("badpath.html", $params); } @@ -1414,7 +1414,7 @@ sub _addSongInfo { $loc = Slim::Utils::Misc::pathFromFileURL($loc); } - my $curdir = Slim::Utils::Prefs::get('audiodir'); + my $curdir = Slim::Utils::Prefs::getAudioDir(); if (!$curdir) { $downloadurl = undef; @@ -1876,7 +1876,7 @@ sub browseid3_old { $params->{'warn'} = 1; } - if (defined(Slim::Utils::Prefs::get('audiodir'))) { + if (defined(Slim::Utils::Prefs::getAudioDir())) { $params->{'audiodir'} = 1; } Index: Slim/Web/Setup.pm =================================================================== RCS file: /home/cvs/cvsroot/slim/server/Slim/Web/Setup.pm,v retrieving revision 1.117 diff -u -p -B -r1.117 Setup.pm --- Slim/Web/Setup.pm 17 Dec 2004 10:09:38 -0000 1.117 +++ Slim/Web/Setup.pm 7 Jan 2005 06:19:38 -0000 @@ -3130,18 +3130,22 @@ sub validateIsDir { sub validateIsAudioDir { my $val = shift; + my @dirs = split(/[,;]\s?/,$val); my $allowEmpty = shift; - if (-d $val) { - $val =~ s|[/\\]$||; - return $val; - } elsif ($allowEmpty && defined($val) && $val eq '') { - return $val; - } else { - print $!; - return (undef, "SETUP_BAD_DIRECTORY") ; + for my $dir (@dirs) { + if (-d $dir) { + $dir =~ s|[/\\]$||; + next; + } elsif ($allowEmpty && defined($dir) && $dir eq '') { + next; + } else { + print "$dir - $!"; + return (undef, "SETUP_BAD_DIRECTORY") ; + } } + return $val; } sub validateHasText {