How to verify your amarok 2 collection database

I’ve written a small perl script that traverses one folter hierarchy and checks every mp3 file found against an amarok 2 .4 collection database. The output is a list of all mp3 files in the folder structure that are not in the database.

#!/usr/bin/env perl
require File::Find;
require DBI;
require DBD::mysql;

#put your database details here
#
my $database = '';
my $dbuser   = '';
my $dbpass   = '';
my $dbhost   = '';
# find(\&wanted, @directories_to_search);
# sub wanted { ... }

my $dbh;
my $sth;
my $result;
 
$dbh = DBI->connect('DBI:mysql:'.$database.';host='.$dbhost, $dbuser, $dbpass) or die "could not connect to database";

# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.

# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;

sub wanted;
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/eregion/mp3');
exit;

sub wanted {
 my ($dev,$ino,$mode,$nlink,$uid,$gid);
 (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
 /^.*\.mp3\z/si &&
 -f _
 && findincollection($name);
 
}

sub findincollection
{
 my $query = "select count(*) from urls where rpath like \"%" . $name . "%\"\;";
 $sth = $dbh->prepare($query);
 $sth->execute();
 $result = $sth->fetch->[0];
 if ($result!=1) {
 print $name . "\n";
 }
 }

1 thought on “How to verify your amarok 2 collection database

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: