backup_paradise 1.2.13
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of backup_paradise might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +231 -0
- data/backup_paradise.gemspec +51 -0
- data/bin/backup_paradise +7 -0
- data/doc/README.gen +214 -0
- data/doc/TODO.md +221 -0
- data/lib/backup_paradise.rb +5 -0
- data/lib/backup_paradise/advanced_backup/advanced_backup.rb +53 -0
- data/lib/backup_paradise/advanced_backup/audio.rb +124 -0
- data/lib/backup_paradise/advanced_backup/constants.rb +34 -0
- data/lib/backup_paradise/advanced_backup/data_directory.rb +50 -0
- data/lib/backup_paradise/advanced_backup/do_perform_the_backup_tasks.rb +95 -0
- data/lib/backup_paradise/advanced_backup/initialize.rb +38 -0
- data/lib/backup_paradise/advanced_backup/menu.rb +280 -0
- data/lib/backup_paradise/advanced_backup/misc.rb +836 -0
- data/lib/backup_paradise/advanced_backup/reset.rb +56 -0
- data/lib/backup_paradise/advanced_backup/run.rb +26 -0
- data/lib/backup_paradise/advanced_backup/system_directory.rb +35 -0
- data/lib/backup_paradise/base/base.rb +440 -0
- data/lib/backup_paradise/base/colours.rb +123 -0
- data/lib/backup_paradise/base/constants.rb +16 -0
- data/lib/backup_paradise/constants/constants.rb +192 -0
- data/lib/backup_paradise/gui/gtk2/backup.rb +345 -0
- data/lib/backup_paradise/gui/gtk3/backup.rb +383 -0
- data/lib/backup_paradise/project/project_base_directory.rb +22 -0
- data/lib/backup_paradise/requires/require_the_backup_paradise_project.rb +14 -0
- data/lib/backup_paradise/tab/tab.rb +84 -0
- data/lib/backup_paradise/toplevel_methods/cliner.rb +16 -0
- data/lib/backup_paradise/toplevel_methods/colours.rb +80 -0
- data/lib/backup_paradise/toplevel_methods/e.rb +16 -0
- data/lib/backup_paradise/toplevel_methods/help.rb +88 -0
- data/lib/backup_paradise/toplevel_methods/misc.rb +343 -0
- data/lib/backup_paradise/toplevel_methods/mountpoint.rb +80 -0
- data/lib/backup_paradise/toplevel_methods/opnn.rb +21 -0
- data/lib/backup_paradise/version/version.rb +19 -0
- data/lib/backup_paradise/yaml/config.yml +22 -0
- metadata +178 -0
@@ -0,0 +1,123 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'backup_paradise/base/colours.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module BackupParadise
|
8
|
+
|
9
|
+
class Base
|
10
|
+
|
11
|
+
require 'backup_paradise/toplevel_methods/colours.rb'
|
12
|
+
|
13
|
+
# ========================================================================= #
|
14
|
+
# === simp
|
15
|
+
# ========================================================================= #
|
16
|
+
def simp(i = '')
|
17
|
+
BackupParadise.simp(i)
|
18
|
+
end
|
19
|
+
|
20
|
+
# ========================================================================= #
|
21
|
+
# === sdir
|
22
|
+
# ========================================================================= #
|
23
|
+
def sdir(i = '')
|
24
|
+
BackupParadise.sdir(i)
|
25
|
+
end
|
26
|
+
|
27
|
+
# ========================================================================= #
|
28
|
+
# === sfile
|
29
|
+
# ========================================================================= #
|
30
|
+
def sfile(i = '')
|
31
|
+
BackupParadise.sfile(i)
|
32
|
+
end
|
33
|
+
|
34
|
+
# ========================================================================= #
|
35
|
+
# === sfancy
|
36
|
+
# ========================================================================= #
|
37
|
+
def sfancy(i = '')
|
38
|
+
BackupParadise.sfancy(i)
|
39
|
+
end
|
40
|
+
|
41
|
+
# ========================================================================= #
|
42
|
+
# === tomato
|
43
|
+
# ========================================================================= #
|
44
|
+
def tomato(i)
|
45
|
+
BackupParadise.tomato(i)
|
46
|
+
end
|
47
|
+
|
48
|
+
# ========================================================================= #
|
49
|
+
# === royalblue
|
50
|
+
# ========================================================================= #
|
51
|
+
def royalblue(i)
|
52
|
+
BackupParadise.royalblue(i)
|
53
|
+
end
|
54
|
+
|
55
|
+
# ========================================================================= #
|
56
|
+
# === rosybrown
|
57
|
+
# ========================================================================= #
|
58
|
+
def rosybrown(i)
|
59
|
+
if use_colours?
|
60
|
+
return ::Colours.rosybrown(i)
|
61
|
+
end
|
62
|
+
i
|
63
|
+
end
|
64
|
+
|
65
|
+
# ========================================================================= #
|
66
|
+
# === seagreen
|
67
|
+
# ========================================================================= #
|
68
|
+
def seagreen(i)
|
69
|
+
if use_colours?
|
70
|
+
return ::Colours.seagreen(i)
|
71
|
+
end
|
72
|
+
i
|
73
|
+
end
|
74
|
+
|
75
|
+
# ========================================================================= #
|
76
|
+
# === steelblue
|
77
|
+
# ========================================================================= #
|
78
|
+
def steelblue(i)
|
79
|
+
if use_colours?
|
80
|
+
return ::Colours.steelblue(i)
|
81
|
+
end
|
82
|
+
i
|
83
|
+
end
|
84
|
+
|
85
|
+
# ========================================================================= #
|
86
|
+
# === orangered
|
87
|
+
# ========================================================================= #
|
88
|
+
def orangered(i)
|
89
|
+
if use_colours?
|
90
|
+
return ::Colours.orangered(i)
|
91
|
+
end
|
92
|
+
i
|
93
|
+
end
|
94
|
+
|
95
|
+
# ========================================================================= #
|
96
|
+
# === lightcoral
|
97
|
+
# ========================================================================= #
|
98
|
+
def lightcoral(i)
|
99
|
+
if use_colours?
|
100
|
+
return ::Colours.lightcoral(i)
|
101
|
+
end
|
102
|
+
i
|
103
|
+
end
|
104
|
+
|
105
|
+
# ========================================================================= #
|
106
|
+
# === rev
|
107
|
+
# ========================================================================= #
|
108
|
+
def rev
|
109
|
+
if Object.const_defined? :Colours
|
110
|
+
Colours.rev
|
111
|
+
else
|
112
|
+
''
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# ========================================================================= #
|
117
|
+
# === cyan
|
118
|
+
# ========================================================================= #
|
119
|
+
def cyan
|
120
|
+
Colours::CYAN
|
121
|
+
end
|
122
|
+
|
123
|
+
end; end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'backup_paradise/base/constants.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module BackupParadise
|
8
|
+
|
9
|
+
class Base
|
10
|
+
|
11
|
+
# ========================================================================= #
|
12
|
+
# === NAMESPACE
|
13
|
+
# ========================================================================= #
|
14
|
+
NAMESPACE = inspect
|
15
|
+
|
16
|
+
end; end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'backup_paradise/constants/constants.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module BackupParadise
|
8
|
+
|
9
|
+
# ========================================================================= #
|
10
|
+
# === NAMESPACE
|
11
|
+
# ========================================================================= #
|
12
|
+
NAMESPACE = inspect
|
13
|
+
|
14
|
+
# ========================================================================= #
|
15
|
+
# === N
|
16
|
+
# ========================================================================= #
|
17
|
+
N = "\n"
|
18
|
+
|
19
|
+
# ========================================================================= #
|
20
|
+
# === AUTOGENERATED_DIRECTORY
|
21
|
+
# ========================================================================= #
|
22
|
+
AUTOGENERATED_DIRECTORY = '/AUTOGENERATED/'
|
23
|
+
|
24
|
+
# ========================================================================= #
|
25
|
+
# === USB1
|
26
|
+
# ========================================================================= #
|
27
|
+
USB1 = '/dev/sda1'
|
28
|
+
|
29
|
+
# ========================================================================= #
|
30
|
+
# === USB2
|
31
|
+
# ========================================================================= #
|
32
|
+
USB2 = '/dev/sdb1'
|
33
|
+
|
34
|
+
# ========================================================================= #
|
35
|
+
# === USB3
|
36
|
+
# ========================================================================= #
|
37
|
+
USB3 = '/dev/sdc1'
|
38
|
+
|
39
|
+
# ========================================================================= #
|
40
|
+
# === USB4
|
41
|
+
# ========================================================================= #
|
42
|
+
USB4 = '/dev/sdd1'
|
43
|
+
|
44
|
+
# ========================================================================= #
|
45
|
+
# === USB5
|
46
|
+
# ========================================================================= #
|
47
|
+
USB5 = '/dev/sde1'
|
48
|
+
|
49
|
+
# ========================================================================= #
|
50
|
+
# === USB6
|
51
|
+
# ========================================================================= #
|
52
|
+
USB6 = '/dev/sdf1'
|
53
|
+
|
54
|
+
# ========================================================================= #
|
55
|
+
# === USB7
|
56
|
+
# ========================================================================= #
|
57
|
+
USB7 = '/dev/sdg1'
|
58
|
+
|
59
|
+
# ========================================================================= #
|
60
|
+
# === USB8
|
61
|
+
# ========================================================================= #
|
62
|
+
USB8 = '/dev/sdh1'
|
63
|
+
|
64
|
+
# ========================================================================= #
|
65
|
+
# === DEFAULT_MODE
|
66
|
+
#
|
67
|
+
# Which mode we will use for newly-created directories and files.
|
68
|
+
# ========================================================================= #
|
69
|
+
DEFAULT_MODE = 0755
|
70
|
+
|
71
|
+
# ========================================================================= #
|
72
|
+
# === ARRAY_THE_THREE_MAIN_ENTRIES
|
73
|
+
#
|
74
|
+
# Keep the proper names here.
|
75
|
+
# ========================================================================= #
|
76
|
+
ARRAY_THE_THREE_MAIN_ENTRIES = %w(
|
77
|
+
DATA
|
78
|
+
src
|
79
|
+
studium
|
80
|
+
)
|
81
|
+
|
82
|
+
# ========================================================================= #
|
83
|
+
# === BackupParadise::ARRAY_THE_FOUR_MAIN_ENTRIES
|
84
|
+
#
|
85
|
+
# This constant has simply 'BOOKS/' appended onto the above-defined
|
86
|
+
# Array.
|
87
|
+
# ========================================================================= #
|
88
|
+
ARRAY_THE_FOUR_MAIN_ENTRIES = ARRAY_THE_THREE_MAIN_ENTRIES+['books']
|
89
|
+
|
90
|
+
# ========================================================================= #
|
91
|
+
# === HOME_DIRECTORY_OF_THE_USER_X
|
92
|
+
# ========================================================================= #
|
93
|
+
HOME_DIRECTORY_OF_THE_USER_X = '/home/x/'
|
94
|
+
|
95
|
+
# ========================================================================= #
|
96
|
+
# === STUDIUM_DIRECTORY
|
97
|
+
# ========================================================================= #
|
98
|
+
if ENV['STUDIUM_DIRECTORY']
|
99
|
+
STUDIUM_DIRECTORY = "#{ENV['STUDIUM_DIRECTORY']}/"
|
100
|
+
else # else hardcode it.
|
101
|
+
STUDIUM_DIRECTORY = "#{HOME_DIRECTORY_OF_THE_USER_X}studium/"
|
102
|
+
end; STUDIUM_DIR = STUDIUM_DIRECTORY # === STUDIUM_DIR
|
103
|
+
|
104
|
+
# ========================================================================= #
|
105
|
+
# === DATA_DIR
|
106
|
+
#
|
107
|
+
# Determine DATA_DIR constant here.
|
108
|
+
# ========================================================================= #
|
109
|
+
if ENV['MY_DATA']
|
110
|
+
DATA_DIR = "#{ENV['MY_DATA']}/"
|
111
|
+
else
|
112
|
+
DATA_DIR = "#{HOME_DIRECTORY_OF_THE_USER_X}DATA/"
|
113
|
+
end; DATA_DIRECTORY = DATA_DIR # === DATA_DIRECTORY
|
114
|
+
|
115
|
+
# ========================================================================= #
|
116
|
+
# === AUDIO_DIR
|
117
|
+
#
|
118
|
+
# Either we will simply use an environment variable; or we will use a
|
119
|
+
# hardcoded path.
|
120
|
+
# ========================================================================= #
|
121
|
+
if ENV['AUDIO_DIRECTORY'] and File.directory?(ENV['AUDIO_DIRECTORY'])
|
122
|
+
AUDIO_DIR = "#{ENV['AUDIO_DIRECTORY']}/"
|
123
|
+
else
|
124
|
+
AUDIO_DIR = "#{HOME_DIRECTORY_OF_THE_USER_X}songs/"
|
125
|
+
end; AUDIO_DIRECTORY = AUDIO_DIR # === AUDIO_DIRECTORY
|
126
|
+
|
127
|
+
# ========================================================================= #
|
128
|
+
# === VIDEO_DIRECTORY
|
129
|
+
# ========================================================================= #
|
130
|
+
VIDEO_DIRECTORY = "#{HOME_DIRECTORY_OF_THE_USER_X}VIDEO/"
|
131
|
+
|
132
|
+
# ========================================================================= #
|
133
|
+
# === SOURCE_DIRECTORY
|
134
|
+
# ========================================================================= #
|
135
|
+
if ENV.has_key? 'MY_SRC_DIR'
|
136
|
+
SOURCE_DIRECTORY = "#{ENV['MY_SRC_DIR']}/"
|
137
|
+
else
|
138
|
+
SOURCE_DIRECTORY = "#{HOME_DIRECTORY_OF_THE_USER_X}src/"
|
139
|
+
end; SRC_DIR = SOURCE_DIRECTORY # === SRC_DIR
|
140
|
+
|
141
|
+
# ========================================================================= #
|
142
|
+
# === PROGRAMS_DIRECTORY
|
143
|
+
# ========================================================================= #
|
144
|
+
if ENV.has_key? 'MY_PROGRAMS_DIR'
|
145
|
+
PROGRAMS_DIRECTORY = "#{ENV['MY_PROGRAMS_DIR']}/"
|
146
|
+
else
|
147
|
+
PROGRAMS_DIRECTORY = '/home/Programs/'
|
148
|
+
end; PROGRAMS_DIR = PROGRAMS_DIRECTORY # === PROGRAMS_DIR
|
149
|
+
|
150
|
+
# ========================================================================= #
|
151
|
+
# === SYSTEM_SETTINGS_DIRECTORY
|
152
|
+
# ========================================================================= #
|
153
|
+
SYSTEM_SETTINGS_DIRECTORY = ENV['SYS_SETTINGS'].to_s.dup
|
154
|
+
SYS_SETTINGS = SYSTEM_SETTINGS_DIRECTORY # === SYS_SETTINGS
|
155
|
+
|
156
|
+
# ========================================================================= #
|
157
|
+
# === DEPOT_DIRECTORY
|
158
|
+
#
|
159
|
+
# The Depot directory is determined here.
|
160
|
+
# ========================================================================= #
|
161
|
+
if ENV['DEPOT']
|
162
|
+
DEPOT_DIRECTORY = "#{ENV['DEPOT']}/"
|
163
|
+
else
|
164
|
+
DEPOT_DIRECTORY = '/Depot/Temp/'
|
165
|
+
end
|
166
|
+
|
167
|
+
# ========================================================================= #
|
168
|
+
# === BOOKS_DIRECTORY
|
169
|
+
# ========================================================================= #
|
170
|
+
if ENV['MY_BOOKS']
|
171
|
+
BOOKS_DIRECTORY = "#{ENV['MY_BOOKS'].dup}/"
|
172
|
+
else
|
173
|
+
BOOKS_DIRECTORY = "#{HOME_DIRECTORY_OF_THE_USER_X}books/"
|
174
|
+
end
|
175
|
+
|
176
|
+
# ========================================================================= #
|
177
|
+
# === ARRAY_THE_FIVE_MAIN_ENTRIES
|
178
|
+
#
|
179
|
+
# This constant is different in that it will list the absolute path to
|
180
|
+
# these directories.
|
181
|
+
#
|
182
|
+
# It also contains the "songs/" directory.
|
183
|
+
# ========================================================================= #
|
184
|
+
ARRAY_THE_FIVE_MAIN_ENTRIES = [
|
185
|
+
DATA_DIRECTORY,
|
186
|
+
AUDIO_DIR,
|
187
|
+
SOURCE_DIRECTORY,
|
188
|
+
STUDIUM_DIRECTORY,
|
189
|
+
BOOKS_DIRECTORY
|
190
|
+
]
|
191
|
+
|
192
|
+
end
|
@@ -0,0 +1,345 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# sysl
|
6
|
+
# =========================================================================== #
|
7
|
+
require 'gtk_paradise/require_gtk2'
|
8
|
+
require 'backup_paradise'
|
9
|
+
|
10
|
+
module BackupParadise
|
11
|
+
|
12
|
+
module Gtk
|
13
|
+
|
14
|
+
class Backup < ::Gtk::Frame # === BackupParadise::Gtk::Backup
|
15
|
+
|
16
|
+
require 'gtk_paradise/requires/require_the_base_module.rb'
|
17
|
+
include ::Gtk::BaseModule
|
18
|
+
|
19
|
+
begin
|
20
|
+
require 'gtk_paradise/classes/gtk2/information_about_the_harddisc.rb'
|
21
|
+
rescue LoadError; end
|
22
|
+
|
23
|
+
require 'open_in_browser'
|
24
|
+
|
25
|
+
begin
|
26
|
+
require 'colours'
|
27
|
+
include ::Colours
|
28
|
+
rescue LoadError; end
|
29
|
+
include ::Gtk::Colours
|
30
|
+
|
31
|
+
# ========================================================================= #
|
32
|
+
# === HEIGHT
|
33
|
+
# ========================================================================= #
|
34
|
+
HEIGHT = 640
|
35
|
+
|
36
|
+
# ========================================================================= #
|
37
|
+
# === HEIGHT
|
38
|
+
# ========================================================================= #
|
39
|
+
WIDTH = 1400
|
40
|
+
|
41
|
+
# ========================================================================= #
|
42
|
+
# === REQUEST_THIS_WIDTH
|
43
|
+
# ========================================================================= #
|
44
|
+
REQUEST_THIS_WIDTH = WIDTH
|
45
|
+
|
46
|
+
# ========================================================================= #
|
47
|
+
# === ARRAY_PREDEFINED_DEVICES
|
48
|
+
# ========================================================================= #
|
49
|
+
ARRAY_PREDEFINED_DEVICES = [
|
50
|
+
ENV['USB1'],
|
51
|
+
ENV['USB2'],
|
52
|
+
ENV['USB3'],
|
53
|
+
ENV['USB4'],
|
54
|
+
ENV['USB5'],
|
55
|
+
ENV['FESTPLATTE1']
|
56
|
+
]
|
57
|
+
|
58
|
+
# ========================================================================= #
|
59
|
+
# === initialize
|
60
|
+
# ========================================================================= #
|
61
|
+
def initialize(
|
62
|
+
run_already = true
|
63
|
+
)
|
64
|
+
reset
|
65
|
+
super('')
|
66
|
+
self.label_widget.set_markup %Q(
|
67
|
+
<span size="larger" weight="bold">💾 Backup Script</span>
|
68
|
+
)
|
69
|
+
set_width_request(REQUEST_THIS_WIDTH)
|
70
|
+
shadow_type_etched_in
|
71
|
+
run if run_already # Now we can start our wrapper.
|
72
|
+
end
|
73
|
+
|
74
|
+
# ========================================================================= #
|
75
|
+
# === reset
|
76
|
+
# ========================================================================= #
|
77
|
+
def reset
|
78
|
+
@height = HEIGHT
|
79
|
+
@width = WIDTH
|
80
|
+
@title = 'GTK Backup Wrapper'
|
81
|
+
# ======================================================================= #
|
82
|
+
# === @combo_box
|
83
|
+
# ======================================================================= #
|
84
|
+
@combo_box = ''.dup
|
85
|
+
# ======================================================================= #
|
86
|
+
# === @object_rbackup
|
87
|
+
# ======================================================================= #
|
88
|
+
@object_rbackup = BackupParadise::AdvancedBackup.new(nil, :do_not_run_yet)
|
89
|
+
# ======================================================================= #
|
90
|
+
# === @object_hdd_info
|
91
|
+
# ======================================================================= #
|
92
|
+
@object_hdd_info = ::Gtk::InformationAboutTheHarddisc.new
|
93
|
+
end
|
94
|
+
|
95
|
+
# ========================================================================= #
|
96
|
+
# === scan_for_new_events
|
97
|
+
# ========================================================================= #
|
98
|
+
def scan_for_new_events(
|
99
|
+
n_seconds = 5
|
100
|
+
)
|
101
|
+
Thread.new {
|
102
|
+
e 'Scanning for new events ...'
|
103
|
+
synchronize_data
|
104
|
+
sleep n_seconds
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
# ========================================================================= #
|
109
|
+
# === create_fdisk_scrolled_window
|
110
|
+
#
|
111
|
+
# Will create the scrolled window which holds our fdisk information.
|
112
|
+
# ========================================================================= #
|
113
|
+
def create_fdisk_scrolled_window
|
114
|
+
@fdisk_result = update_fdisk
|
115
|
+
create_text_view
|
116
|
+
@scrolled_window = gtk_scrolled_window(@text_view)
|
117
|
+
@scrolled_window.set_policy(
|
118
|
+
::Gtk::POLICY_ALWAYS,
|
119
|
+
::Gtk::POLICY_NEVER
|
120
|
+
)
|
121
|
+
end
|
122
|
+
|
123
|
+
# ========================================================================= #
|
124
|
+
# === create_text_view
|
125
|
+
# ========================================================================= #
|
126
|
+
def create_text_view
|
127
|
+
@text_buffer = gtk_text_buffer
|
128
|
+
@text_buffer.insert_at_cursor(@fdisk_result)
|
129
|
+
@text_view = gtk_text_view(@text_buffer)
|
130
|
+
@text_view.set_editable(true)
|
131
|
+
# @text_view.wrap_mode=3
|
132
|
+
end
|
133
|
+
|
134
|
+
# ========================================================================= #
|
135
|
+
# === update_fdisk
|
136
|
+
#
|
137
|
+
# Use this if you wanna get new fdisk information.
|
138
|
+
#
|
139
|
+
# Or use this:
|
140
|
+
#
|
141
|
+
# `fdisk -l`.gsub!(%r[^(!?/dev).*\n], '')
|
142
|
+
#
|
143
|
+
# ========================================================================= #
|
144
|
+
def update_fdisk
|
145
|
+
return `fdisk -l`.split("\n").delete_if { |line| line !~ /^\/dev/ }.join("\n")
|
146
|
+
end
|
147
|
+
|
148
|
+
# ========================================================================= #
|
149
|
+
# === create_gtk_buttons
|
150
|
+
# ========================================================================= #
|
151
|
+
def create_gtk_buttons
|
152
|
+
# ======================================================================= #
|
153
|
+
# === The debug-button
|
154
|
+
# ======================================================================= #
|
155
|
+
@button_debug = gtk_button('_Debug')
|
156
|
+
@button_debug.modify_background(:normal, :darkkhaki)
|
157
|
+
@button_debug.modify_background(:prelight, :coral)
|
158
|
+
@button_debug.set_size_request(16, 25)
|
159
|
+
@button_debug.on_clicked {
|
160
|
+
e @combo_box.active_text
|
161
|
+
synchronize_data
|
162
|
+
}
|
163
|
+
# ======================================================================= #
|
164
|
+
# === The backup-button
|
165
|
+
# ======================================================================= #
|
166
|
+
@button_backup = gtk_button('_Backup')
|
167
|
+
@button_backup.modify_background(:normal, :darkkhaki)
|
168
|
+
@button_backup.modify_background(:prelight, :coral)
|
169
|
+
@button_backup.set_size_request(16, 25)
|
170
|
+
@button_backup.fancy_tooltips = 'Start the <b>backup-action</b> '\
|
171
|
+
'by clicking this button.'
|
172
|
+
@button_backup.on_clicked {
|
173
|
+
efancy '#'+'='*78+'#'
|
174
|
+
efancy 'Will be doing backup now:'
|
175
|
+
efancy '#'+'='*78+'#'
|
176
|
+
@object_rbackup.set_dir_name() # first must set proper dir name.
|
177
|
+
# First one backup to hdd.
|
178
|
+
if @combo_box.active_text == ENV['FESTPLATTE1']
|
179
|
+
eimp ' => Doing Backup to '+ENV['FESTPLATTE1']
|
180
|
+
@object_rbackup.target_device = ENV['FESTPLATTE1']
|
181
|
+
@object_rbackup.backup_system(:tohdd)
|
182
|
+
else
|
183
|
+
@object_rbackup.information_startup_tasks
|
184
|
+
@object_rbackup.get_raw_info
|
185
|
+
@object_rbackup.scan_for_usb_entries
|
186
|
+
@object_rbackup.backup_system()
|
187
|
+
end
|
188
|
+
synchronize_data
|
189
|
+
}
|
190
|
+
end
|
191
|
+
|
192
|
+
# ========================================================================= #
|
193
|
+
# === init_hdd_image
|
194
|
+
#
|
195
|
+
# Init our hdd image. Copied from hdd_info.rb
|
196
|
+
# ========================================================================= #
|
197
|
+
def init_hdd_image
|
198
|
+
if @object_hdd_info.respond_to? :percentage_used
|
199
|
+
tmp = @object_hdd_info.percentage_used.to_i
|
200
|
+
else
|
201
|
+
tmp = 0
|
202
|
+
end
|
203
|
+
_tmp_path = ''
|
204
|
+
case tmp
|
205
|
+
when 0..1 then _tmp_path = 'HDD_EMPTY.png'
|
206
|
+
when 2..25 then _tmp_path = 'HDD_ONEFOURTH.png'
|
207
|
+
when 26..50 then _tmp_path = 'HDD_HALF.png'
|
208
|
+
when 51..75 then _tmp_path = 'HDD_THREEFOURTH.png'
|
209
|
+
when 76..89 then _tmp_path = 'HDD_THREEEIGHT.png'
|
210
|
+
else # else 90 oder mehr full
|
211
|
+
_tmp_path = 'HDD_FULL.png'
|
212
|
+
end
|
213
|
+
@hdd_image = gtk_image(ENV['IMG_STD']+'/'+_tmp_path)
|
214
|
+
@hdd_image.set_padding(3, 3)
|
215
|
+
@event_box = gtk_event_box(@hdd_image)
|
216
|
+
@event_box.signal_connect(:button_press_event) {
|
217
|
+
e 'Starting firefox in /'
|
218
|
+
open_in_browser('/')
|
219
|
+
}
|
220
|
+
return @event_box
|
221
|
+
end
|
222
|
+
|
223
|
+
# ========================================================================= #
|
224
|
+
# === gtk2_combo_box_choose_active
|
225
|
+
#
|
226
|
+
# Das soll eines Tages festlegen welcher Eintrag ausgewählt
|
227
|
+
# wird.
|
228
|
+
# ========================================================================= #
|
229
|
+
def gtk2_combo_box_choose_active
|
230
|
+
@combo_box.active = 0
|
231
|
+
end
|
232
|
+
|
233
|
+
# ========================================================================= #
|
234
|
+
# === synchronize_data
|
235
|
+
#
|
236
|
+
# Every button must invoke this method after doing its
|
237
|
+
# default task. Currently only updates the variable @fdisk_result
|
238
|
+
# ========================================================================= #
|
239
|
+
def synchronize_data
|
240
|
+
@fdisk_result = update_fdisk
|
241
|
+
end
|
242
|
+
|
243
|
+
# ========================================================================= #
|
244
|
+
# === padding?
|
245
|
+
# ========================================================================= #
|
246
|
+
def padding?
|
247
|
+
8
|
248
|
+
end
|
249
|
+
|
250
|
+
# ========================================================================= #
|
251
|
+
# === create_the_buttons
|
252
|
+
# ========================================================================= #
|
253
|
+
def create_the_buttons
|
254
|
+
# ======================================================================= #
|
255
|
+
# button quit
|
256
|
+
# ======================================================================= #
|
257
|
+
@button_quit = gtk_button('_Quit')
|
258
|
+
@button_quit.modify_background(:normal, :darkkhaki)
|
259
|
+
@button_quit.modify_background(:prelight, :coral)
|
260
|
+
@button_quit.set_size_request(16, 26)
|
261
|
+
@button_quit.on_clicked {
|
262
|
+
@object_rbackup.set_konsole_tab_title
|
263
|
+
::Gtk.main_quit
|
264
|
+
}
|
265
|
+
end
|
266
|
+
|
267
|
+
# ========================================================================= #
|
268
|
+
# === run
|
269
|
+
#
|
270
|
+
# The GTK Wrapper to it.
|
271
|
+
# ========================================================================= #
|
272
|
+
def run
|
273
|
+
signal_connect(:delete_event) { ::Gtk.main_quit }
|
274
|
+
create_fdisk_scrolled_window
|
275
|
+
@main_table = ::Gtk::Table.new(2, 3, true)
|
276
|
+
create_the_buttons
|
277
|
+
# ======================================================================= #
|
278
|
+
# Here are the different entries.
|
279
|
+
# ======================================================================= #
|
280
|
+
@combo_box = gtk_combo_box_entry
|
281
|
+
ARRAY_PREDEFINED_DEVICES.each { |val| @combo_box.append_text(val) }
|
282
|
+
gtk2_combo_box_choose_active
|
283
|
+
|
284
|
+
create_gtk_buttons
|
285
|
+
scan_for_new_events(5)
|
286
|
+
@main_table.attach_defaults(@button_backup, 0, 1, 0, 1)
|
287
|
+
@main_table.attach_defaults(@combo_box, 1, 2, 0, 1)
|
288
|
+
@main_table.attach_defaults(@button_debug, 2, 3, 0, 1)
|
289
|
+
|
290
|
+
@main_table.attach_defaults(@button_quit, 0, 1, 1, 2)
|
291
|
+
@main_table.attach_defaults(init_hdd_image, 1, 2, 1, 2)
|
292
|
+
@main_table.attach_defaults(@scrolled_window, 2, 3, 1, 2)
|
293
|
+
|
294
|
+
@main_vbox = gtk_vbox
|
295
|
+
@main_vbox.maximal(@main_table, 0)
|
296
|
+
mini_hbox = gtk_hbox
|
297
|
+
@button_run_the_mount_command = gtk_button('Run → ')
|
298
|
+
@button_run_the_mount_command.lightgreen
|
299
|
+
@button_run_the_mount_command.fancy_tooltips = 'Clicking this '\
|
300
|
+
'button will run <b>the command on the right hand side</b>.'
|
301
|
+
mini_hbox.minimal(@button_run_the_mount_command, 2)
|
302
|
+
mini_hbox.minimal(gtk_label('mount '), 2)
|
303
|
+
@dropdown_box_holding_all_dev_entries = gtk_dropdown(
|
304
|
+
%w(
|
305
|
+
/dev/sda1
|
306
|
+
/dev/sda2
|
307
|
+
/dev/sda3
|
308
|
+
/dev/sdb1
|
309
|
+
/dev/sdb2
|
310
|
+
/dev/sdb3
|
311
|
+
/dev/sdc1
|
312
|
+
/dev/sdc2
|
313
|
+
/dev/sdc3
|
314
|
+
)
|
315
|
+
)
|
316
|
+
@dropdown_box_holding_all_dev_entries.active = 2
|
317
|
+
mini_hbox.minimal(@dropdown_box_holding_all_dev_entries, 0)
|
318
|
+
mini_hbox.minimal(gtk_label(' onto '), 2)
|
319
|
+
dropdown_box_holding_the_mount_targets = gtk_dropdown(ARRAY_PREDEFINED_DEVICES)
|
320
|
+
dropdown_box_holding_the_mount_targets.active = 0
|
321
|
+
mini_hbox.minimal(dropdown_box_holding_the_mount_targets, 2)
|
322
|
+
@button_run_the_mount_command.on_clicked {
|
323
|
+
cmd = 'mount '+
|
324
|
+
@dropdown_box_holding_all_dev_entries.active_text.to_s+
|
325
|
+
' '+
|
326
|
+
dropdown_box_holding_the_mount_targets.active_text.to_s
|
327
|
+
e
|
328
|
+
esystem cmd
|
329
|
+
e
|
330
|
+
}
|
331
|
+
@main_vbox.minimal(mini_hbox, 0)
|
332
|
+
add(@main_vbox)
|
333
|
+
show_all
|
334
|
+
end
|
335
|
+
|
336
|
+
end; end; end
|
337
|
+
|
338
|
+
if __FILE__ == $PROGRAM_NAME
|
339
|
+
require 'gtk_paradise/run'
|
340
|
+
x = BackupParadise::Gtk::Backup.new
|
341
|
+
r = ::Gtk.run
|
342
|
+
r << x
|
343
|
+
r.position = :center2
|
344
|
+
r.top_left_then_run
|
345
|
+
end # gtkbackup
|