backup_paradise 1.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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