File: backupDatabase.rb

package info (click to toggle)
amarok 3.3.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 112,168 kB
  • sloc: cpp: 195,056; xml: 4,322; ansic: 2,634; javascript: 673; ruby: 528; python: 507; sh: 252; makefile: 12
file content (86 lines) | stat: -rw-r--r-- 2,731 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env ruby
#
#
# Ruby database backup script
# (c) 2005-2007 Seb Ruiz <ruiz@kde.org>
# Released under the GPL v2 license


def getFilename( input )
    puts input
    date = `date +%Y%m%d`
    i = 1
    input = input + "." + date
    original = input

    # don't overwrite a previously written backup
    loop do
        file = File.dirname( File.expand_path( __FILE__ ) ) + "/" + input

        if not FileTest.exist?( file )
            return input
        end

        i = i + 1
        newName = original + "." + i
        input = newname
    end
end

if $*.empty?() or $*[0] == "--help"
    puts( "Usage: backupDatabase.rb saveDirectory" )
    puts()
    puts( "Backup your Amarok database!" )
    exit( 1 )
end

destination = $*[0] + "/"

unless FileTest.directory?( destination )
    system("dcop", "amarok", "playlist", "popupMessage", "Error: Save destination must be a directory")
    exit( 1 )
end

unless FileTest.writable_real?( destination )
    system("dcop", "amarok", "playlist", "popupMessage", "Error: Destination directory not writable.")
    exit( 1 )
end

filename = ""
database = `dcop amarok script readConfig DatabaseEngine`.chomp!()

case database

    when "0" # sqlite
        filename = "collection.db"
        filename = getFilename( filename )
        dest = destination + "/" + filename
        puts dest
        `cp ~/.kde/share/apps/amarok/collection.db #{dest}`

    when "1" # mysql
        filename = "amarokdb.mysql"
        filename = getFilename( filename )
        dest = destination + "/" + filename
        puts dest
        db   = `dcop amarok script readConfig MySqlDbName`.chomp!()
        user = `dcop amarok script readConfig MySqlUser`.chomp!()
        pass = `dcop amarok script readConfig MySqlPassword2`.chomp!()
        host = `dcop amarok script readConfig MySqlHost`.chomp!()
        port = `dcop amarok script readConfig MySqlPort`.chomp!()
        system("mysqldump", "-u", user, "-p"+pass, "-h", host, "-P", port, db, "-r", dest);

    when "2" # postgres
        filename = "amarokdb.psql"
        filename = getFilename( filename )
        dest = destination + "/" + filename
        puts dest
        db   = `dcop amarok script readConfig PostgresqlDbName`.chomp!()
        user = `dcop amarok script readConfig PostgresqlUser`.chomp!()
        pass = `dcop amarok script readConfig PostgresqlPassword`.chomp!()
        host = `dcop amarok script readConfig PostgresqlHost`.chomp!()
        port = `dcop amarok script readConfig PostgresqlPort`.chomp!()
        system("pg_dump", "-U", user, "-W", pass, "-h", host, "-p", port, db, "-f", dest);
end

system("dcop", "amarok", "playlist", "popupMessage", "Database backup saved to: #{destination}/#{filename}")