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.

Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +231 -0
  3. data/backup_paradise.gemspec +51 -0
  4. data/bin/backup_paradise +7 -0
  5. data/doc/README.gen +214 -0
  6. data/doc/TODO.md +221 -0
  7. data/lib/backup_paradise.rb +5 -0
  8. data/lib/backup_paradise/advanced_backup/advanced_backup.rb +53 -0
  9. data/lib/backup_paradise/advanced_backup/audio.rb +124 -0
  10. data/lib/backup_paradise/advanced_backup/constants.rb +34 -0
  11. data/lib/backup_paradise/advanced_backup/data_directory.rb +50 -0
  12. data/lib/backup_paradise/advanced_backup/do_perform_the_backup_tasks.rb +95 -0
  13. data/lib/backup_paradise/advanced_backup/initialize.rb +38 -0
  14. data/lib/backup_paradise/advanced_backup/menu.rb +280 -0
  15. data/lib/backup_paradise/advanced_backup/misc.rb +836 -0
  16. data/lib/backup_paradise/advanced_backup/reset.rb +56 -0
  17. data/lib/backup_paradise/advanced_backup/run.rb +26 -0
  18. data/lib/backup_paradise/advanced_backup/system_directory.rb +35 -0
  19. data/lib/backup_paradise/base/base.rb +440 -0
  20. data/lib/backup_paradise/base/colours.rb +123 -0
  21. data/lib/backup_paradise/base/constants.rb +16 -0
  22. data/lib/backup_paradise/constants/constants.rb +192 -0
  23. data/lib/backup_paradise/gui/gtk2/backup.rb +345 -0
  24. data/lib/backup_paradise/gui/gtk3/backup.rb +383 -0
  25. data/lib/backup_paradise/project/project_base_directory.rb +22 -0
  26. data/lib/backup_paradise/requires/require_the_backup_paradise_project.rb +14 -0
  27. data/lib/backup_paradise/tab/tab.rb +84 -0
  28. data/lib/backup_paradise/toplevel_methods/cliner.rb +16 -0
  29. data/lib/backup_paradise/toplevel_methods/colours.rb +80 -0
  30. data/lib/backup_paradise/toplevel_methods/e.rb +16 -0
  31. data/lib/backup_paradise/toplevel_methods/help.rb +88 -0
  32. data/lib/backup_paradise/toplevel_methods/misc.rb +343 -0
  33. data/lib/backup_paradise/toplevel_methods/mountpoint.rb +80 -0
  34. data/lib/backup_paradise/toplevel_methods/opnn.rb +21 -0
  35. data/lib/backup_paradise/version/version.rb +19 -0
  36. data/lib/backup_paradise/yaml/config.yml +22 -0
  37. metadata +178 -0
