summaryrefslogtreecommitdiff
path: root/scripts/gdimport.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/gdimport.pl')
-rwxr-xr-xscripts/gdimport.pl254
1 files changed, 254 insertions, 0 deletions
diff --git a/scripts/gdimport.pl b/scripts/gdimport.pl
new file mode 100755
index 0000000..6c8f548
--- /dev/null
+++ b/scripts/gdimport.pl
@@ -0,0 +1,254 @@
+#!/usr/bin/perl
+
+##################################################
+#
+# GiantDisc mp3 Jukebox
+#
+# © 2000, Rolf Brugger
+#
+##################################################
+
+
+# Import script for mp3 tracks.
+#
+# Non interactive batch import of mp3 tracks. Mp3 informations (title, artist, etc)
+# are read from the id3-tags. Well defined id3-tags are mandatory for a
+# inclusion of mp3 tracks and a proper update of the database.
+
+
+use lib '/home/andi/muggle/import';
+use gdparams;
+use gdgentools;
+use gddb;
+use DBI;
+use Cwd; # get current working dir
+
+### main
+ #print ("Args are: @ARGV \n");
+ if ($#ARGV < 0){
+ print "\nusage: gdimport.pl [options] audiofiles... \n";
+ print "\nimports the specified audio files into the GiantDisc system.\n";
+ print "It reads the associated metadata (id3/vorbis tags) of each file and \n";
+ print "creates a track record for each of it. \n";
+ print "Other than in GD, files are not copied!!\n";
+ print "\n";
+ print "Currently supported file formats: mp3, ogg vorbis, flac.\n";
+ print "\n";
+ print "Instead of a set of audio files a directory can be specified. In\n";
+ print "this case, all audio tracks in the directory are imported. This is\n";
+ print "particularly useful to import a bunch of albums with the following\n";
+ print "command typed in the shell:\n";
+ print "\n";
+ print " find . -type d -print -exec gdimport.pl -a {} \\;\n";
+ print "\n";
+ print "Options:\n";
+ print " -t Test. Just display what would be done, whithout changing\n";
+ print " the database or copying/moving/linking files\n";
+ print " It is recommended to test an import session before really doing it\n";
+ print "\n";
+ print " -a Interpret the audio files as tracks of an album. An album record\n";
+ print " is created and the tracks are imported as usual.\n";
+ print " Note: - The first audio file must have a valid album metadata tag\n";
+ print " (i.e. id3 tag) to get the album title.\n";
+ print " - only one album can be imported at a time\n";
+ print " - default values: rating=-, type=1, source=CD.\n";
+ print "\n";
+ print " -i cddbid importdir\n";
+ print " Import all jpg images of the directory 'importdir' and associate\n";
+ print " them to the album specified by 'cddbid' (include prefix '0x', 'xx'!). \n";
+ print "\n";
+ print "\n";
+ exit;
+ }
+
+ #exit;
+ ### Init constants/variables
+ my ($fileformat, $cddbid);
+ my $makealbum = 0;
+ my $album_created = 0;
+ my $linkfiles = 1;
+ my $movefiles = 0;
+ my $moveimages = 0;
+ my $test = 0;
+ my $tracknb = 1;
+ my ($dbh, $trifile);
+ my $base = gdparams::gdbase(); # music files base
+
+ ### Open database connection
+ print ("### Open database connection\n");
+ $dbh = DBI->connect("DBI:mysql:GiantDisc", "music", undef)
+ or die "unable to connect to GiantDisc db";
+
+ ### init other variables
+ my $fileid = gdgentools::last_imported_tracknb($dbh);
+ my @trackrow;
+
+
+ ### extract all options first
+ my $shifted=1;
+ while ($shifted){
+ if ($ARGV[0] eq "-a"){
+ print "set option make album\n";
+ $makealbum = 1;
+ shift @ARGV;
+ }
+ elsif ($ARGV[0] eq "-l"){
+ print "set option link files\n";
+ $linkfiles = 1;
+ shift @ARGV;
+ }
+ elsif ($ARGV[0] eq "-m"){
+ print "set option move files\n";
+ $movefiles = 1;
+ shift @ARGV;
+ }
+ elsif ($ARGV[0] eq "-i"){
+ print "import booklet images\n";
+ $moveimages = 1;
+ shift @ARGV;
+ $cddbid = shift @ARGV;
+ }
+ elsif ($ARGV[0] eq "-t"){
+ print "set option TEST\n";
+ $test = 1;
+ shift @ARGV;
+ }
+ else {
+ $shifted = 0;
+ }
+ }
+
+ if ($moveimages){
+ $dirname = $ARGV[0];
+ if (-d $dirname){
+ # ok. It's a directory
+ gdgentools::import_cover_images($dbh, $dirname, $cddbid, $test);
+ }
+ else{
+ print "Error importing images: '$dirname' is not a directory\n";
+ }
+ exit;
+ }
+
+
+ my @musicfiles;
+ my $dirname="";
+ ### Is the first file argument a directory?
+ if (-d $ARGV[0]){
+ # It's a directory -> read the audio filenames in it
+ $dirname = $ARGV[0];
+ opendir CURDIR, $dirname;
+ @musicfiles = grep /[\.f](mp3$)|(ogg$)|(flac$)/, readdir CURDIR; # match .mp3, .ogg, flac -- Thanks to Merlot!
+# @musicfiles = grep /[\.f][Mmol][Ppga][c3g]$/, readdir CURDIR; # match .mp3, .ogg, flac
+ @musicfiles = sort @musicfiles;
+ closedir CURDIR;
+ chdir $dirname;
+ }
+ else{
+ # the remaining arguments seem to be audio filenames
+ @musicfiles = @ARGV;
+ }
+
+ ### Loop through audio files
+ while ($curfile = shift @musicfiles){
+ $fileformat = gdgentools::audio_filetype($curfile);
+ print "Importing $fileformat file: $curfile\n";
+ $fileid += 1;
+# $audiofile = sprintf("trxx%08ld.%s", $fileid, $fileformat);
+ $audiofile = $dirname ."/". $curfile;
+
+ # get info from metatags
+ $trackrow->{title} = gdgentools::audiofile_title($curfile);
+ $trackrow->{artist} = gdgentools::audiofile_artist($curfile);
+ $trackrow->{genre2} = "";
+ $trackrow->{year} = gdgentools::audiofile_year($curfile);
+ $trackrow->{lang} = "-";
+ $trackrow->{type} = 1; # medium
+ $trackrow->{rating} = 0;
+ $trackrow->{length} = gdgentools::audiofile_lengthsec($curfile);
+ $trackrow->{source} = 0; # CD
+ if(!$album_created){
+ if($makealbum && !$album_created){
+ $trackrow->{sourceid} = sprintf("%08ld", $fileid); # fake CDDB-ID
+ $albumtitle = gdgentools::audiofile_album($curfile);
+ if (length($albumtitle)<1){
+ $albumtitle = $dirname;
+ }
+ }
+ else{
+ $trackrow->{sourceid} = ""; # no CDDB-ID available
+ }
+ }
+ $trackrow->{tracknb} = gdgentools::audiofile_tracknumber($curfile, $tracknb);
+ $trackrow->{mp3file} = $audiofile;
+ $trackrow->{condition} = 0; # OK
+ $trackrow->{voladjust} = 0;
+ $trackrow->{lengthfrm} = 0;
+ $trackrow->{startfrm} = 0;
+ $trackrow->{bpm} = 0;
+ $trackrow->{bitrate} = $fileformat." ".gdgentools::audiofile_bitrate($curfile);
+ $trackrow->{created} = "";
+ $trackrow->{modified} = "";
+ $trackrow->{id} = ""; # a new one will be automatically generated
+
+ # get genre if available and translate to gd-genre
+ $trackrow->{genre1} = gdgentools::audiofile_genre($dbh, $curfile);
+
+ if (length($trackrow->{title})>0 && length($trackrow->{artist})>0){
+ ### create track record
+
+ print "Insert track in database:$trackrow->{artist} - $trackrow->{title} \n";
+ if (!$test){
+ if (-e $curfile){
+ $trid = gddb::insert_track_record($dbh,
+ $trackrow->{artist},$trackrow->{title},
+ $trackrow->{genre1},$trackrow->{genre2},$trackrow->{year},
+ $trackrow->{lang},$trackrow->{type},$trackrow->{rating},
+ $trackrow->{length},$trackrow->{source},$trackrow->{sourceid},
+ $trackrow->{tracknb},$trackrow->{mp3file},
+ $trackrow->{condition},$trackrow->{voladjust},
+ $trackrow->{lengthfrm},$trackrow->{startfrm},$trackrow->{bpm},
+ $trackrow->{bitrate},
+ $trackrow->{created},$trackrow->{id});
+ }
+ else{
+ print "Error: file ".$trackrow->{mp3file}." dows not exist. Skipping\n";
+ }
+ }
+ else{
+ print "TEST>".join ':', " art",$trackrow->{artist}," tit",$trackrow->{title}, ," gen1",$trackrow->{genre1}," gen2",$trackrow->{genre2}," year",$trackrow->{year}, " lang",$trackrow->{lang}," tp",$trackrow->{type}," ratng",$trackrow->{rating}, " len",$trackrow->{length}," src",$trackrow->{source}," cddbid",$trackrow->{sourceid}, " trnb",$trackrow->{tracknb}," file",$trackrow->{mp3file}, " cond",$trackrow->{condition}," vol",$trackrow->{voladjust}, " lenfrm",$trackrow->{lengthfrm}," strt",$trackrow->{startfrm}," bpm",$trackrow->{bpm}, " bitrate",$trackrow->{bitrate}, " created",$trackrow->{created}," id",$trackrow->{id},"\n\n";
+ }
+
+ ### create album record
+ if ($makealbum && !$album_created && length($albumtitle)>0){
+ print "Insert album in database:$trackrow->{artist} - $albumtitle \n";
+ if (!$test){
+ $dbh->do("INSERT INTO album (artist,title,modified,cddbid) "
+ ."VALUES (".$dbh->quote($trackrow->{artist})
+ .",".$dbh->quote($albumtitle)
+ .",CURDATE() "
+ .",'".$trackrow->{sourceid}."') ");
+ }
+ $album_created = 1;
+ }
+
+ ### put mp3file to target directory
+ $tracknb++;
+ }
+ else{
+ print "No title or artist available for $curfile (skipped)\n";
+ }
+
+ }#end loop
+ print("### close database connection\n");
+ $dbh->disconnect;
+
+ exit;
+
+
+
+###############################################################################
+
+
+
+