[perl-CDDB_get] Import

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



commit 8afa240702426934c7c02ff99fb6656c3f351fe8
Author: Petr Písař <ppisar@xxxxxxxxxx>
Date:   Thu Dec 6 09:31:22 2012 +0100

    Import

 .gitignore                                         |    1 +
 ...get-2.28-Do-not-include-current-directory.patch |   22 +
 CDDB_get-2.28-cddb.pl-is-not-a-library.patch       |  925 ++++++++++++++++++++
 perl-CDDB_get.spec                                 |   58 ++
 sources                                            |    1 +
 5 files changed, 1007 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index e69de29..954e4cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/CDDB_get-2.28.tar.gz
diff --git a/CDDB_get-2.28-Do-not-include-current-directory.patch b/CDDB_get-2.28-Do-not-include-current-directory.patch
new file mode 100644
index 0000000..e44b727
--- /dev/null
+++ b/CDDB_get-2.28-Do-not-include-current-directory.patch
@@ -0,0 +1,22 @@
+From 2f0f46bad8ba1c942190aebd7a8223398484bd2c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@xxxxxxxxxx>
+Date: Fri, 14 Sep 2012 15:24:35 +0200
+Subject: [PATCH 1/2] Do not include current directory
+
+---
+ cddb.pl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cddb.pl b/cddb.pl
+index f7f22b0..9ca7ea7 100755
+--- a/cddb.pl
++++ b/cddb.pl
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl -I.
++#!/usr/bin/perl
+ #
+ #  CDDB - Read the CDDB entry for an audio CD in your drive
+ #
+-- 
+1.7.11.4
+
diff --git a/CDDB_get-2.28-cddb.pl-is-not-a-library.patch b/CDDB_get-2.28-cddb.pl-is-not-a-library.patch
new file mode 100644
index 0000000..35e1022
--- /dev/null
+++ b/CDDB_get-2.28-cddb.pl-is-not-a-library.patch
@@ -0,0 +1,925 @@
+From a3a4b7a330f76def505dda32e1b58158678d2778 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@xxxxxxxxxx>
+Date: Fri, 14 Sep 2012 15:26:23 +0200
+Subject: [PATCH 2/2] cddb.pl is not a library
+
+---
+ Makefile.PL     |   2 +-
+ cddb.pl         | 442 --------------------------------------------------------
+ scripts/cddb.pl | 442 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 443 insertions(+), 443 deletions(-)
+ delete mode 100755 cddb.pl
+ create mode 100755 scripts/cddb.pl
+
+diff --git a/Makefile.PL b/Makefile.PL
+index 81083dc..064a9e2 100644
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -4,7 +4,7 @@ use ExtUtils::MakeMaker;
+ WriteMakefile(
+   'NAME'	   => 'CDDB_get',
+   'VERSION_FROM' => 'CDDB_get.pm', # finds $VERSION
+-  'EXE_FILES'    => ['cddb.pl'],
++  'EXE_FILES'    => ['scripts/cddb.pl'],
+   'ABSTRACT'	   => "This module/script gets the CDDB info for an audio cd.",
+   'AUTHOR'       => "Armin Obersteiner <armin at xos dot net>",
+ #  'PREREQ_PM'    => {
+diff --git a/cddb.pl b/cddb.pl
+deleted file mode 100755
+index 9ca7ea7..0000000
+--- a/cddb.pl
++++ /dev/null
+@@ -1,442 +0,0 @@
+-#!/usr/bin/perl
+-#
+-#  CDDB - Read the CDDB entry for an audio CD in your drive
+-#
+-#  This module/script gets the CDDB info for an audio cd. You need
+-#  LINUX, a cdrom drive and an active internet connection in order
+-#  to do that.
+-#
+-#  (c) 2004 Armin Obersteiner <armin@xxxxxxx>
+-#
+-#  LICENSE
+-#
+-#  This library is released under the same conditions as Perl, that
+-#  is, either of the following:
+-#
+-#  a) the GNU General Public License Version 2 as published by the
+-#  Free Software Foundation,
+-#
+-#  b) the Artistic License.
+-#
+-
+-#use CDDB_get qw( get_cddb get_discids );
+-
+-use Data::Dumper;
+-use Getopt::Std;
+-
+-use strict;
+-
+-my %option = ();
+-getopts("oghdtsi:SfDlOFc:H:CIRGP", \%option); 
+-
+-if($option{h}) {
+-  print "$0: gets CDDB info of a CD\n";
+-  print "  no argument - gets CDDB info of CD in your drive\n";
+-  print "  -c  device (other than default device)\n";
+-  print "  -o  offline mode - just stores CD info\n";
+-  print "  -d  output in xmcd format\n";
+-  print "  -s  save in xmcd format\n";
+-  print "  -i  db. one of: mysql, pg, oracle, sqlite\n";
+-  print "  -O  overwrite file or db\n";
+-  print "  -t  output toc\n";
+-  print "  -l  output lame command\n";
+-  print "  -f  http mode (e.g. through firewalls)\n";
+-  print "  -F  some stateful firewalls/http proxies need additional newlines\n";
+-  print "  -g  get CDDB info for stored CDs\n";
+-  print "  -I  non interactive mode\n";
+-  print "  -H  CDDB hostname\n";
+-  print "  -C  use local cache\n";
+-  print "  -R  readonly cache\n";
+-  print "  -G  cache has not the diskid as filenames (much slower)\n";
+-  print "  -P  cache path (default: /tmp/xmcd)\n";
+-  print "  -D  put CDDB_get in debug mode\n";
+-  exit;
+-}
+-
+-my %config;
+-
+-my $diskid;
+-my $total;
+-my $toc;
+-my $savedir="/tmp/cddb";
+-my $xmcddir="/tmp/xmcd";
+-
+-if($option{C}) {
+-  # use CDDB_cache qw( get_cddb get_discids );
+-  require CDDB_cache;
+-  CDDB_cache->import( qw( get_cddb get_discids ) );
+-
+-  $CDDB_cache::debug=1 if($option{D});
+-  $CDDB_cache::readonly=1 if($option{R});
+-  $CDDB_cache::grep=1 if($option{G});
+-
+-  $CDDB_cache::dir="/tmp/xmcd"; # default
+-  # $CDDB_cache::dir="/opt/kde2/share/apps/kscd/cddb";
+-  $CDDB_cache::dir=$option{P} if($option{P});
+-
+-} else {
+-  # use CDDB_get qw( get_cddb get_discids );
+-  require CDDB_get;
+-  CDDB_get->import( qw( get_cddb get_discids ) );
+-}
+-
+-$CDDB_get::debug=1 if($option{D});
+-
+-# following variables just need to be declared if different from defaults
+-# defaults are listed below (cdrom default is os specific)
+-
+-# $config{CDDB_HOST}="freedb.freedb.org";	# set cddb host
+-if($option{H}) {
+-  $config{CDDB_HOST}=$option{H};
+-}
+-# $config{CDDB_PORT}=8880; 			# set cddb port
+-# $config{CDDB_MODE}="cddb";			# set cddb mode: cddb or http, this is switched with -f
+-# $config{CD_DEVICE}="/dev/cdrom";		# set cd device
+-
+-# $config{HELLO_ID} ="root nowhere.com fastrip 0.77"; # hello string: username hostname clientname version
+-# $config{PROTO_VERSION} = 5; # cddb protokol version
+-
+-
+-# get proxy settings for cddb mode
+-
+-$config{HTTP_PROXY}=$ENV{http_proxy} if $ENV{http_proxy}; # maybe wanna use a proxy ?
+-
+-$config{CDDB_MODE}="http" if($option{f}); 
+-if($option{F}) {
+-  $config{CDDB_MODE}="http";
+-  $config{FW}=1;
+-}
+-
+-$config{CD_DEVICE}=$option{c} if $option{c};
+-
+-# user interaction welcome?
+-
+-$config{input}=1;   # 1: ask user if more than one possibility
+-                    # 0: no user interaction
+-$config{multi}=0;   # 1: do not ask user and get all of them
+-                    # 0: just the first one
+-
+-$config{input}=0 if($option{I});
+-
+-my %db;
+-
+-if($option{i}) {
+-  require DBI;
+-
+-  $db{table_cds} = "cds";
+-  $db{table_tracks} = "tracks";
+-
+-  # not needed for sqlite
+-  $db{host} = "localhost";
+-  $db{port} = "3306";
+-
+-  # not needed for oracle/sqlite
+-  $db{name} = "mp3-test";
+-
+-  # just for oracle
+-  $db{sid} = "xxx";
+-  $db{home} = "xxx";
+-
+-  # just for sqlite
+-  $db{file} = "xxx";
+-
+-  # not needed for sqlite
+-  $db{user} = "root";
+-  $db{passwd} = "xxx";
+-
+-
+-  if($option{i} eq "mysql") {
+-    $db{connect} = sub { "dbi:mysql:database=$db{name};host=$db{host};port=$db{port}", $db{user}, $db{passwd} };
+-  } elsif($option{i} eq "pg") {
+-    $db{connect} = sub { "dbi:Pg:dbname=$db{dbname};host=$db{host};port=$db{port}", $db{user}, $db{passwd} };
+-  } elsif($option{i} eq "oracle") {
+-    $db{connect} = sub { "dbi:Oracle:host=$db{host};sid=$db{sid};port=$db{port}", $db{user}, $db{passwd} };
+-    $ENV{ORACLE_HOME} = $db{home};
+-  } elsif($option{i} eq "sqlite") {
+-    $db{connect} = sub { "dbi:SQLite:dbname=$db{file}","","" };
+-  } else {
+-    die "unkown database: $option{i}";
+-  }
+-}
+-  
+-if($option{o}) {
+-  my $ids=get_discids($config{CD_DEVICE});
+-
+-  unless(-e $savedir) {
+-    mkdir $savedir,0755 or die "cannot create $savedir";
+-  }
+-
+-  open OUT,">$savedir/$ids->[0]\_$$" or die "cannot open outfile";
+-  print OUT Data::Dumper->Dump($ids,["diskid","total","toc"]);
+-  close OUT;
+-
+-  print STDERR "saved in: $savedir/$ids->[0]\_$$\n";
+-  exit;
+-}
+-
+-if($option{g}) {
+-  print STDERR "retrieving stored cds ...\n";
+-
+-  opendir(DIR, $savedir) or die "cannot opendir $savedir";
+-  while (defined(my $file = readdir(DIR))) {
+-    next if($file =~ /^\./);
+-    print "\n";
+-
+-    my $in=`/bin/cat $savedir/$file`;
+-    my $exit  = $? >> 8; 
+-
+-    if($exit>0) {
+-      die "error reading file";
+-    }
+-
+-    unless($in=~ m/^\$diskid\s+=\s+('\d+'|\d+);\s+         # $diskid
+-                    \$total\s+=\s+('\d+'|\d+);\s+          # $total
+-                    \$toc\s+=\s+\[\s+                      # $toc
+-                      (\{\s+
+-                        ('(frame|frames|min|sec|data)'\s+=\>\s+('\d+'|\d+)(,|)\s+){5}
+-                      \}(,|)\s+)+
+-                    \];\s+$/xs) {
+-      print "not a save file: $savedir/$file\n";
+-      next;                 
+-    }
+-
+-    eval $in;
+-
+-    if($@) {
+-      print "not a save file (eval error): $savedir/$file\n";
+-      next;
+-    }
+-
+-    my %cd=get_cddb(\%config,[$diskid,$total,$toc]);
+-
+-    unless(defined $cd{title}) {
+-      print "no cddb entry found: $savedir/$file\n";
+-    }
+-
+-    unlink "$savedir/$file";
+-
+-    next unless defined $cd{title};
+-
+-    if($option{d} || $option{s}) {
+-      print_xmcd(\%cd,$option{s});
+-    } elsif($option{i}) {
+-      insert_db(\%cd,\%db);
+-    } elsif($option{l}) {
+-      print_lame(\%cd);
+-    } else {
+-      print_cd(\%cd);
+-    }
+-  }
+-  closedir(DIR);
+-  exit;
+-}
+-
+-# get it on
+-
+-unless($config{multi}) {
+-  my %cd;
+-
+-  # for those who don't like 'die' in modules ;-)
+-  eval { 
+-    %cd = get_cddb(\%config);
+-  };
+-  if ($@) {
+-    print "fatal error: $!\n";
+-    exit;
+-  }
+-
+-  print Dumper(\%cd) if $option{D};
+-
+-  unless(defined $cd{title}) {
+-    die "no cddb entry found";
+-  }
+-
+-  # do somthing with the results
+-
+-  if($option{d} || $option{s}) {
+-    print_xmcd(\%cd,$option{s});
+-  } elsif($option{i}) {
+-    insert_db(\%cd,\%db);
+-  } elsif($option{l}) {
+-    print_lame(\%cd);
+-  } else {
+-    print_cd(\%cd);
+-  }
+-} else { 
+-  my @cd;
+-
+-  # for those who don't like 'die' in modules ;-)
+-  eval { 
+-    @cd=get_cddb(\%config);
+-  };
+-  if ($@) {
+-    print "fatal error: $!\n";
+-    exit;
+-  }
+-
+-  print Dumper(\@cd) if $option{D};
+-
+-  for my $c (@cd) {
+-    unless(defined $c->{title}) {
+-      die "no cddb entry found";
+-    }
+-
+-    # do somthing with the results
+-
+-    if($option{d} || $option{s}) {
+-      print_xmcd($c,$option{s});
+-    } elsif($option{i}) {
+-      insert_db($c,\%db);
+-    } elsif($option{l}) {
+-      print_lame($c);
+-      print "\n";
+-    } else {
+-      print_cd($c);
+-      print "\n";
+-    }
+-  }
+-}
+-
+-exit;
+-
+-
+-# subroutines
+-
+-sub print_cd {
+-  my $cd=shift;
+-
+-  print "artist: $cd->{artist}\n";
+-  print "title: $cd->{title}\n";
+-  print "category: $cd->{cat}\n";
+-  print "genre: $cd->{genre}\n" if($cd->{genre});
+-  print "year: $cd->{year}\n" if($cd->{year});
+-  print "cddbid: $cd->{id}\n";
+-  print "trackno: $cd->{tno}\n";
+-
+-  my $n=1;
+-  foreach my $i ( @{$cd->{track}} ) {
+-    if($option{t}) {
+-      my $from=$cd->{frames}[$n-1];
+-      my $to=$cd->{frames}[$n]-1;
+-      my $dur=$to-$from;
+-      my $min=int($dur/75/60);
+-      my $sec=int($dur/75)-$min*60;
+-      my $frm=($dur-$sec*75-$min*75*60)*100/75;
+-      my $out=sprintf "track %2d: %8d - %8d  [%2d:%.2d.%.2d]: $i\n",$n,$from,$to,$min,$sec,$frm;
+-      print "$out"; 
+-    } else {
+-      print "track $n: $i\n";
+-    }
+-    $n++;
+-  }  
+-}
+-
+-sub print_xmcd {
+-  my $cd=shift;
+-  my $save=shift;
+-
+-  *OUT=*STDOUT;
+-
+-  if($save) {
+-    unless(-e $xmcddir) {
+-      mkdir $xmcddir,0755 or die "cannot create $savedir";
+-    }
+-
+-    unless($option{O}) {
+-      if(-e "$xmcddir/$cd->{id}") {
+-        print "XMCD file exists\n";
+-        exit;
+-      }
+-    }
+-
+-    open XMCD,">$xmcddir/$cd->{id}" or die "cannot open outfile";
+-    *OUT=*XMCD;
+-  }
+-
+-  for(@{$cd->{raw}}) {
+-    print OUT "$_";
+-  }
+-
+-  if($save) {
+-    print STDERR "saved in: $xmcddir/$cd->{id}\n";
+-    close OUT;
+-  }
+-}  
+-
+-sub insert_db {
+-  my $cd=shift;
+-  my $db=shift;
+-
+-  my ($artist, $title, $category, $cddbid, $trackno) =
+-    ($cd->{artist}, $cd->{title}, $cd->{cat}, $cd->{id}, $cd->{tno});
+-
+-  my $sql = "SELECT cddbid FROM $db->{table_cds} WHERE CDDBID = \'$cddbid\'";
+-  my $dbh = DBI->connect($db->{connect}->()) or die "cannot connect to db: $DBI::errstr";
+-  my $sth = $dbh->prepare($sql);
+-  my $r = $sth->execute or die "cannot check for cd: $DBI::errstr";
+-  if ($r == 1) {
+-    print "cd already in db\n";
+-    if($option{O}) {
+-      my $sql = "DELETE FROM $db->{table_cds} WHERE CDDBID = \'$cddbid\'";
+-      my $sth = $dbh->prepare($sql);
+-      my $r = $sth->execute or die "cannot delete from $db->{table_cds}: $DBI::errstr";
+-      $sql = "DELETE FROM $db->{table_tracks} WHERE CDDBID = \'$cddbid\'";
+-      $sth = $dbh->prepare($sql);
+-      $r = $sth->execute or die "cannot delete from $db->{table_tracks}: $DBI::errstr";
+-    } else {
+-      exit;
+-    }
+-  }
+-
+-  $title =~ s/'/\\'/g;
+-  $artist =~ s/'/\\'/g;
+-  $category =~ s/'/\\'/g;
+-
+-  $sql = "INSERT INTO $db->{table_cds} (cddbid, artist, title, category, tracks) VALUES (\'$cddbid\', \'$artist\', \'$title\', \'$category\' , \'$trackno\')";
+-  $sth = $dbh->prepare($sql);
+-  $r = $sth->execute or die "failed to insert cd: $DBI::errstr";
+-
+-  my $n=1;
+-
+-  print "titel: $title\n";
+-  print "artist: $artist\n";
+-  print "category: $category\n\n";
+-
+-  for my $t ( @{$cd->{track}} ) {
+-    $t =~ s/'/\\'/g;
+-    my $dur=($cd->{frames}[$n]-1-$cd->{frames}[$n-1])/75;
+-    my $hour=int($dur/3600);
+-    my $min=int($dur/60-$hour*60);
+-    my $sec=$dur-$hour*3600-$min*60;
+-    my $fr=substr(sprintf("%5.2f",$sec-int($sec)),2,3);
+-    my $time=sprintf "%.2d:%.2d:%.2d%s",$hour,$min,int($sec),$fr;
+-
+-    print "track $n: $t  [$time]\n";
+-    
+-    my $sql = "INSERT INTO $db->{table_tracks} (cddbid, title, trackno, time) 
+-               VALUES (\'$cddbid\',\'$t\', \'$n\', \'$time\')";
+-    my $sth = $dbh->prepare($sql);
+-    my $r = $sth->execute or die "failed to insert track $n: $DBI::errstr";
+-    $n++;
+-  }
+-
+-  $dbh->disconnect();
+-} 
+-
+-sub print_lame {
+-  my $cd=shift;
+-
+-  print_cd($cd);
+-  print "\n";
+-
+-  my $n=1;
+-  for my $i ( @{$cd->{track}} ) {
+-    $i =~ s/"/'/g;
+-    print 'lame --tl "'.$cd->{title}.'" --ta "'.$cd->{artist}.'" --tt "'.$i.'" ';
+-    printf "audio_%02d.wav ",$n;
+-    $i =~ s/[^\S]|['"\/]/_/g;
+-    $i =~ s/_+-_+/-/g;
+-    print " $i.mp3\n";
+-    $n++;
+-  }
+-}
+diff --git a/scripts/cddb.pl b/scripts/cddb.pl
+new file mode 100755
+index 0000000..9ca7ea7
+--- /dev/null
++++ b/scripts/cddb.pl
+@@ -0,0 +1,442 @@
++#!/usr/bin/perl
++#
++#  CDDB - Read the CDDB entry for an audio CD in your drive
++#
++#  This module/script gets the CDDB info for an audio cd. You need
++#  LINUX, a cdrom drive and an active internet connection in order
++#  to do that.
++#
++#  (c) 2004 Armin Obersteiner <armin@xxxxxxx>
++#
++#  LICENSE
++#
++#  This library is released under the same conditions as Perl, that
++#  is, either of the following:
++#
++#  a) the GNU General Public License Version 2 as published by the
++#  Free Software Foundation,
++#
++#  b) the Artistic License.
++#
++
++#use CDDB_get qw( get_cddb get_discids );
++
++use Data::Dumper;
++use Getopt::Std;
++
++use strict;
++
++my %option = ();
++getopts("oghdtsi:SfDlOFc:H:CIRGP", \%option); 
++
++if($option{h}) {
++  print "$0: gets CDDB info of a CD\n";
++  print "  no argument - gets CDDB info of CD in your drive\n";
++  print "  -c  device (other than default device)\n";
++  print "  -o  offline mode - just stores CD info\n";
++  print "  -d  output in xmcd format\n";
++  print "  -s  save in xmcd format\n";
++  print "  -i  db. one of: mysql, pg, oracle, sqlite\n";
++  print "  -O  overwrite file or db\n";
++  print "  -t  output toc\n";
++  print "  -l  output lame command\n";
++  print "  -f  http mode (e.g. through firewalls)\n";
++  print "  -F  some stateful firewalls/http proxies need additional newlines\n";
++  print "  -g  get CDDB info for stored CDs\n";
++  print "  -I  non interactive mode\n";
++  print "  -H  CDDB hostname\n";
++  print "  -C  use local cache\n";
++  print "  -R  readonly cache\n";
++  print "  -G  cache has not the diskid as filenames (much slower)\n";
++  print "  -P  cache path (default: /tmp/xmcd)\n";
++  print "  -D  put CDDB_get in debug mode\n";
++  exit;
++}
++
++my %config;
++
++my $diskid;
++my $total;
++my $toc;
++my $savedir="/tmp/cddb";
++my $xmcddir="/tmp/xmcd";
++
++if($option{C}) {
++  # use CDDB_cache qw( get_cddb get_discids );
++  require CDDB_cache;
++  CDDB_cache->import( qw( get_cddb get_discids ) );
++
++  $CDDB_cache::debug=1 if($option{D});
++  $CDDB_cache::readonly=1 if($option{R});
++  $CDDB_cache::grep=1 if($option{G});
++
++  $CDDB_cache::dir="/tmp/xmcd"; # default
++  # $CDDB_cache::dir="/opt/kde2/share/apps/kscd/cddb";
++  $CDDB_cache::dir=$option{P} if($option{P});
++
++} else {
++  # use CDDB_get qw( get_cddb get_discids );
++  require CDDB_get;
++  CDDB_get->import( qw( get_cddb get_discids ) );
++}
++
++$CDDB_get::debug=1 if($option{D});
++
++# following variables just need to be declared if different from defaults
++# defaults are listed below (cdrom default is os specific)
++
++# $config{CDDB_HOST}="freedb.freedb.org";	# set cddb host
++if($option{H}) {
++  $config{CDDB_HOST}=$option{H};
++}
++# $config{CDDB_PORT}=8880; 			# set cddb port
++# $config{CDDB_MODE}="cddb";			# set cddb mode: cddb or http, this is switched with -f
++# $config{CD_DEVICE}="/dev/cdrom";		# set cd device
++
++# $config{HELLO_ID} ="root nowhere.com fastrip 0.77"; # hello string: username hostname clientname version
++# $config{PROTO_VERSION} = 5; # cddb protokol version
++
++
++# get proxy settings for cddb mode
++
++$config{HTTP_PROXY}=$ENV{http_proxy} if $ENV{http_proxy}; # maybe wanna use a proxy ?
++
++$config{CDDB_MODE}="http" if($option{f}); 
++if($option{F}) {
++  $config{CDDB_MODE}="http";
++  $config{FW}=1;
++}
++
++$config{CD_DEVICE}=$option{c} if $option{c};
++
++# user interaction welcome?
++
++$config{input}=1;   # 1: ask user if more than one possibility
++                    # 0: no user interaction
++$config{multi}=0;   # 1: do not ask user and get all of them
++                    # 0: just the first one
++
++$config{input}=0 if($option{I});
++
++my %db;
++
++if($option{i}) {
++  require DBI;
++
++  $db{table_cds} = "cds";
++  $db{table_tracks} = "tracks";
++
++  # not needed for sqlite
++  $db{host} = "localhost";
++  $db{port} = "3306";
++
++  # not needed for oracle/sqlite
++  $db{name} = "mp3-test";
++
++  # just for oracle
++  $db{sid} = "xxx";
++  $db{home} = "xxx";
++
++  # just for sqlite
++  $db{file} = "xxx";
++
++  # not needed for sqlite
++  $db{user} = "root";
++  $db{passwd} = "xxx";
++
++
++  if($option{i} eq "mysql") {
++    $db{connect} = sub { "dbi:mysql:database=$db{name};host=$db{host};port=$db{port}", $db{user}, $db{passwd} };
++  } elsif($option{i} eq "pg") {
++    $db{connect} = sub { "dbi:Pg:dbname=$db{dbname};host=$db{host};port=$db{port}", $db{user}, $db{passwd} };
++  } elsif($option{i} eq "oracle") {
++    $db{connect} = sub { "dbi:Oracle:host=$db{host};sid=$db{sid};port=$db{port}", $db{user}, $db{passwd} };
++    $ENV{ORACLE_HOME} = $db{home};
++  } elsif($option{i} eq "sqlite") {
++    $db{connect} = sub { "dbi:SQLite:dbname=$db{file}","","" };
++  } else {
++    die "unkown database: $option{i}";
++  }
++}
++  
++if($option{o}) {
++  my $ids=get_discids($config{CD_DEVICE});
++
++  unless(-e $savedir) {
++    mkdir $savedir,0755 or die "cannot create $savedir";
++  }
++
++  open OUT,">$savedir/$ids->[0]\_$$" or die "cannot open outfile";
++  print OUT Data::Dumper->Dump($ids,["diskid","total","toc"]);
++  close OUT;
++
++  print STDERR "saved in: $savedir/$ids->[0]\_$$\n";
++  exit;
++}
++
++if($option{g}) {
++  print STDERR "retrieving stored cds ...\n";
++
++  opendir(DIR, $savedir) or die "cannot opendir $savedir";
++  while (defined(my $file = readdir(DIR))) {
++    next if($file =~ /^\./);
++    print "\n";
++
++    my $in=`/bin/cat $savedir/$file`;
++    my $exit  = $? >> 8; 
++
++    if($exit>0) {
++      die "error reading file";
++    }
++
++    unless($in=~ m/^\$diskid\s+=\s+('\d+'|\d+);\s+         # $diskid
++                    \$total\s+=\s+('\d+'|\d+);\s+          # $total
++                    \$toc\s+=\s+\[\s+                      # $toc
++                      (\{\s+
++                        ('(frame|frames|min|sec|data)'\s+=\>\s+('\d+'|\d+)(,|)\s+){5}
++                      \}(,|)\s+)+
++                    \];\s+$/xs) {
++      print "not a save file: $savedir/$file\n";
++      next;                 
++    }
++
++    eval $in;
++
++    if($@) {
++      print "not a save file (eval error): $savedir/$file\n";
++      next;
++    }
++
++    my %cd=get_cddb(\%config,[$diskid,$total,$toc]);
++
++    unless(defined $cd{title}) {
++      print "no cddb entry found: $savedir/$file\n";
++    }
++
++    unlink "$savedir/$file";
++
++    next unless defined $cd{title};
++
++    if($option{d} || $option{s}) {
++      print_xmcd(\%cd,$option{s});
++    } elsif($option{i}) {
++      insert_db(\%cd,\%db);
++    } elsif($option{l}) {
++      print_lame(\%cd);
++    } else {
++      print_cd(\%cd);
++    }
++  }
++  closedir(DIR);
++  exit;
++}
++
++# get it on
++
++unless($config{multi}) {
++  my %cd;
++
++  # for those who don't like 'die' in modules ;-)
++  eval { 
++    %cd = get_cddb(\%config);
++  };
++  if ($@) {
++    print "fatal error: $!\n";
++    exit;
++  }
++
++  print Dumper(\%cd) if $option{D};
++
++  unless(defined $cd{title}) {
++    die "no cddb entry found";
++  }
++
++  # do somthing with the results
++
++  if($option{d} || $option{s}) {
++    print_xmcd(\%cd,$option{s});
++  } elsif($option{i}) {
++    insert_db(\%cd,\%db);
++  } elsif($option{l}) {
++    print_lame(\%cd);
++  } else {
++    print_cd(\%cd);
++  }
++} else { 
++  my @cd;
++
++  # for those who don't like 'die' in modules ;-)
++  eval { 
++    @cd=get_cddb(\%config);
++  };
++  if ($@) {
++    print "fatal error: $!\n";
++    exit;
++  }
++
++  print Dumper(\@cd) if $option{D};
++
++  for my $c (@cd) {
++    unless(defined $c->{title}) {
++      die "no cddb entry found";
++    }
++
++    # do somthing with the results
++
++    if($option{d} || $option{s}) {
++      print_xmcd($c,$option{s});
++    } elsif($option{i}) {
++      insert_db($c,\%db);
++    } elsif($option{l}) {
++      print_lame($c);
++      print "\n";
++    } else {
++      print_cd($c);
++      print "\n";
++    }
++  }
++}
++
++exit;
++
++
++# subroutines
++
++sub print_cd {
++  my $cd=shift;
++
++  print "artist: $cd->{artist}\n";
++  print "title: $cd->{title}\n";
++  print "category: $cd->{cat}\n";
++  print "genre: $cd->{genre}\n" if($cd->{genre});
++  print "year: $cd->{year}\n" if($cd->{year});
++  print "cddbid: $cd->{id}\n";
++  print "trackno: $cd->{tno}\n";
++
++  my $n=1;
++  foreach my $i ( @{$cd->{track}} ) {
++    if($option{t}) {
++      my $from=$cd->{frames}[$n-1];
++      my $to=$cd->{frames}[$n]-1;
++      my $dur=$to-$from;
++      my $min=int($dur/75/60);
++      my $sec=int($dur/75)-$min*60;
++      my $frm=($dur-$sec*75-$min*75*60)*100/75;
++      my $out=sprintf "track %2d: %8d - %8d  [%2d:%.2d.%.2d]: $i\n",$n,$from,$to,$min,$sec,$frm;
++      print "$out"; 
++    } else {
++      print "track $n: $i\n";
++    }
++    $n++;
++  }  
++}
++
++sub print_xmcd {
++  my $cd=shift;
++  my $save=shift;
++
++  *OUT=*STDOUT;
++
++  if($save) {
++    unless(-e $xmcddir) {
++      mkdir $xmcddir,0755 or die "cannot create $savedir";
++    }
++
++    unless($option{O}) {
++      if(-e "$xmcddir/$cd->{id}") {
++        print "XMCD file exists\n";
++        exit;
++      }
++    }
++
++    open XMCD,">$xmcddir/$cd->{id}" or die "cannot open outfile";
++    *OUT=*XMCD;
++  }
++
++  for(@{$cd->{raw}}) {
++    print OUT "$_";
++  }
++
++  if($save) {
++    print STDERR "saved in: $xmcddir/$cd->{id}\n";
++    close OUT;
++  }
++}  
++
++sub insert_db {
++  my $cd=shift;
++  my $db=shift;
++
++  my ($artist, $title, $category, $cddbid, $trackno) =
++    ($cd->{artist}, $cd->{title}, $cd->{cat}, $cd->{id}, $cd->{tno});
++
++  my $sql = "SELECT cddbid FROM $db->{table_cds} WHERE CDDBID = \'$cddbid\'";
++  my $dbh = DBI->connect($db->{connect}->()) or die "cannot connect to db: $DBI::errstr";
++  my $sth = $dbh->prepare($sql);
++  my $r = $sth->execute or die "cannot check for cd: $DBI::errstr";
++  if ($r == 1) {
++    print "cd already in db\n";
++    if($option{O}) {
++      my $sql = "DELETE FROM $db->{table_cds} WHERE CDDBID = \'$cddbid\'";
++      my $sth = $dbh->prepare($sql);
++      my $r = $sth->execute or die "cannot delete from $db->{table_cds}: $DBI::errstr";
++      $sql = "DELETE FROM $db->{table_tracks} WHERE CDDBID = \'$cddbid\'";
++      $sth = $dbh->prepare($sql);
++      $r = $sth->execute or die "cannot delete from $db->{table_tracks}: $DBI::errstr";
++    } else {
++      exit;
++    }
++  }
++
++  $title =~ s/'/\\'/g;
++  $artist =~ s/'/\\'/g;
++  $category =~ s/'/\\'/g;
++
++  $sql = "INSERT INTO $db->{table_cds} (cddbid, artist, title, category, tracks) VALUES (\'$cddbid\', \'$artist\', \'$title\', \'$category\' , \'$trackno\')";
++  $sth = $dbh->prepare($sql);
++  $r = $sth->execute or die "failed to insert cd: $DBI::errstr";
++
++  my $n=1;
++
++  print "titel: $title\n";
++  print "artist: $artist\n";
++  print "category: $category\n\n";
++
++  for my $t ( @{$cd->{track}} ) {
++    $t =~ s/'/\\'/g;
++    my $dur=($cd->{frames}[$n]-1-$cd->{frames}[$n-1])/75;
++    my $hour=int($dur/3600);
++    my $min=int($dur/60-$hour*60);
++    my $sec=$dur-$hour*3600-$min*60;
++    my $fr=substr(sprintf("%5.2f",$sec-int($sec)),2,3);
++    my $time=sprintf "%.2d:%.2d:%.2d%s",$hour,$min,int($sec),$fr;
++
++    print "track $n: $t  [$time]\n";
++    
++    my $sql = "INSERT INTO $db->{table_tracks} (cddbid, title, trackno, time) 
++               VALUES (\'$cddbid\',\'$t\', \'$n\', \'$time\')";
++    my $sth = $dbh->prepare($sql);
++    my $r = $sth->execute or die "failed to insert track $n: $DBI::errstr";
++    $n++;
++  }
++
++  $dbh->disconnect();
++} 
++
++sub print_lame {
++  my $cd=shift;
++
++  print_cd($cd);
++  print "\n";
++
++  my $n=1;
++  for my $i ( @{$cd->{track}} ) {
++    $i =~ s/"/'/g;
++    print 'lame --tl "'.$cd->{title}.'" --ta "'.$cd->{artist}.'" --tt "'.$i.'" ';
++    printf "audio_%02d.wav ",$n;
++    $i =~ s/[^\S]|['"\/]/_/g;
++    $i =~ s/_+-_+/-/g;
++    print " $i.mp3\n";
++    $n++;
++  }
++}
+-- 
+1.7.11.4
+
diff --git a/perl-CDDB_get.spec b/perl-CDDB_get.spec
new file mode 100644
index 0000000..fa002a9
--- /dev/null
+++ b/perl-CDDB_get.spec
@@ -0,0 +1,58 @@
+Name:           perl-CDDB_get
+Version:        2.28
+Release:        1%{?dist}
+Summary:        Read the CDDB entry for an audio CD in your drive
+License:        GPLv2 or Artistic
+Group:          Development/Libraries
+URL:            http://search.cpan.org/dist/CDDB_get/
+Source0:        http://www.cpan.org/authors/id/F/FO/FONKIE/CDDB_get-%{version}.tar.gz
+# Submitted to upstream, RT #79646
+Patch0:         CDDB_get-2.28-Do-not-include-current-directory.patch
+# Submitted to upstream, RT #79647
+Patch1:         CDDB_get-2.28-cddb.pl-is-not-a-library.patch
+BuildArch:      noarch
+BuildRequires:  perl(ExtUtils::MakeMaker)
+# Run-time:
+BuildRequires:  perl(AutoLoader)
+BuildRequires:  perl(Data::Dumper)
+BuildRequires:  perl(Exporter)
+BuildRequires:  perl(IO::Socket)
+BuildRequires:  perl(MIME::Base64)
+# Tests:
+BuildRequires:  perl(Test::More)
+Requires:       perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
+Requires:       perl(DBI)
+
+%description
+This module/script gets the CDDB data for an audio CD. You need a CD-ROM drive
+and an active Internet connection in order to do that.
+
+%prep
+%setup -q -n CDDB_get-%{version}
+%patch0 -p1
+%patch1 -p1
+
+%build
+%{__perl} Makefile.PL INSTALLDIRS=vendor
+make %{?_smp_mflags}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+make pure_install DESTDIR=$RPM_BUILD_ROOT
+
+find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} \;
+%{_fixperms} $RPM_BUILD_ROOT/*
+
+%check
+make test
+
+%files
+%doc Artistic Changes Copying DATABASE README
+%{_bindir}/*
+%{perl_vendorlib}/*
+%{_mandir}/man3/*
+
+%changelog
+* Fri Sep 14 2012 Petr Pisar <ppisar@xxxxxxxxxx> 2.28-1
+- Specfile autogenerated by cpanspec 1.78.
diff --git a/sources b/sources
index e69de29..569113e 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+e757e5e2f5a4c4aafcce0529310f2c6d  CDDB_get-2.28.tar.gz
--
Fedora Extras Perl SIG
http://www.fedoraproject.org/wiki/Extras/SIGs/Perl
perl-devel mailing list
perl-devel@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/perl-devel



[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Legacy Announce]     [Fedora PHP Devel]     [Kernel Devel]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Big List of Linux Books]     [Gimp]     [Yosemite Information]
  Powered by Linux