diff options
Diffstat (limited to 'bin/archive/export_playlist.pl')
-rwxr-xr-x | bin/archive/export_playlist.pl | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/bin/archive/export_playlist.pl b/bin/archive/export_playlist.pl new file mode 100755 index 00000000..c6e0ccaf --- /dev/null +++ b/bin/archive/export_playlist.pl @@ -0,0 +1,80 @@ +#!/usr/bin/perl -w +# +# Exports playlists from ampache +# +# Fill in the site specific database connection parameters below before running +# + +use DBI; + +# Configure database connection parameters +my $db = "ampache"; # database +my $user = ""; # database user +my $pw = ""; # database user password + + +if ($#ARGV < 0) { + print "Usage: $0 <filename>\n"; + print " Exports Ampache playlists to <filename>.\n"; + exit; +} + + +open(OUT, "> $ARGV[0]") or die("Could not open '$ARGV[0]' for write - $!"); + +# Build DSNs +my $dsn = "dbi:mysql:database=$db;"; + +# Connect to database +my $dbh= DBI->connect($dsn, $user, $pw, + { RaiseError => 1, AutoCommit => 0 }); + + +# Prepare statements +my $sth = $dbh->prepare("SELECT id, name, owner, type FROM playlist"); +my $sth2 = $dbh->prepare("SELECT username FROM user + WHERE id = ?"); +my $sth3 = $dbh->prepare("SELECT song.file + FROM playlist_data, song + WHERE playlist_data.playlist = ? + AND playlist_data.song = song.id"); + +# Execute select and loop through results +$sth->execute(); +my $count = 0; +my ($id,$name,$owner,$type,$date,$file,$track); +while(($id,$name,$owner,$type) = $sth->fetchrow_array) { + if ($count > 0) { + # Use a blank line as a separator between playlists + print OUT "\n"; + } + + $count++; + + if ($owner =~ /^\d+$/) { + # Fetch username instead of id for owner + $sth2->execute($owner); + $owner = "unknown" unless (($owner) = $sth2->fetchrow_array); + $sth2->finish; + } + + # Date is not present in old ampache's + $date = 0 if (! defined($date)); + + print OUT "Name: $name\n"; + print OUT "Owner: $owner\n"; + print OUT "Type: $type\n"; + + # Grab songs for this playlist + $sth3->execute($id); + while(($file) = $sth3->fetchrow_array) { + print OUT "File: $file\n"; + } +} + +print "Exported $count playlists.\n"; + +# Clean up +$dbh->disconnect; +close(OUT); + |