File indexing completed on 2024-05-05 04:49:36

0001 #!/usr/bin/env ruby
0002 #
0003 #
0004 # Ruby database backup script
0005 # (c) 2005-2007 Seb Ruiz <ruiz@kde.org>
0006 # Released under the GPL v2 license
0007 
0008 
0009 def getFilename( input )
0010     puts input
0011     date = `date +%Y%m%d`
0012     i = 1
0013     input = input + "." + date
0014     original = input
0015 
0016     # don't overwrite a previously written backup
0017     loop do
0018         file = File.dirname( File.expand_path( __FILE__ ) ) + "/" + input
0019 
0020         if not FileTest.exist?( file )
0021             return input
0022         end
0023 
0024         i = i + 1
0025         newName = original + "." + i
0026         input = newname
0027     end
0028 end
0029 
0030 if $*.empty?() or $*[0] == "--help"
0031     puts( "Usage: backupDatabase.rb saveDirectory" )
0032     puts()
0033     puts( "Backup your Amarok database!" )
0034     exit( 1 )
0035 end
0036 
0037 destination = $*[0] + "/"
0038 
0039 unless FileTest.directory?( destination )
0040     system("dcop", "amarok", "playlist", "popupMessage", "Error: Save destination must be a directory")
0041     exit( 1 )
0042 end
0043 
0044 unless FileTest.writable_real?( destination )
0045     system("dcop", "amarok", "playlist", "popupMessage", "Error: Destination directory not writable.")
0046     exit( 1 )
0047 end
0048 
0049 filename = ""
0050 database = `dcop amarok script readConfig DatabaseEngine`.chomp!()
0051 
0052 case database
0053 
0054     when "0" # sqlite
0055         filename = "collection.db"
0056         filename = getFilename( filename )
0057         dest = destination + "/" + filename
0058         puts dest
0059         `cp ~/.kde/share/apps/amarok/collection.db #{dest}`
0060 
0061     when "1" # mysql
0062         filename = "amarokdb.mysql"
0063         filename = getFilename( filename )
0064         dest = destination + "/" + filename
0065         puts dest
0066         db   = `dcop amarok script readConfig MySqlDbName`.chomp!()
0067         user = `dcop amarok script readConfig MySqlUser`.chomp!()
0068         pass = `dcop amarok script readConfig MySqlPassword2`.chomp!()
0069         host = `dcop amarok script readConfig MySqlHost`.chomp!()
0070         port = `dcop amarok script readConfig MySqlPort`.chomp!()
0071         system("mysqldump", "-u", user, "-p"+pass, "-h", host, "-P", port, db, "-r", dest);
0072 
0073     when "2" # postgres
0074         filename = "amarokdb.psql"
0075         filename = getFilename( filename )
0076         dest = destination + "/" + filename
0077         puts dest
0078         db   = `dcop amarok script readConfig PostgresqlDbName`.chomp!()
0079         user = `dcop amarok script readConfig PostgresqlUser`.chomp!()
0080         pass = `dcop amarok script readConfig PostgresqlPassword`.chomp!()
0081         host = `dcop amarok script readConfig PostgresqlHost`.chomp!()
0082         port = `dcop amarok script readConfig PostgresqlPort`.chomp!()
0083         system("pg_dump", "-U", user, "-W", pass, "-h", host, "-p", port, db, "-f", dest);
0084 end
0085 
0086 system("dcop", "amarok", "playlist", "popupMessage", "Database backup saved to: #{destination}/#{filename}")