ftp_paradise 1.4.5 → 1.5.3
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 ftp_paradise might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +152 -28
- data/bin/{iftp → ftp_paradise_shell} +1 -1
- data/doc/README.gen +97 -15
- data/doc/todo/{TODO_FOR_FTP_PARADISE_PROJECT.md → todo_for_the_ftp_paradise_project.md} +0 -0
- data/ftp_paradise.gemspec +30 -39
- data/lib/ftp_paradise/base/base.rb +375 -0
- data/lib/ftp_paradise/colours/colours.rb +27 -27
- data/lib/ftp_paradise/colours/use_colours.rb +6 -1
- data/lib/ftp_paradise/configuration/configuration.rb +7 -4
- data/lib/ftp_paradise/connection/README.md +0 -0
- data/lib/ftp_paradise/connection/connection.rb +2782 -15
- data/lib/ftp_paradise/constants/constants.rb +91 -5
- data/lib/ftp_paradise/entry/entry.rb +42 -5
- data/lib/ftp_paradise/{connection → gui/gtk3/ftp_client}/constants.rb +33 -21
- data/lib/ftp_paradise/gui/{shared_code/ftp_paradise/ftp_paradise_module.rb → gtk3/ftp_client/ftp_client.rb} +658 -170
- data/lib/ftp_paradise/gui/gtk3/ftp_client/misc.rb +27 -0
- data/lib/ftp_paradise/project/project.rb +11 -15
- data/lib/ftp_paradise/requires/require_class_connection.rb +7 -0
- data/lib/ftp_paradise/requires/require_net_ftp.rb +7 -0
- data/lib/ftp_paradise/requires/require_the_ftp_paradise_project.rb +4 -3
- data/lib/ftp_paradise/requires/require_the_ftp_paradise_project_with_the_GUI_bindings.rb +1 -1
- data/lib/ftp_paradise/requires/require_the_toplevel_methods.rb +1 -0
- data/lib/ftp_paradise/{interactive_ftp → shell}/menu.rb +554 -448
- data/lib/ftp_paradise/shell/shell.rb +2321 -0
- data/lib/ftp_paradise/toplevel_methods/connect.rb +3 -0
- data/lib/ftp_paradise/toplevel_methods/dataset.rb +111 -0
- data/lib/ftp_paradise/toplevel_methods/file_related_actions.rb +4 -3
- data/lib/ftp_paradise/toplevel_methods/ftp_object.rb +6 -5
- data/lib/ftp_paradise/toplevel_methods/login_name.rb +6 -4
- data/lib/ftp_paradise/toplevel_methods/misc.rb +19 -0
- data/lib/ftp_paradise/toplevel_methods/opn.rb +1 -1
- data/lib/ftp_paradise/toplevel_methods/password.rb +4 -2
- data/lib/ftp_paradise/toplevel_methods/port.rb +4 -1
- data/lib/ftp_paradise/toplevel_methods/remote_url.rb +11 -5
- data/lib/ftp_paradise/toplevel_methods/upload_and_download.rb +1 -0
- data/lib/ftp_paradise/version/version.rb +6 -1
- data/lib/ftp_paradise/www/web_interface.cgi +1 -1
- data/lib/ftp_paradise/yaml/automatically_connect_on_startup_of_the_interactive_ftp_shell.yml +0 -0
- data/lib/ftp_paradise/yaml/debug.yml +0 -0
- data/lib/ftp_paradise/yaml/open_in_default_editor.yml +0 -0
- data/lib/ftp_paradise/yaml/show_full_names.yml +0 -0
- data/lib/ftp_paradise/yaml/use_colours.yml +0 -0
- data/test/testing_minimal_pure_net_ftp_example_to_connect.rb +13 -3
- metadata +52 -126
- data/lib/ftp_paradise/base/cliner.rb +0 -23
- data/lib/ftp_paradise/base/colours.rb +0 -83
- data/lib/ftp_paradise/base/prototype.rb +0 -171
- data/lib/ftp_paradise/base/reset.rb +0 -29
- data/lib/ftp_paradise/connection/data.rb +0 -164
- data/lib/ftp_paradise/connection/debug.rb +0 -78
- data/lib/ftp_paradise/connection/directory_handling.rb +0 -271
- data/lib/ftp_paradise/connection/do_login.rb +0 -108
- data/lib/ftp_paradise/connection/download.rb +0 -86
- data/lib/ftp_paradise/connection/file_handling.rb +0 -174
- data/lib/ftp_paradise/connection/ftp_object.rb +0 -21
- data/lib/ftp_paradise/connection/initialize.rb +0 -88
- data/lib/ftp_paradise/connection/initialize_a_new_net_ftp_object_with_this_url.rb +0 -20
- data/lib/ftp_paradise/connection/is_connected.rb +0 -46
- data/lib/ftp_paradise/connection/misc.rb +0 -474
- data/lib/ftp_paradise/connection/notify.rb +0 -71
- data/lib/ftp_paradise/connection/password.rb +0 -47
- data/lib/ftp_paradise/connection/port.rb +0 -33
- data/lib/ftp_paradise/connection/remote_pwd.rb +0 -72
- data/lib/ftp_paradise/connection/remote_url.rb +0 -164
- data/lib/ftp_paradise/connection/remove.rb +0 -143
- data/lib/ftp_paradise/connection/reset.rb +0 -78
- data/lib/ftp_paradise/connection/run.rb +0 -18
- data/lib/ftp_paradise/connection/set_array_available_hosts.rb +0 -27
- data/lib/ftp_paradise/connection/set_input.rb +0 -18
- data/lib/ftp_paradise/connection/show.rb +0 -153
- data/lib/ftp_paradise/connection/sync_ftp_object_onto_the_main_namespace.rb +0 -24
- data/lib/ftp_paradise/connection/transfer_mode.rb +0 -163
- data/lib/ftp_paradise/connection/upload.rb +0 -253
- data/lib/ftp_paradise/connection/use_default_dataset.rb +0 -40
- data/lib/ftp_paradise/connection/username.rb +0 -42
- data/lib/ftp_paradise/constants/misc.rb +0 -57
- data/lib/ftp_paradise/constants/namespace.rb +0 -14
- data/lib/ftp_paradise/constants/newline.rb +0 -14
- data/lib/ftp_paradise/constants/roebe.rb +0 -31
- data/lib/ftp_paradise/constants/roebe_ftp_constants.rb +0 -233
- data/lib/ftp_paradise/gui/gtk2/ftp_paradise.rb +0 -34
- data/lib/ftp_paradise/gui/gtk3/ftp_paradise.rb +0 -34
- data/lib/ftp_paradise/interactive_ftp/constants.rb +0 -103
- data/lib/ftp_paradise/interactive_ftp/directory_handling.rb +0 -216
- data/lib/ftp_paradise/interactive_ftp/help.rb +0 -50
- data/lib/ftp_paradise/interactive_ftp/initialize.rb +0 -27
- data/lib/ftp_paradise/interactive_ftp/interactive_ftp.rb +0 -998
- data/lib/ftp_paradise/interactive_ftp/main_loop.rb +0 -51
- data/lib/ftp_paradise/interactive_ftp/misc.rb +0 -208
- data/lib/ftp_paradise/interactive_ftp/mode.rb +0 -124
- data/lib/ftp_paradise/interactive_ftp/readline.rb +0 -113
- data/lib/ftp_paradise/interactive_ftp/remove.rb +0 -97
- data/lib/ftp_paradise/interactive_ftp/reset.rb +0 -90
- data/lib/ftp_paradise/interactive_ftp/run.rb +0 -22
- data/lib/ftp_paradise/interactive_ftp/show.rb +0 -184
- data/lib/ftp_paradise/interactive_ftp/upload.rb +0 -90
- data/lib/ftp_paradise/interactive_ftp/user_input.rb +0 -53
- data/lib/ftp_paradise/toplevel_methods/can_connect_to_remote_site.rb +0 -28
- data/lib/ftp_paradise/toplevel_methods/clear_user_dataset.rb +0 -28
- data/lib/ftp_paradise/toplevel_methods/data.rb +0 -31
- data/lib/ftp_paradise/toplevel_methods/determine_user_dataset_from_this_hash.rb +0 -37
@@ -2,60 +2,678 @@
|
|
2
2
|
# Encoding: UTF-8
|
3
3
|
# frozen_string_literal: true
|
4
4
|
# =========================================================================== #
|
5
|
-
# === FtpParadise::GUI::Gtk::
|
5
|
+
# === FtpParadise::GUI::Gtk::FtpClient
|
6
6
|
#
|
7
7
|
# The purpose of this class is to provide a GTK-FTP Client, loosely
|
8
8
|
# modelled after the client called "gftp".
|
9
9
|
# =========================================================================== #
|
10
|
-
# require 'ftp_paradise/gui/
|
11
|
-
#
|
10
|
+
# require 'ftp_paradise/gui/gtk3/ftp_client/ftp_client.rb'
|
11
|
+
# FtpParadise::GUI::Gtk::FtpClient.run
|
12
12
|
# =========================================================================== #
|
13
|
+
require 'gtk_paradise/require_gtk3'
|
14
|
+
|
13
15
|
module FtpParadise
|
14
16
|
|
15
17
|
module GUI
|
16
18
|
|
17
19
|
module Gtk
|
18
20
|
|
19
|
-
|
21
|
+
class FtpClient < ::Gtk::Box # === FtpParadise::GUI::Gtk::FtpClient
|
22
|
+
|
23
|
+
require 'ftp_paradise/requires/require_the_toplevel_methods.rb'
|
24
|
+
require 'ftp_paradise/entry/entry.rb'
|
25
|
+
require 'ftp_paradise/gui/gtk3/ftp_client/constants.rb'
|
26
|
+
require 'ftp_paradise/gui/gtk3/ftp_client/misc.rb'
|
20
27
|
|
21
|
-
require 'ftp_paradise/base/
|
28
|
+
require 'ftp_paradise/base/base.rb'
|
22
29
|
include ::FtpParadise::Base
|
23
30
|
|
24
|
-
require '
|
31
|
+
require 'gtk_paradise/requires/require_the_base_module.rb'
|
32
|
+
include ::Gtk::BaseModule
|
25
33
|
|
26
|
-
require 'ftp_paradise/
|
34
|
+
require 'ftp_paradise/colours/use_colours.rb'
|
35
|
+
include Colours
|
27
36
|
|
28
|
-
require 'ftp_paradise/
|
37
|
+
require 'ftp_paradise/connection/connection.rb'
|
29
38
|
|
30
|
-
|
39
|
+
# ========================================================================= #
|
40
|
+
# === initialize
|
41
|
+
# ========================================================================= #
|
42
|
+
def initialize(
|
43
|
+
commandline_arguments = ARGV,
|
44
|
+
run_already = true
|
45
|
+
)
|
46
|
+
super(:vertical)
|
47
|
+
reset
|
48
|
+
set_commandline_arguments(
|
49
|
+
commandline_arguments
|
50
|
+
)
|
51
|
+
run if run_already
|
52
|
+
end
|
31
53
|
|
32
|
-
|
33
|
-
|
54
|
+
# ========================================================================= #
|
55
|
+
# === reset (reset tag)
|
56
|
+
# ========================================================================= #
|
57
|
+
def reset
|
58
|
+
reset_the_internal_variables
|
59
|
+
infer_the_namespace
|
60
|
+
# ======================================================================= #
|
61
|
+
# === @configuration
|
62
|
+
# ======================================================================= #
|
63
|
+
@configuration = [true, __dir__, namespace?]
|
64
|
+
# ======================================================================= #
|
65
|
+
# === Set the title, width, height and the font in use.
|
66
|
+
# ======================================================================= #
|
67
|
+
title_width_height_font(TITLE, WIDTH, HEIGHT, USE_THIS_FONT)
|
68
|
+
handle_CSS
|
69
|
+
infer_the_size_automatically
|
70
|
+
# ======================================================================= #
|
71
|
+
# === @use_this_background_colour_for_the_entries
|
72
|
+
# ======================================================================= #
|
73
|
+
@use_this_background_colour_for_the_entries = '#d4ffd3' # A very light green background.
|
74
|
+
# ======================================================================= #
|
75
|
+
# === @ftp_connection
|
76
|
+
# ======================================================================= #
|
77
|
+
@ftp_connection = FtpParadise::Connection.new
|
78
|
+
# ======================================================================= #
|
79
|
+
# === @hash_remote_entries
|
80
|
+
# ======================================================================= #
|
81
|
+
@hash_remote_entries = {}
|
82
|
+
try_to_create_a_temporary_log_directory_and_cd_into_it_or_the_temp_directory
|
83
|
+
end
|
34
84
|
|
35
85
|
# ========================================================================= #
|
36
|
-
# ===
|
86
|
+
# === handle_CSS (CSS tag)
|
37
87
|
# ========================================================================= #
|
38
|
-
|
88
|
+
def handle_CSS
|
89
|
+
use_gtk_paradise_project_css_file
|
90
|
+
more_CSS '
|
91
|
+
grid {
|
92
|
+
border: 1px dotted steelblue;
|
93
|
+
padding: 20px;
|
94
|
+
}'
|
95
|
+
end
|
39
96
|
|
40
97
|
# ========================================================================= #
|
41
|
-
# ===
|
98
|
+
# === padding?
|
42
99
|
# ========================================================================= #
|
43
|
-
|
100
|
+
def padding?
|
101
|
+
0
|
102
|
+
end
|
44
103
|
|
45
104
|
# ========================================================================= #
|
46
|
-
# ===
|
105
|
+
# === border_size?
|
47
106
|
# ========================================================================= #
|
48
|
-
|
107
|
+
def border_size?
|
108
|
+
0
|
109
|
+
end
|
49
110
|
|
50
111
|
# ========================================================================= #
|
51
|
-
# ===
|
112
|
+
# === return_top_bar
|
52
113
|
# ========================================================================= #
|
53
|
-
|
114
|
+
def return_top_bar
|
115
|
+
_ = default_header_bar { :with_close_button_and_inferred_title }
|
116
|
+
return _
|
117
|
+
end
|
54
118
|
|
55
119
|
# ========================================================================= #
|
56
|
-
# ===
|
120
|
+
# === deselect_the_main_entry
|
57
121
|
# ========================================================================= #
|
58
|
-
|
122
|
+
def deselect_the_main_entry
|
123
|
+
Thread.new {
|
124
|
+
sleep 0.0001
|
125
|
+
@entry_connect_to_this_host.deselect_everything
|
126
|
+
}
|
127
|
+
end
|
128
|
+
|
129
|
+
# ========================================================================= #
|
130
|
+
# === set_port_to_use
|
131
|
+
# ========================================================================= #
|
132
|
+
def set_port_to_use(i)
|
133
|
+
@entry_port_to_use.set_text(i.to_s)
|
134
|
+
end
|
135
|
+
|
136
|
+
# ========================================================================= #
|
137
|
+
# === set_entry_username
|
138
|
+
# ========================================================================= #
|
139
|
+
def set_entry_username(i)
|
140
|
+
@entry_username.set_text(i)
|
141
|
+
end; alias set_the_username set_entry_username # === set_the_username
|
142
|
+
|
143
|
+
# ========================================================================= #
|
144
|
+
# === user_name?
|
145
|
+
# ========================================================================= #
|
146
|
+
def user_name?
|
147
|
+
@entry_username.text?
|
148
|
+
end; alias username? user_name? # === username?
|
149
|
+
|
150
|
+
# ========================================================================= #
|
151
|
+
# === set_the_password
|
152
|
+
# ========================================================================= #
|
153
|
+
def set_the_password(i)
|
154
|
+
@entry_password.set_text(i.to_s)
|
155
|
+
end
|
156
|
+
|
157
|
+
# ========================================================================= #
|
158
|
+
# === set_connect_to
|
159
|
+
# ========================================================================= #
|
160
|
+
def set_connect_to(i)
|
161
|
+
@entry_connect_to_this_host.set_text(i)
|
162
|
+
end
|
163
|
+
|
164
|
+
# ========================================================================= #
|
165
|
+
# === create_the_entries (entries tag, entry tag)
|
166
|
+
# ========================================================================= #
|
167
|
+
def create_the_entries
|
168
|
+
# ======================================================================= #
|
169
|
+
# === @entry_connect_to_this_host
|
170
|
+
# ======================================================================= #
|
171
|
+
@entry_connect_to_this_host = gtk_entry
|
172
|
+
@entry_connect_to_this_host.hint = 'Specify the remote host here.'
|
173
|
+
@entry_connect_to_this_host.shadow_hint = 'Specify the remote host here.'
|
174
|
+
# ======================================================================= #
|
175
|
+
# === @entry_username
|
176
|
+
# ======================================================================= #
|
177
|
+
@entry_username = gtk_entry
|
178
|
+
@entry_username.hint = 'Specify the user name here. This is '\
|
179
|
+
'the name that is to be used for the FTP login.'
|
180
|
+
@entry_username.shadow_hint = 'Specify the user name here.'
|
181
|
+
# ======================================================================= #
|
182
|
+
# === @entry_password
|
183
|
+
# ======================================================================= #
|
184
|
+
@entry_password = gtk_entry
|
185
|
+
@entry_password.hint = "Specify the user's password here."
|
186
|
+
@entry_password.shadow_hint = "Specify the user's password here."
|
187
|
+
# ======================================================================= #
|
188
|
+
# === @entry_port_to_use
|
189
|
+
# ======================================================================= #
|
190
|
+
@entry_port_to_use = gtk_entry
|
191
|
+
@entry_port_to_use.hint = 'Specify the port to use here.'
|
192
|
+
@entry_port_to_use.shadow_hint = 'Specify the port to use here.'
|
193
|
+
all_entries?.each {|this_entry|
|
194
|
+
this_entry.clear_background
|
195
|
+
this_entry.use_this_font(SMALLER_FONT)
|
196
|
+
this_entry.very_light_yellow_background
|
197
|
+
this_entry.bblack2
|
198
|
+
this_entry.pad8px
|
199
|
+
this_entry.center
|
200
|
+
uniform_width_and_height_for_this_entry(this_entry)
|
201
|
+
}
|
202
|
+
end
|
203
|
+
|
204
|
+
# ========================================================================= #
|
205
|
+
# === uniform_width_and_height_for_this_entry
|
206
|
+
# ========================================================================= #
|
207
|
+
def uniform_width_and_height_for_this_entry(this_entry)
|
208
|
+
this_entry.width_height(460, 22)
|
209
|
+
end; alias uniform_entry_width uniform_width_and_height_for_this_entry # === uniform_entry_width
|
210
|
+
|
211
|
+
# ========================================================================= #
|
212
|
+
# === entry_connect_to_this_host?
|
213
|
+
# ========================================================================= #
|
214
|
+
def entry_connect_to_this_host?
|
215
|
+
@entry_connect_to_this_host
|
216
|
+
end; alias entry_for_the_remote_host? entry_connect_to_this_host? # === entry_for_the_remote_host?
|
217
|
+
|
218
|
+
# ========================================================================= #
|
219
|
+
# === remote_host?
|
220
|
+
# ========================================================================= #
|
221
|
+
def remote_host?
|
222
|
+
entry_for_the_remote_host?.text?
|
223
|
+
end; alias remote_host_as_text? remote_host? # === remote_host_as_text?
|
224
|
+
|
225
|
+
# ========================================================================= #
|
226
|
+
# === is_on_roebe?
|
227
|
+
# ========================================================================= #
|
228
|
+
def is_on_roebe?
|
229
|
+
::FtpParadise.is_on_roebe?
|
230
|
+
end
|
231
|
+
|
232
|
+
# ========================================================================= #
|
233
|
+
# === create_skeleton (create tag, skeleton tag)
|
234
|
+
# ========================================================================= #
|
235
|
+
def create_skeleton
|
236
|
+
create_the_statusbar
|
237
|
+
create_text_buffer
|
238
|
+
create_the_status_icon
|
239
|
+
create_the_entries
|
240
|
+
create_the_buttons # Must come before the middle grid is created.
|
241
|
+
create_the_middle_grid_containing_the_delete_and_download_functionality
|
242
|
+
end
|
243
|
+
|
244
|
+
# ========================================================================= #
|
245
|
+
# === create_the_status_icon
|
246
|
+
# ========================================================================= #
|
247
|
+
def create_the_status_icon
|
248
|
+
@status_icon = gtk_status_icon
|
249
|
+
if File.exist? FTP_MAIN_ICON
|
250
|
+
@status_icon.pixbuf = GdkPixbuf::Pixbuf.new(file: FTP_MAIN_ICON)
|
251
|
+
end
|
252
|
+
@status_icon.hint = 'StatusIcon'
|
253
|
+
end
|
254
|
+
|
255
|
+
# ========================================================================= #
|
256
|
+
# === create_text_buffer
|
257
|
+
# ========================================================================= #
|
258
|
+
def create_text_buffer
|
259
|
+
@text_buffer = gtk_text_buffer
|
260
|
+
end
|
261
|
+
|
262
|
+
# ========================================================================= #
|
263
|
+
# === password?
|
264
|
+
# ========================================================================= #
|
265
|
+
def password?
|
266
|
+
@entry_password.text?
|
267
|
+
end; alias user_password? password? # === user_password?
|
268
|
+
|
269
|
+
# ========================================================================= #
|
270
|
+
# === try_to_return_the_ftp_listing
|
271
|
+
# ========================================================================= #
|
272
|
+
def try_to_return_the_ftp_listing
|
273
|
+
begin
|
274
|
+
@ftp_connection.list
|
275
|
+
rescue Exception => error
|
276
|
+
pp error
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
# ========================================================================= #
|
281
|
+
# === update_the_buffer_containing_all_remote_entries
|
282
|
+
# ========================================================================= #
|
283
|
+
def update_the_buffer_containing_all_remote_entries(
|
284
|
+
list = try_to_return_the_ftp_listing
|
285
|
+
)
|
286
|
+
if list.is_a? Array
|
287
|
+
@hash_remote_entries.clear
|
288
|
+
array = list.map {|entry|
|
289
|
+
FtpParadise::Entry.new(entry)
|
290
|
+
}
|
291
|
+
array.each {|inner_entry|
|
292
|
+
@hash_remote_entries[inner_entry.filename?] = inner_entry
|
293
|
+
}
|
294
|
+
keys = @hash_remote_entries.keys
|
295
|
+
utf8_keys = keys.map {|most_inner_entry|
|
296
|
+
::Gtk.to_utf8(most_inner_entry)
|
297
|
+
}
|
298
|
+
@text_buffer.set_text(utf8_keys.join("\n"))
|
299
|
+
end
|
300
|
+
end; alias update_the_buffer update_the_buffer_containing_all_remote_entries # === update_the_buffer
|
301
|
+
alias update_the_main_buffer update_the_buffer_containing_all_remote_entries # === update_the_main_buffer
|
302
|
+
|
303
|
+
# ========================================================================= #
|
304
|
+
# === create_the_grid (top grid)
|
305
|
+
# ========================================================================= #
|
306
|
+
def create_the_grid
|
307
|
+
grid = default_grid
|
308
|
+
grid.left(gtk_left_aligned_label('Connect to: '))
|
309
|
+
grid.middle(@entry_connect_to_this_host)
|
310
|
+
grid.right(return_combined_checkboxes_determining_the_transfer_mode)
|
311
|
+
grid.new_row
|
312
|
+
grid.left(gtk_left_aligned_label('Username: '))
|
313
|
+
grid.middle(@entry_username)
|
314
|
+
#grid.right(button2)
|
315
|
+
grid.new_row
|
316
|
+
grid.left(gtk_left_aligned_label('Password: '))
|
317
|
+
grid.middle(@entry_password)
|
318
|
+
grid.new_row
|
319
|
+
grid.left(gtk_left_aligned_label('Port to use: '))
|
320
|
+
grid.middle(@entry_port_to_use)
|
321
|
+
@grid = grid
|
322
|
+
end
|
323
|
+
|
324
|
+
# ========================================================================= #
|
325
|
+
# === return_combined_checkboxes_determining_the_transfer_mode
|
326
|
+
# ========================================================================= #
|
327
|
+
def return_combined_checkboxes_determining_the_transfer_mode
|
328
|
+
_ = hbox
|
329
|
+
@button_use_passive_mode = check_button_is_checked('Use _passive mode')
|
330
|
+
@button_use_active_mode = check_button('Use _active mode')
|
331
|
+
@button_use_passive_mode.on_button_press_event { |widget, event|
|
332
|
+
@button_use_passive_mode.switch_state
|
333
|
+
@button_use_active_mode.switch_state
|
334
|
+
}
|
335
|
+
@button_use_active_mode.on_button_press_event { |widget, event|
|
336
|
+
@button_use_passive_mode.switch_state
|
337
|
+
@button_use_active_mode.switch_state
|
338
|
+
}
|
339
|
+
_ << @button_use_passive_mode
|
340
|
+
_ << @button_use_active_mode
|
341
|
+
return _
|
342
|
+
end
|
343
|
+
|
344
|
+
# ========================================================================= #
|
345
|
+
# === run (run tag)
|
346
|
+
# ========================================================================= #
|
347
|
+
def run
|
348
|
+
super()
|
349
|
+
if File.exist? FtpParadise.my_ftp_file?
|
350
|
+
try_to_load_the_dataset_from_this_file(FtpParadise.my_ftp_file?)
|
351
|
+
end
|
352
|
+
deselect_the_main_entry
|
353
|
+
try_to_establish_a_ftp_connection if is_on_roebe?
|
354
|
+
end
|
355
|
+
|
356
|
+
# ========================================================================= #
|
357
|
+
# === entry_for_the_upload_this_local_file_functionality?
|
358
|
+
# ========================================================================= #
|
359
|
+
def entry_for_the_upload_this_local_file_functionality?
|
360
|
+
@entry_for_the_upload_local_file_functionality
|
361
|
+
end
|
362
|
+
|
363
|
+
# ========================================================================= #
|
364
|
+
# === try_to_load_the_dataset_from_this_file
|
365
|
+
# ========================================================================= #
|
366
|
+
def try_to_load_the_dataset_from_this_file(
|
367
|
+
i = FtpParadise.my_ftp_file?,
|
368
|
+
use_this_key = 'bplaced'
|
369
|
+
)
|
370
|
+
if File.exist? i
|
371
|
+
dataset = YAML.load_file(i)
|
372
|
+
bplaced = dataset[use_this_key]
|
373
|
+
FtpParadise.determine_user_dataset_from_this_hash(bplaced)
|
374
|
+
# ===================================================================== #
|
375
|
+
# Set the values for the entries next:
|
376
|
+
# ===================================================================== #
|
377
|
+
set_connect_to(FtpParadise.remote_url?)
|
378
|
+
set_the_username(FtpParadise.login_name?)
|
379
|
+
set_the_password(FtpParadise.password?)
|
380
|
+
set_port_to_use(FtpParadise.port?)
|
381
|
+
end
|
382
|
+
end
|
383
|
+
|
384
|
+
# ========================================================================= #
|
385
|
+
# === entry_for_the_delete_remote_file_functionality?
|
386
|
+
# ========================================================================= #
|
387
|
+
def entry_for_the_delete_remote_file_functionality?
|
388
|
+
@entry_for_the_delete_remote_file_functionality
|
389
|
+
end
|
390
|
+
|
391
|
+
# ========================================================================= #
|
392
|
+
# === connect_skeleton (connect tag)
|
393
|
+
# ========================================================================= #
|
394
|
+
def connect_skeleton
|
395
|
+
abort_on_exception
|
396
|
+
minimal(return_top_bar)
|
397
|
+
create_the_grid
|
398
|
+
minimal(@grid, 2)
|
399
|
+
minimal(horizontal_spacer)
|
400
|
+
|
401
|
+
button2 = button('List the FTP content')
|
402
|
+
button2.clear_background
|
403
|
+
button2.on_clicked {
|
404
|
+
if @ftp_connection and @ftp_connection.respond_to?(:list)
|
405
|
+
update_the_buffer_containing_all_remote_entries
|
406
|
+
end
|
407
|
+
}
|
408
|
+
button2.on_hover(:lightblue)
|
409
|
+
|
410
|
+
button1 = button('Establish a FTP connection here')
|
411
|
+
button1.clear_background
|
412
|
+
button1.on_hover(:lightblue)
|
413
|
+
button1.on_clicked {
|
414
|
+
try_to_establish_a_ftp_connection
|
415
|
+
}
|
416
|
+
|
417
|
+
box_with_buttons = hbox
|
418
|
+
box_with_buttons << button1
|
419
|
+
box_with_buttons << button2
|
420
|
+
minimal(box_with_buttons, 2)
|
421
|
+
|
422
|
+
hbox1 = gtk_hbox
|
423
|
+
hbox1.pad10px
|
424
|
+
hbox1.text 'Run this command on the remote FTP server: '
|
425
|
+
entry1 = gtk_entry
|
426
|
+
hbox1 << entry1
|
427
|
+
a_button = button('← Run this command')
|
428
|
+
a_button.on_clicked {
|
429
|
+
if @ftp_connection
|
430
|
+
@ftp_connection.sendcmd(entry1.text?)
|
431
|
+
end
|
432
|
+
}
|
433
|
+
hbox1 << a_button
|
434
|
+
minimal(hbox1, 5)
|
435
|
+
minimal(@middle_grid, 5)
|
436
|
+
text_view = gtk_text_view(@text_buffer)
|
437
|
+
scrolled_window = scrolled_window(text_view) { :always }
|
438
|
+
maximal(scrolled_window)
|
439
|
+
minimal(@status_bar)
|
440
|
+
end
|
441
|
+
|
442
|
+
# ========================================================================= #
|
443
|
+
# === create_the_buttons (buttons tag, button tag)
|
444
|
+
# ========================================================================= #
|
445
|
+
def create_the_buttons
|
446
|
+
# ======================================================================= #
|
447
|
+
# === @button_upload_local_file
|
448
|
+
# ======================================================================= #
|
449
|
+
@button_upload_local_file = button('← Upload this local file')
|
450
|
+
@button_upload_local_file.hint =
|
451
|
+
'Use this button if you wish to upload a local file.'
|
452
|
+
@button_upload_local_file.on_clicked {
|
453
|
+
do_upload_this_local_file
|
454
|
+
}
|
455
|
+
create_button_delete_remote_file
|
456
|
+
end
|
457
|
+
|
458
|
+
# ========================================================================= #
|
459
|
+
# === create_button_delete_remote_file
|
460
|
+
# ========================================================================= #
|
461
|
+
def create_button_delete_remote_file
|
462
|
+
# ======================================================================= #
|
463
|
+
# === @button_delete_remote_file
|
464
|
+
# ======================================================================= #
|
465
|
+
@button_delete_remote_file = button('← Delete this remote file') # Or: Delete remote file.
|
466
|
+
@button_delete_remote_file.hint =
|
467
|
+
'Use this button when you wish to remove a remote file.'
|
468
|
+
@button_delete_remote_file.on_clicked {
|
469
|
+
do_delete_remote_file
|
470
|
+
}
|
471
|
+
end
|
472
|
+
|
473
|
+
# ========================================================================= #
|
474
|
+
# === do_upload_this_local_file
|
475
|
+
# ========================================================================= #
|
476
|
+
def do_upload_this_local_file(
|
477
|
+
i = entry_for_the_upload_this_local_file_functionality?
|
478
|
+
)
|
479
|
+
@ftp_connection.upload_this_local_file(i.text?)
|
480
|
+
end
|
481
|
+
|
482
|
+
# ========================================================================= #
|
483
|
+
# === do_delete_remote_file (delete tag)
|
484
|
+
#
|
485
|
+
# Wrapper to delete a remote file.
|
486
|
+
# ========================================================================= #
|
487
|
+
def do_delete_remote_file(
|
488
|
+
i = entry_for_the_delete_remote_file_functionality?
|
489
|
+
)
|
490
|
+
ftp_connection?.remove_file(i.text?) { :be_verbose }
|
491
|
+
|
492
|
+
e 'DEBUG: THE FOLLOWING 3 LINES HAVE BEEN DISABLED FOR NOW'
|
493
|
+
# efancy selection?(:right)
|
494
|
+
# @ftp_connection.remove_file( selection?(:right) )
|
495
|
+
# update_everything
|
496
|
+
update_the_buffer
|
497
|
+
end; alias try_to_delete_the_remote_file do_delete_remote_file # === try_to_delete_the_remote_file
|
498
|
+
|
499
|
+
# ========================================================================= #
|
500
|
+
# === try_to_cd_into_this_directory
|
501
|
+
# ========================================================================= #
|
502
|
+
def try_to_cd_into_this_directory(
|
503
|
+
i = @entry_for_the_local_working_directory.text?
|
504
|
+
)
|
505
|
+
cd(i)
|
506
|
+
@entry_for_the_local_working_directory.set_text(return_pwd)
|
507
|
+
@entry_for_the_local_working_directory.cursor_is_on_the_end
|
508
|
+
end
|
509
|
+
|
510
|
+
# ========================================================================= #
|
511
|
+
# === FtpParadise::GUI::Gtk::FtpClient.run
|
512
|
+
# ========================================================================= #
|
513
|
+
def self.run(
|
514
|
+
i = ARGV
|
515
|
+
)
|
516
|
+
require 'gtk_paradise/app/app.rb'
|
517
|
+
_ = ::FtpParadise::GUI::Gtk::FtpClient.new(i)
|
518
|
+
r = ::Gtk.run
|
519
|
+
r << _
|
520
|
+
r.automatic_size_then_automatic_title
|
521
|
+
r.enable_quick_exit
|
522
|
+
r.do_maximize
|
523
|
+
r.top_left_then_run
|
524
|
+
end
|
525
|
+
|
526
|
+
# ========================================================================= #
|
527
|
+
# === create_the_middle_grid_containing_the_delete_and_download_functionality
|
528
|
+
#
|
529
|
+
# This is the middle grid (middle tag).
|
530
|
+
# ========================================================================= #
|
531
|
+
def create_the_middle_grid_containing_the_delete_and_download_functionality
|
532
|
+
grid = default_grid
|
533
|
+
|
534
|
+
entry = gtk_entry
|
535
|
+
uniform_width_and_height_for_this_entry(entry)
|
536
|
+
a_button = button('← Download this remote file')
|
537
|
+
a_button.on_clicked {
|
538
|
+
if @ftp_connection
|
539
|
+
_ = entry.text?
|
540
|
+
@ftp_connection.try_to_download_this_remote_file(_) { :be_verbose }
|
541
|
+
end
|
542
|
+
}
|
543
|
+
|
544
|
+
grid.left(gtk_left_aligned_label('Download this remote file: '))
|
545
|
+
grid.middle(entry)
|
546
|
+
grid.right(a_button)
|
547
|
+
grid.new_row
|
548
|
+
|
549
|
+
@entry_for_the_delete_remote_file_functionality = gtk_entry
|
550
|
+
uniform_entry_width(@entry_for_the_delete_remote_file_functionality)
|
551
|
+
grid.left(gtk_left_aligned_label('Delete this remote file: '))
|
552
|
+
grid.middle(@entry_for_the_delete_remote_file_functionality)
|
553
|
+
grid.right(@button_delete_remote_file)
|
554
|
+
grid.new_row
|
555
|
+
|
556
|
+
# ======================================================================= #
|
557
|
+
# === @entry_for_the_upload_local_file_functionality
|
558
|
+
# ======================================================================= #
|
559
|
+
@entry_for_the_upload_local_file_functionality = gtk_entry
|
560
|
+
uniform_entry_width(@entry_for_the_upload_local_file_functionality)
|
561
|
+
grid.left(gtk_left_aligned_label('Upload this local file: '))
|
562
|
+
grid.middle(@entry_for_the_upload_local_file_functionality)
|
563
|
+
grid.right(@button_upload_local_file)
|
564
|
+
grid.new_row
|
565
|
+
|
566
|
+
# ======================================================================= #
|
567
|
+
# === @entry_for_the_local_working_directory
|
568
|
+
# ======================================================================= #
|
569
|
+
@entry_for_the_local_working_directory = gtk_entry
|
570
|
+
uniform_entry_width(@entry_for_the_local_working_directory)
|
571
|
+
grid.left(gtk_left_aligned_label('The current working directory is: '))
|
572
|
+
grid.middle(@entry_for_the_local_working_directory)
|
573
|
+
@entry_for_the_local_working_directory.set_text(return_pwd)
|
574
|
+
@entry_for_the_local_working_directory.on_enter {
|
575
|
+
try_to_cd_into_this_directory(@entry_for_the_local_working_directory.text?)
|
576
|
+
}
|
577
|
+
button_change_directory_into_this_target = button('← Change directory into')
|
578
|
+
button_change_directory_into_this_target.on_clicked {
|
579
|
+
try_to_cd_into_this_directory(@entry_for_the_local_working_directory.text?)
|
580
|
+
}
|
581
|
+
grid.right(button_change_directory_into_this_target)
|
582
|
+
grid.new_row
|
583
|
+
|
584
|
+
# ======================================================================= #
|
585
|
+
# === @entry_for_the_remote_working_directory
|
586
|
+
# ======================================================================= #
|
587
|
+
@entry_for_the_remote_working_directory = gtk_entry
|
588
|
+
uniform_entry_width(@entry_for_the_remote_working_directory)
|
589
|
+
grid.left(gtk_left_aligned_label('The remote working directory is: '))
|
590
|
+
grid.middle(@entry_for_the_remote_working_directory)
|
591
|
+
@entry_for_the_remote_working_directory.set_text('/')
|
592
|
+
@entry_for_the_remote_working_directory.on_enter {
|
593
|
+
try_to_cd_into_this_remote_directory(@entry_for_the_remote_working_directory.text?)
|
594
|
+
}
|
595
|
+
button_remote_change_directory_into_this_target = button('← Change remote directory into')
|
596
|
+
button_remote_change_directory_into_this_target.on_clicked {
|
597
|
+
try_to_cd_into_this_remote_directory(@entry_for_the_remote_working_directory.text?)
|
598
|
+
}
|
599
|
+
grid.right(button_remote_change_directory_into_this_target)
|
600
|
+
grid.new_row
|
601
|
+
|
602
|
+
@middle_grid = grid
|
603
|
+
end
|
604
|
+
|
605
|
+
# ========================================================================= #
|
606
|
+
# === try_to_cd_into_this_remote_directory
|
607
|
+
# ========================================================================= #
|
608
|
+
def try_to_cd_into_this_remote_directory(
|
609
|
+
i = @entry_for_the_remote_working_directory.text?,
|
610
|
+
ftp_object = ftp_object?
|
611
|
+
)
|
612
|
+
ftp_object.remote_cd(i)
|
613
|
+
@entry_for_the_remote_working_directory.set_text(
|
614
|
+
ftp_object.remote_directory? # Always obtain the remote working directory.
|
615
|
+
)
|
616
|
+
@entry_for_the_remote_working_directory.cursor_is_on_the_end
|
617
|
+
update_the_main_buffer
|
618
|
+
end
|
619
|
+
|
620
|
+
# ========================================================================= #
|
621
|
+
# === create_the_statusbar
|
622
|
+
#
|
623
|
+
# Create the Statusbar.
|
624
|
+
# ========================================================================= #
|
625
|
+
def create_the_statusbar
|
626
|
+
@status_bar = gtk_statusbar
|
627
|
+
if @status_bar.respond_to?(:has_resize_grip=)
|
628
|
+
@status_bar.has_resize_grip = true
|
629
|
+
end
|
630
|
+
@status_bar_context_id = @status_bar.get_context_id('Gtk Ftp Client')
|
631
|
+
end
|
632
|
+
|
633
|
+
# ========================================================================= #
|
634
|
+
# === add_status_message
|
635
|
+
#
|
636
|
+
# Use this to append to the Statusbar.
|
637
|
+
# ========================================================================= #
|
638
|
+
def add_status_message(i)
|
639
|
+
@status_bar.push(@status_bar_context_id, i)
|
640
|
+
end
|
641
|
+
|
642
|
+
# ========================================================================= #
|
643
|
+
# === try_to_establish_a_ftp_connection
|
644
|
+
#
|
645
|
+
# This method will try to establish a FTP connection to the remote
|
646
|
+
# host.
|
647
|
+
# ========================================================================= #
|
648
|
+
def try_to_establish_a_ftp_connection
|
649
|
+
e 'TODO: Change this to indicate otherwise. '\
|
650
|
+
'Connecting now to the remove host at '+
|
651
|
+
steelblue(remote_host_as_text?)
|
652
|
+
# Instantiate a new net-ftp object next:
|
653
|
+
@ftp_connection.connect(
|
654
|
+
user_name: user_name?,
|
655
|
+
password: password?,
|
656
|
+
remote_host: remote_host_as_text?
|
657
|
+
)
|
658
|
+
if @button_use_passive_mode.checked?
|
659
|
+
@ftp_connection.binary = true
|
660
|
+
else
|
661
|
+
@ftp_connection.binary = false
|
662
|
+
end
|
663
|
+
@ftp_connection.set_passive
|
664
|
+
update_the_buffer_containing_all_remote_entries
|
665
|
+
end
|
666
|
+
|
667
|
+
# DEPRECATION STARTS HERE
|
668
|
+
|
669
|
+
module DEPRECATED_FtpParadiseModule
|
670
|
+
|
671
|
+
require 'gtk_paradise/widgets/gtk3/directory_content_widget/directory_content_widget.rb'
|
672
|
+
|
673
|
+
# ========================================================================= #
|
674
|
+
# === NAMESPACE
|
675
|
+
# ========================================================================= #
|
676
|
+
NAMESPACE = inspect
|
59
677
|
|
60
678
|
# ========================================================================= #
|
61
679
|
# === SHALL_WE_DEBUG
|
@@ -97,17 +715,6 @@ module FtpParadiseModule
|
|
97
715
|
# ========================================================================= #
|
98
716
|
YES_THE_USER_IS_CONNECTED = 'Yes!'
|
99
717
|
|
100
|
-
# ========================================================================= #
|
101
|
-
# === MY_TEMP
|
102
|
-
# ========================================================================= #
|
103
|
-
if ENV['MY_TEMP']
|
104
|
-
MY_TEMP = ENV['MY_TEMP'].to_s+'/'
|
105
|
-
elsif File.directory?('/home/Temp/')
|
106
|
-
MY_TEMP = '/home/Temp/'
|
107
|
-
else
|
108
|
-
MY_TEMP = '/tmp/'
|
109
|
-
end
|
110
|
-
|
111
718
|
# ========================================================================= #
|
112
719
|
# === initialize
|
113
720
|
# ========================================================================= #
|
@@ -123,23 +730,6 @@ module FtpParadiseModule
|
|
123
730
|
# === reset (reset tag)
|
124
731
|
# ========================================================================= #
|
125
732
|
def reset
|
126
|
-
reset_the_internal_variables
|
127
|
-
# ======================================================================= #
|
128
|
-
# === @configuration
|
129
|
-
# ======================================================================= #
|
130
|
-
@configuration = [true, __dir__, NAMESPACE]
|
131
|
-
# ======================================================================= #
|
132
|
-
# === @title
|
133
|
-
# ======================================================================= #
|
134
|
-
@title = TITLE
|
135
|
-
# ======================================================================= #
|
136
|
-
# === @width
|
137
|
-
# ======================================================================= #
|
138
|
-
@width = WIDTH
|
139
|
-
# ======================================================================= #
|
140
|
-
# === @height
|
141
|
-
# ======================================================================= #
|
142
|
-
@height = HEIGHT
|
143
733
|
# ======================================================================= #
|
144
734
|
# === @ftp_connection
|
145
735
|
# ======================================================================= #
|
@@ -168,9 +758,6 @@ module FtpParadiseModule
|
|
168
758
|
@hash_user_data['port'] = DEFAULT_REMOTE_PORT
|
169
759
|
end
|
170
760
|
initialize_the_connection_image
|
171
|
-
set_use_this_font(:dejavu_condensed_21)
|
172
|
-
use_gtk_paradise_project_css_file
|
173
|
-
infer_the_size_automatically
|
174
761
|
end
|
175
762
|
|
176
763
|
# ========================================================================= #
|
@@ -183,43 +770,12 @@ module FtpParadiseModule
|
|
183
770
|
@connection_image = gtk_image(
|
184
771
|
::FtpParadise.project_base_dir?+'images/connection_image.png'
|
185
772
|
)
|
186
|
-
@connection_image.
|
187
|
-
end
|
188
|
-
|
189
|
-
# ========================================================================= #
|
190
|
-
# === padding?
|
191
|
-
# ========================================================================= #
|
192
|
-
def padding?
|
193
|
-
2
|
194
|
-
end
|
195
|
-
|
196
|
-
# ========================================================================= #
|
197
|
-
# === border_size?
|
198
|
-
# ========================================================================= #
|
199
|
-
def border_size?
|
200
|
-
2
|
773
|
+
@connection_image.bblack1
|
201
774
|
end
|
202
775
|
|
203
|
-
# ========================================================================= #
|
204
|
-
# === create_button_delete_remote_file
|
205
|
-
# ========================================================================= #
|
206
|
-
def create_button_delete_remote_file
|
207
|
-
@button_delete_remote_file = gtk_button('Delete remote file')
|
208
|
-
@button_delete_remote_file.fancy_tooltips =
|
209
|
-
'Use this when you wish to remove a remote file.'
|
210
|
-
@button_delete_remote_file.on_clicked {
|
211
|
-
do_delete_remote_file
|
212
|
-
}
|
213
|
-
end
|
214
776
|
|
215
|
-
# ========================================================================= #
|
216
|
-
# === create_skeleton (create tag)
|
217
|
-
# ========================================================================= #
|
218
777
|
def create_skeleton
|
219
778
|
create_debug_button
|
220
|
-
create_button_delete_remote_file
|
221
|
-
create_status_icon
|
222
|
-
create_statusbar
|
223
779
|
@grid_user_data = gtk_grid
|
224
780
|
@grid_user_data.set_column_spacing(5)
|
225
781
|
@grid_user_data.set_row_spacing(5)
|
@@ -298,7 +854,7 @@ module FtpParadiseModule
|
|
298
854
|
vbox_is_the_user_connected = gtk_vbox
|
299
855
|
vbox_is_the_user_connected.set_border_width(10)
|
300
856
|
event_box_for_the_connection_image = gtk_event_box(@connection_image)
|
301
|
-
event_box_for_the_connection_image.
|
857
|
+
event_box_for_the_connection_image.hint =
|
302
858
|
'Click on this image to connect to the specified, remote host.'
|
303
859
|
event_box_for_the_connection_image.on_clicked {
|
304
860
|
do_connect_to_the_remote_host_specified
|
@@ -316,19 +872,19 @@ module FtpParadiseModule
|
|
316
872
|
# ======================================================================= #
|
317
873
|
frame_action_to_perform = gtk_frame
|
318
874
|
frame_action_to_perform.set_text(' Action to perform: ')
|
319
|
-
frame_action_to_perform.label_widget.
|
875
|
+
frame_action_to_perform.label_widget.hint =
|
320
876
|
'Denote via this widget which action is to be performed.'
|
321
877
|
vbox_action_to_perform = gtk_vbox
|
322
878
|
vbox_action_to_perform.set_border_width(10)
|
323
879
|
@button_upload = button('Upload')
|
324
|
-
@button_upload.
|
880
|
+
@button_upload.hint =
|
325
881
|
'<b>Upload</b> the selected local file to the remote host.'
|
326
882
|
@button_upload.on_clicked {
|
327
883
|
do_upload_the_selected_file
|
328
884
|
}
|
329
885
|
vbox_action_to_perform.add(@button_upload)
|
330
886
|
@button_download = button('Download')
|
331
|
-
@button_download.
|
887
|
+
@button_download.hint =
|
332
888
|
'<b>Download</b> the selected (<b>remote</b>) files/directories.'
|
333
889
|
@button_download.on_clicked {
|
334
890
|
do_download_the_remote_file_or_directory
|
@@ -402,12 +958,6 @@ module FtpParadiseModule
|
|
402
958
|
do_style_all_buttons_in_a_uniform_manner
|
403
959
|
end
|
404
960
|
|
405
|
-
# ========================================================================= #
|
406
|
-
# === user_password?
|
407
|
-
# ========================================================================= #
|
408
|
-
def user_password?
|
409
|
-
@entry_user_password.text?
|
410
|
-
end
|
411
961
|
|
412
962
|
# ========================================================================= #
|
413
963
|
# === remote_url?
|
@@ -429,13 +979,11 @@ module FtpParadiseModule
|
|
429
979
|
def self.run(
|
430
980
|
i = ARGV
|
431
981
|
)
|
432
|
-
require 'gtk_paradise/run'
|
433
982
|
_ = ::FtpParadise::GUI::Gtk::FtpParadise.new(i)
|
434
983
|
r = ::Gtk.run
|
435
984
|
r << _
|
436
985
|
r.set_size_request(_.width?, _.height?)
|
437
986
|
r.automatic_title
|
438
|
-
r.top_left_then_run
|
439
987
|
end
|
440
988
|
|
441
989
|
# ========================================================================= #
|
@@ -478,13 +1026,6 @@ module FtpParadiseModule
|
|
478
1026
|
end
|
479
1027
|
end
|
480
1028
|
|
481
|
-
# ========================================================================= #
|
482
|
-
# === is_on_roebe?
|
483
|
-
# ========================================================================= #
|
484
|
-
def is_on_roebe?
|
485
|
-
::FtpParadise.is_on_roebe?
|
486
|
-
end
|
487
|
-
|
488
1029
|
# ========================================================================= #
|
489
1030
|
# === do_connect_to_the_remote_host_specified
|
490
1031
|
#
|
@@ -536,7 +1077,6 @@ module FtpParadiseModule
|
|
536
1077
|
# === run (run tag)
|
537
1078
|
# ========================================================================= #
|
538
1079
|
def run
|
539
|
-
create_skeleton_then_connect_skeleton
|
540
1080
|
do_connect if is_on_roebe? # Connect at once on my home system.
|
541
1081
|
end
|
542
1082
|
|
@@ -553,70 +1093,18 @@ module FtpParadiseModule
|
|
553
1093
|
}
|
554
1094
|
end
|
555
1095
|
|
556
|
-
# ========================================================================= #
|
557
|
-
# === add_status_message
|
558
|
-
#
|
559
|
-
# Use this to append to the Statusbar.
|
560
|
-
# ========================================================================= #
|
561
|
-
def add_status_message(i)
|
562
|
-
@status_bar.push(@status_bar_context_id, i)
|
563
|
-
end
|
564
|
-
|
565
|
-
# ========================================================================= #
|
566
|
-
# === create_status_icon
|
567
|
-
# ========================================================================= #
|
568
|
-
def create_status_icon
|
569
|
-
@status_icon = gtk_status_icon
|
570
|
-
if File.exist? FTP_MAIN_ICON
|
571
|
-
@status_icon.pixbuf = GdkPixbuf::Pixbuf.new(file: FTP_MAIN_ICON)
|
572
|
-
end
|
573
|
-
@status_icon.fancy_tooltips = 'StatusIcon'
|
574
|
-
end
|
575
|
-
|
576
|
-
# ========================================================================= #
|
577
|
-
# === create_statusbar
|
578
|
-
#
|
579
|
-
# Create the Statusbar.
|
580
|
-
# ========================================================================= #
|
581
|
-
def create_statusbar
|
582
|
-
@status_bar = gtk_statusbar
|
583
|
-
if @status_bar.respond_to?(:has_resize_grip=)
|
584
|
-
@status_bar.has_resize_grip = true
|
585
|
-
end
|
586
|
-
@status_bar_context_id = @status_bar.get_context_id('Gtk Ftp Client')
|
587
|
-
end
|
588
|
-
|
589
1096
|
# ========================================================================= #
|
590
1097
|
# === create_debug_button (debug tag, debug button)
|
591
1098
|
# ========================================================================= #
|
592
1099
|
def create_debug_button
|
593
1100
|
@button_debug = gtk_button('_Debug') # The debug-button.
|
594
1101
|
@button_debug.on_clicked {
|
595
|
-
e 'Debugging FTP Client.'
|
1102
|
+
e 'Debugging the FTP Client next.'
|
596
1103
|
ecomment ('The password is: ').ljust(20)+password?
|
597
1104
|
ecomment 'The login name is: '+username?, token: ':'
|
598
1105
|
}
|
599
1106
|
end
|
600
1107
|
|
601
|
-
# ========================================================================= #
|
602
|
-
# === user_name?
|
603
|
-
# ========================================================================= #
|
604
|
-
def user_name?
|
605
|
-
@entry_username.text?
|
606
|
-
end; alias username? user_name? # === username?
|
607
|
-
|
608
|
-
# ========================================================================= #
|
609
|
-
# === do_delete_remote_file
|
610
|
-
#
|
611
|
-
# Wrapper to delete a remote file.
|
612
|
-
# ========================================================================= #
|
613
|
-
def do_delete_remote_file
|
614
|
-
ewarn 'Deleting this remote file:'
|
615
|
-
efancy selection?(:right)
|
616
|
-
@ftp_connection.remove_file( selection?(:right) )
|
617
|
-
update_everything
|
618
|
-
end
|
619
|
-
|
620
1108
|
# ========================================================================= #
|
621
1109
|
# === output_coloured_line
|
622
1110
|
#
|
@@ -636,7 +1124,7 @@ module FtpParadiseModule
|
|
636
1124
|
def return_default_user_name_based_on_selected_host(
|
637
1125
|
selected_host = host?
|
638
1126
|
)
|
639
|
-
selected_host = FtpParadise
|
1127
|
+
selected_host = FtpParadise.
|
640
1128
|
return_user_name_based_on_given_host(selected_host)
|
641
1129
|
return selected_host
|
642
1130
|
end
|
@@ -672,10 +1160,12 @@ module FtpParadiseModule
|
|
672
1160
|
@directory_content_widget1
|
673
1161
|
end
|
674
1162
|
|
1163
|
+
end
|
1164
|
+
|
675
1165
|
end; end; end
|
676
1166
|
|
677
1167
|
# =========================================================================== #
|
678
|
-
# === FtpParadise.
|
1168
|
+
# === FtpParadise.do_start_the_gui
|
679
1169
|
#
|
680
1170
|
# This will output what will be done, then start the GUI bindings.
|
681
1171
|
#
|
@@ -684,17 +1174,11 @@ end; end; end
|
|
684
1174
|
# ftpparadise --gui
|
685
1175
|
#
|
686
1176
|
# =========================================================================== #
|
687
|
-
def self.
|
1177
|
+
def self.do_start_the_gui
|
688
1178
|
opnn; puts 'We will next start the GUI.'
|
689
|
-
FtpParadise::GUI::Gtk::
|
690
|
-
end
|
691
|
-
|
692
|
-
# =========================================================================== #
|
693
|
-
# === FtpParadise.start_gtk
|
694
|
-
# =========================================================================== #
|
695
|
-
def self.start_gtk
|
696
|
-
FtpParadise::GUI::Gtk::FtpParadiseModule.run
|
697
|
-
end
|
1179
|
+
FtpParadise::GUI::Gtk::FtpClient.run(ARGV)
|
1180
|
+
end; self.instance_eval { alias do_start_gui do_start_the_gui } # === FtpParadise.do_start_gui
|
1181
|
+
self.instance_eval { alias start_gtk do_start_the_gui } # === FtpParadise.start_gtk
|
698
1182
|
|
699
1183
|
# =========================================================================== #
|
700
1184
|
# === FtpParadise.gtk_widget
|
@@ -703,7 +1187,11 @@ end
|
|
703
1187
|
# other applications.
|
704
1188
|
# =========================================================================== #
|
705
1189
|
def self.gtk_widget
|
706
|
-
FtpParadise::GUI::Gtk::
|
1190
|
+
FtpParadise::GUI::Gtk::FtpClient
|
1191
|
+
end
|
1192
|
+
|
707
1193
|
end
|
708
1194
|
|
1195
|
+
if __FILE__ == $PROGRAM_NAME
|
1196
|
+
FtpParadise::GUI::Gtk::FtpClient.run
|
709
1197
|
end
|