46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/perl
 | 
						|
 | 
						|
use DBI;
 | 
						|
use DBD::mysql;
 | 
						|
use File::Path;
 | 
						|
use Config::INI::Reader;
 | 
						|
 | 
						|
my $confcontents = Config::INI::Reader->read_file('/etc/homeaudio.ini');
 | 
						|
my $Config = $confcontents->{_};
 | 
						|
 | 
						|
$dsn = "DBI:mysql:" . $Config->{DBNAME} . ":" . $Config->{DBHOST};
 | 
						|
$dbh = DBI->connect($dsn, $Config->{DBUSER}, $Config->{DBPASS}, {RaiseError=>1});
 | 
						|
 | 
						|
$mp3dir = $Config->{MP3DIR};
 | 
						|
$alphabetdir = $mp3dir . "Alphabetical/";
 | 
						|
 | 
						|
# Remove all of the soft links in the Alphabetical folder
 | 
						|
opendir(DIR, $alphabetdir);
 | 
						|
@alphadirs = grep { !/^\./ } readdir(DIR);
 | 
						|
closedir DIR;
 | 
						|
foreach $dir (@alphadirs) {
 | 
						|
   rmtree($alphabetdir . $dir);
 | 
						|
}
 | 
						|
 | 
						|
# Parse the "albums" based on path from the DB
 | 
						|
$sth = $dbh->prepare("SELECT SUBSTRING(path, LENGTH(genre)+2, LENGTH(path)-LENGTH(genre)-2) AS albumdir, genre FROM songs WHERE genre NOT IN (SELECT genre FROM excludes) AND path <> CONCAT(genre, '/') GROUP BY albumdir ORDER BY albumdir");
 | 
						|
$sth->execute();
 | 
						|
 | 
						|
# Let's walk through the album list returned from the DB
 | 
						|
while ( @row = $sth->fetchrow_array() ) {
 | 
						|
   $album = $row[0];
 | 
						|
   $firstchar = substr($album, 0, 1);
 | 
						|
   $genre = $row[1];
 | 
						|
   $currentpath = $alphabetdir . $firstchar . "/";
 | 
						|
   $target = "../../" . $genre . "/" . $album;
 | 
						|
   unless ( -e $currentpath ) {
 | 
						|
      mkdir $currentpath;
 | 
						|
   }
 | 
						|
   $newfile = $currentpath . $album;
 | 
						|
   symlink($target, $newfile);
 | 
						|
}
 | 
						|
 | 
						|
$sth->finish();
 | 
						|
# Close the DB connection
 | 
						|
$dbh->disconnect();
 |