@@ -0,0 +1,383 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === AdvancedBackup::GUI::Gtk::BackupWidget
6
+ # =========================================================================== #
7
+ # This is the base widget collection for the gtk3-backup functionality
8
+ # via a GUI.
9
+ # =========================================================================== #
10
+ # require 'backup_paradise/gui/gtk3/backup.rb'
11
+ # =========================================================================== #
12
+ begin
13
+ require 'colours'
14
+ rescue LoadError; end
15
+ require 'backup_paradise/advanced_backup/advanced_backup.rb'
16
+ require 'backup_paradise/base/base.rb'
17
+ begin
18
+ require 'gtk3'
19
+ rescue LoadError; end
20
+
21
+ begin
22
+ require 'gtk_paradise/gtk_classes/about.rb'
23
+ rescue LoadError; end
24
+
25
+ begin
26
+ require 'gtk_paradise/gtk_classes_menu_item.rb'
27
+ rescue LoadError; end
28
+
29
+ begin
30
+ require 'gtk_paradise/requires/require_the_base_module.rb'
31
+ rescue LoadError; end
32
+
33
+ module AdvancedBackup
34
+
35
+ module GUI
36
+
37
+ module Gtk
38
+
39
+ class BackupWidget < ::Gtk::Window # === AdvancedBackup::GUI::Gtk::BackupWidget
40
+
41
+ include Colours::E
42
+ include Gtk::BaseModule
43
+
44
+ # ========================================================================= #
45
+ # === WIDTH
46
+ # ========================================================================= #
47
+ WIDTH = 800
48
+
49
+ # ========================================================================= #
50
+ # === HEIGHT
51
+ # ========================================================================= #
52
+ HEIGHT = 600
53
+
54
+ # ========================================================================= #
55
+ # === USE_THIS_FONT_SIZE
56
+ # ========================================================================= #
57
+ USE_THIS_FONT_SIZE = '26'
58
+
59
+ # ========================================================================= #
60
+ # === initialize
61
+ # ========================================================================= #
62
+ def initialize
63
+ super()
64
+ reset
65
+ run
66
+ end
67
+
68
+ # ========================================================================= #
69
+ # === reset
70
+ # ========================================================================= #
71
+ def reset
72
+ @file_chooser_dialog = nil
73
+ determine_the_title_of_the_main_window
74
+ ::Gtk::Settings.default.gtk_font_name = 'DejaVu Sans Mono '+USE_THIS_FONT_SIZE
75
+ ::Gtk::Settings.default.gtk_tooltip_timeout = 2000
76
+ @advanced_rbackup = BackupParadise::AdvancedBackup.new(
77
+ nil, :do_not_run_yet
78
+ )
79
+ end
80
+
81
+ # ========================================================================= #
82
+ # === determine_the_title_of_the_main_window
83
+ # ========================================================================= #
84
+ def determine_the_title_of_the_main_window
85
+ @title_to_use = 'Backup Data'
86
+ set_title @title_to_use
87
+ end
88
+
89
+ # ========================================================================= #
90
+ # === add_components_for_individual_transfer_of_files_or_directories
91
+ #
92
+ # The widget that goes in here, onto the main vbox, will hold the relevant
93
+ # parts that can be used to do a per-file backup.
94
+ # ========================================================================= #
95
+ def add_components_for_individual_transfer_of_files_or_directories(
96
+ vbox
97
+ )
98
+ vbox.pack_start(gtk_label(
99
+ 'Input the file that you wish to copy next:')
100
+ )
101
+ @entry_for_transfer_of_a_single_file = gtk_entry
102
+ vbox.pack_start(@entry_for_transfer_of_a_single_file)
103
+ @button_transfer_file = gtk_button(label: 'Transfer this ^^^ file')
104
+ @button_transfer_file.signal_connect(:clicked) {
105
+ do_transfer_a_single_file
106
+ }
107
+ vbox.pack_start(@button_transfer_file)
108
+ end
109
+
110
+ # ========================================================================= #
111
+ # === create_the_backup_button
112
+ # ========================================================================= #
113
+ def create_the_backup_button
114
+ @backup_button = gtk_button(
115
+ label: 'Backup the data'
116
+ )
117
+ @backup_button.signal_connect(:clicked) {
118
+ do_backup_the_data
119
+ }
120
+ @backup_button.set_border_width(4)
121
+ @backup_button.tooltip_text = 'Click this button to backup your data.'
122
+ end
123
+
124
+ # ========================================================================= #
125
+ # === do_backup_the_data
126
+ # ========================================================================= #
127
+ def do_backup_the_data
128
+ from = @backup_from_this_target.text
129
+ to = @backup_to_this_target.text
130
+ @label_showing_results.set_text(
131
+ 'Command that will be run: '+"\n\n"+' cp -rv '+from+' '+to+"\n"
132
+ )
133
+ e 'Backing up the data next, from `'+sfile(from)+'` to `'+sfile(to)+'`.'
134
+ copy_from_to(from, to)
135
+ end
136
+
137
+ # ========================================================================= #
138
+ # === main_target?
139
+ #
140
+ # This method will "return" our main target.
141
+ # ========================================================================= #
142
+ def main_target?
143
+ @backup_to_this_target.text
144
+ end
145
+
146
+ # ========================================================================= #
147
+ # === copy_from_to
148
+ #
149
+ # This is the method that can be used for backing up the data.
150
+ # ========================================================================= #
151
+ def copy_from_to(from, to)
152
+ unless File.directory? from
153
+ e "#{sfile(from)} should be a directory."
154
+ end
155
+ begin
156
+ FileUtils.cp_r(from, to)
157
+ rescue Exception => error
158
+ pp error
159
+ end
160
+ end
161
+
162
+ # ========================================================================= #
163
+ # === create_user_interface
164
+ # ========================================================================= #
165
+ def create_user_interface
166
+ override_background_color(
167
+ :normal,
168
+ Gdk::RGBA.new(0.999, 0.999, 0.999, 1)
169
+ )
170
+ # ======================================================================= #
171
+ # First create the @menu_bar which will holds the individual menus.
172
+ # ======================================================================= #
173
+ @menu_bar = gtk_menu_bar # <- The menu-bar.
174
+ filemenu1 = gtk_menu
175
+ # ======================================================================= #
176
+ # Add the menu-item label called file.
177
+ # ======================================================================= #
178
+ filem1 = ::Gtk.menu_item_with_this_label('File')
179
+ filem1.set_submenu(filemenu1)
180
+ exit = ::Gtk.menu_item_with_this_label('Exit')
181
+ exit.signal_connect(:activate) { do_exit }
182
+ filemenu1.append(exit)
183
+ # ======================================================================= #
184
+ # Add it onto the main menu-bar:
185
+ # ======================================================================= #
186
+ @menu_bar.append(filem1)
187
+
188
+ filemenu2 = gtk_menu
189
+ # ======================================================================= #
190
+ # Add the menu-item label called file.
191
+ # ======================================================================= #
192
+ filem2 = ::Gtk.menu_item_with_this_label('Options')
193
+ filem2.set_submenu(filemenu2)
194
+ about = ::Gtk.menu_item_with_this_label('About')
195
+ about.signal_connect(:activate) {
196
+ ::Gtk.return_about_dialog_widget
197
+ }
198
+ exit = ::Gtk.menu_item_with_this_label('Exit2')
199
+ exit.signal_connect(:activate) { do_exit }
200
+ filemenu2.append(about)
201
+ # ======================================================================= #
202
+ # Add it onto the main menu-bar:
203
+ # ======================================================================= #
204
+ @menu_bar.append(filem2)
205
+
206
+ # filemenu2 = ::Gtk::Menu.new
207
+ # options = ::Gtk.menu_item_with_this_label('Options')
208
+ # options.set_submenu(filemenu2)
209
+ # filemenu2.append(options)
210
+ #
211
+ # filemenu2.append(about)
212
+ # # ======================================================================= #
213
+ # # Add it onto the main menu-bar:
214
+ # # ======================================================================= #
215
+ # @menu_bar.append(filemenu2)
216
+ add_main_box
217
+ signal_connect(:destroy) { do_exit }
218
+ determine_the_default_size
219
+ set_window_position :center
220
+ # ======================================================================= #
221
+ # Next, run the main application.
222
+ # ======================================================================= #
223
+ end
224
+
225
+ # ========================================================================= #
226
+ # === run_the_application
227
+ # ========================================================================= #
228
+ def run_the_application
229
+ show_all
230
+ maximize
231
+ ::Gtk.main
232
+ end
233
+
234
+ # ========================================================================= #
235
+ # === do_exit
236
+ # ========================================================================= #
237
+ def do_exit
238
+ ::Gtk.main_quit
239
+ end; alias exit_application do_exit # === exit_application
240
+
241
+ # ========================================================================= #
242
+ # === add_the_default_accel_groups
243
+ # ========================================================================= #
244
+ def add_the_default_accel_groups
245
+ @accel_group = ::Gtk::AccelGroup.new
246
+ # ======================================================================= #
247
+ # ctrl+q
248
+ # ======================================================================= #
249
+ @accel_group.connect( Gdk::Keyval::KEY_Q, :control_mask,
250
+ :visible) { exit_application }
251
+ add_accel_group(@accel_group)
252
+ end
253
+
254
+ # ========================================================================= #
255
+ # === determine_the_default_size
256
+ # ========================================================================= #
257
+ def determine_the_default_size
258
+ set_default_size(WIDTH, HEIGHT)
259
+ end
260
+
261
+ # ========================================================================= #
262
+ # === copy_this_file
263
+ # ========================================================================= #
264
+ def copy_this_file(a, b)
265
+ ::BackupParadise.copy_this_file(a, b)
266
+ end
267
+
268
+ # ========================================================================= #
269
+ # === do_transfer_a_single_file
270
+ # ========================================================================= #
271
+ def do_transfer_a_single_file
272
+ _ = @entry_for_transfer_of_a_single_file.text.to_s.strip
273
+ target = main_target?
274
+ if _.empty?
275
+ e 'Please supply a file to transfer.'
276
+ else
277
+ e "Now trying to copy #{_} to #{target}."
278
+ copy_this_file(_, target)
279
+ end
280
+ end
281
+
282
+ # ========================================================================= #
283
+ # === add_main_box
284
+ #
285
+ # This method will create a vbox that will be added.
286
+ # ========================================================================= #
287
+ def add_main_box
288
+ vbox = ::Gtk::Box.new(:vertical, 2)
289
+ vbox.pack_start(@menu_bar,
290
+ expand: false,
291
+ fill: false,
292
+ padding: 0
293
+ )
294
+ label_backup_from_source = gtk_label('Backup from (source):')
295
+ label_backup_from_source.set_markup(
296
+ %Q(<span weight="bold">#{label_backup_from_source.text}</span>)
297
+ )
298
+ vbox.pack_start(
299
+ label_backup_from_source, padding: 1
300
+ )
301
+ @backup_from_this_target = gtk_entry
302
+ @backup_from_this_target.set_text('C::\ingrid')
303
+
304
+ # ======================================================================= #
305
+ # Next add a hbox that will also hold a button for the choose-file
306
+ # dialog.
307
+ # ======================================================================= #
308
+ hbox = ::Gtk::Box.new(:horizontal, 2)
309
+ hbox.pack_start(@backup_from_this_target, expand: true, fill: true, padding: 1)
310
+ @button_choose_file = gtk_button(file: 'choose file')
311
+ @button_choose_file.signal_connect(:clicked) {
312
+ create_file_chooser_dialog_widget
313
+ run_file_chooser_dialog
314
+ }
315
+ hbox.pack_start(@button_choose_file, expand: false, fill: false, padding: 5)
316
+ vbox.pack_start(hbox, padding: 1)
317
+ label_backup_to_this_target = gtk_label('Backup to this device (target):')
318
+ label_backup_to_this_target.set_markup(
319
+ %Q(<span weight="bold">#{label_backup_to_this_target.text}</span>)
320
+ )
321
+ vbox.pack_start(
322
+ label_backup_to_this_target, padding: 1
323
+ )
324
+ @backup_to_this_target = gtk_entry
325
+ @backup_to_this_target.set_text('D::\ingrid')
326
+ vbox.pack_start(
327
+ @backup_to_this_target, padding: 1
328
+ )
329
+ create_the_backup_button
330
+ vbox.pack_start(@backup_button)
331
+ vbox.pack_start(::Gtk::Separator.new(:horizontal))
332
+ @label_showing_results = gtk_label
333
+ vbox.pack_start(@label_showing_results)
334
+ add_components_for_individual_transfer_of_files_or_directories(vbox)
335
+ add(vbox)
336
+ end
337
+
338
+ # ========================================================================= #
339
+ # === run_file_chooser_dialog
340
+ # ========================================================================= #
341
+ def run_file_chooser_dialog
342
+ _ = @file_chooser_dialog
343
+ if _ and (_.run == ::Gtk::ResponseType::ACCEPT)
344
+ filename = _.filename
345
+ e "filename = #{filename}"
346
+ e "uri = #{_.uri}"
347
+ end
348
+ end
349
+
350
+ # ========================================================================= #
351
+ # === create_file_chooser_dialog_widget
352
+ # ========================================================================= #
353
+ def create_file_chooser_dialog_widget
354
+ @file_chooser_dialog = ::Gtk::FileChooserDialog.new(
355
+ self: self,
356
+ title: 'Choose a file or directory',
357
+ action: ::Gtk::FileChooserAction::OPEN,
358
+ buttons: [[::Gtk::Stock::OPEN, ::Gtk::ResponseType::ACCEPT],
359
+ [::Gtk::Stock::CANCEL, ::Gtk::ResponseType::CANCEL]]
360
+ )
361
+ @file_chooser_dialog.add_shortcut_folder('/Depot/Temp/')
362
+ @file_chooser_dialog.add_shortcut_folder(HOME_DIRECTORY_OF_THE_USER_X+'DATA/')
363
+ @file_chooser_dialog.add_shortcut_folder('/Ingrid')
364
+ @file_chooser_dialog.current_folder = Dir.pwd
365
+ @file_chooser_dialog.show_hidden = true # <- Show hidden files.
366
+ #@file_chooser_dialog.destroy
367
+ end
368
+
369
+ # ========================================================================= #
370
+ # === run
371
+ # ========================================================================= #
372
+ def run
373
+ add_the_default_accel_groups
374
+ create_file_chooser_dialog_widget
375
+ create_user_interface
376
+ run_the_application
377
+ end
378
+
379
+ end; end; end; end
380
+
381
+ if __FILE__ == $PROGRAM_NAME
382
+ AdvancedBackup::GUI::Gtk::BackupWidget.new
383
+ end # gtkbackup
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'backup_paradise/project/project_base_directory.rb'
6
+ # =========================================================================== #
7
+ module BackupParadise
8
+
9
+ # ========================================================================= #
10
+ # === PROJECT_BASE_DIRECTORY
11
+ # ========================================================================= #
12
+ PROJECT_BASE_DIRECTORY =
13
+ File.absolute_path("#{__dir__}/..")+'/'
14
+
15
+ # ========================================================================= #
16
+ # === BackupParadise.project_base_dir?
17
+ # ========================================================================= #
18
+ def self.project_base_dir?
19
+ BackupParadise::PROJECT_BASE_DIRECTORY
20
+ end
21
+
22
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # When you wish to require the whole project, this is the file to go for.
6
+ # =========================================================================== #
7
+ # require 'backup_paradise/requires/require_the_backup_paradise_project.rb'
8
+ # =========================================================================== #
9
+ require 'backup_paradise/project/project_base_directory.rb'
10
+ require 'backup_paradise/toplevel_methods/e.rb'
11
+ require 'backup_paradise/toplevel_methods/mountpoint.rb'
12
+ require 'backup_paradise/toplevel_methods/misc.rb'
13
+ require 'backup_paradise/advanced_backup/advanced_backup.rb'
14
+ require 'backup_paradise/tab/tab.rb'
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === BackupParadise::Tab
6
+ #
7
+ # This file handles tab-related activities, most normally renaming a tab.
8
+ # Right now we have only some support for KDE tabs and mrxvt tabs.
9
+ # =========================================================================== #
10
+ # require 'backup_paradise/tab/tab.rb'
11
+ # =========================================================================== #
12
+ module BackupParadise
13
+
14
+ module Tab # === BackupParadise::Tab
15
+
16
+ begin
17
+ require 'roebe/classes/mrxvt_options.rb'
18
+ rescue LoadError; end
19
+
20
+ # ========================================================================= #
21
+ # === BackupParadise::Tab.rename_tab
22
+ #
23
+ # This method does some additional checks before invoking the method
24
+ # set_mrxvt_tab_title. set_konsole_tab_title() may work, if the
25
+ # user at hand has the roebe gem installed (aka, on my home system).
26
+ # ========================================================================= #
27
+ def self.rename_tab(
28
+ i = :mrxvt,
29
+ optional_title = 'Backup', # <- This is the new title.
30
+ use_this_program_to_rename_tabs = :mrxvt
31
+ )
32
+ case i.to_sym # case tag
33
+ # ======================================================================= #
34
+ # === :konsole
35
+ # ======================================================================= #
36
+ when :konsole,
37
+ :default
38
+ set_konsole_tab_title(optional_title)
39
+ # ======================================================================= #
40
+ # === :mrxvt
41
+ # ======================================================================= #
42
+ when :mrxvt
43
+ set_mrxvt_tab_title(optional_title) # Defined in this module here.
44
+ # ======================================================================= #
45
+ # === :blank
46
+ #
47
+ # This entry point re-sets the title of the terminal tab again to
48
+ # empty.
49
+ # ======================================================================= #
50
+ when :blank
51
+ case use_this_program_to_rename_tabs
52
+ when :konsole
53
+ set_konsole_tab_title(optional_title)
54
+ when :mrxvt
55
+ set_mrxvt_tab_title(optional_title)
56
+ end
57
+ end
58
+ end
59
+
60
+ # ========================================================================= #
61
+ # === BackupParadise::Tab.set_mrxvt_tab_title
62
+ # ========================================================================= #
63
+ def self.set_mrxvt_tab_title(i)
64
+ if Object.const_defined? :Roebe
65
+ begin
66
+ require 'roebe/classes/mrxvt_options.rb'
67
+ rescue LoadError; end
68
+ Roebe::MrxvtOptions.set_title(i)
69
+ end
70
+ end
71
+
72
+ # ========================================================================= #
73
+ # === BackupParadise::Tab.set_konsole_tab_title
74
+ # ========================================================================= #
75
+ def self.set_konsole_tab_title(i)
76
+ if Object.const_defined? :Roebe
77
+ begin
78
+ require 'roebe/classes/kde/kde_konsole.rb'
79
+ rescue LoadError; end
80
+ Roebe.rename_konsole_title_to(i, :be_quiet)
81
+ end
82
+ end
83
+
84
+ end; end