ftp_paradise 1.4.5 → 1.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +155 -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} +11 -1
- 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 +564 -449
- 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
@@ -1,51 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# Encoding: UTF-8
|
3
|
-
# frozen_string_literal: true
|
4
|
-
# =========================================================================== #
|
5
|
-
# require 'ftp_paradise/interactive_ftp/main_loop.rb'
|
6
|
-
# =========================================================================== #
|
7
|
-
module FtpParadise
|
8
|
-
|
9
|
-
class InteractiveFtp # === FtpParadise::InteractiveFtp
|
10
|
-
|
11
|
-
# ========================================================================= #
|
12
|
-
# === enter_main_loop
|
13
|
-
# ========================================================================= #
|
14
|
-
def enter_main_loop
|
15
|
-
# ======================================================================= #
|
16
|
-
# Enter the remote directory htdocs if we are on ftpupload.net
|
17
|
-
# or on a similar host..
|
18
|
-
# ======================================================================= #
|
19
|
-
if remote_url?.include?('ftpupload.net')
|
20
|
-
remote_cd 'htdocs', :be_verbose
|
21
|
-
elsif remote_url?.include?('shevy.bplaced.net')
|
22
|
-
remote_cd 'www', :be_verbose
|
23
|
-
end
|
24
|
-
check_commandline_arguments # <- This will also query the menu() method.
|
25
|
-
show_welcome_message
|
26
|
-
display_prompt
|
27
|
-
loop {
|
28
|
-
begin
|
29
|
-
# =================================================================== #
|
30
|
-
# Obtain the user input:
|
31
|
-
# =================================================================== #
|
32
|
-
obtain_user_input
|
33
|
-
# =================================================================== #
|
34
|
-
# Pass the user input into the menu interface:
|
35
|
-
# =================================================================== #
|
36
|
-
result = menu
|
37
|
-
result = result.first if result.is_a? Array
|
38
|
-
case result
|
39
|
-
when *ARRAY_VALID_OPTIONS_FOR_EXITING_THE_SHELL, :break
|
40
|
-
break
|
41
|
-
when :exit
|
42
|
-
exit
|
43
|
-
end
|
44
|
-
rescue Interrupt
|
45
|
-
e 'In order to quit, please use "'+
|
46
|
-
steelblue('q')+'" instead.'
|
47
|
-
end
|
48
|
-
}
|
49
|
-
end; alias enter_loop enter_main_loop # === enter_loop
|
50
|
-
|
51
|
-
end; end
|
@@ -1,208 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# Encoding: UTF-8
|
3
|
-
# frozen_string_literal: true
|
4
|
-
# =========================================================================== #
|
5
|
-
# require 'ftp_paradise/interactive_ftp/misc.rb'
|
6
|
-
# =========================================================================== #
|
7
|
-
module FtpParadise
|
8
|
-
|
9
|
-
class InteractiveFtp
|
10
|
-
|
11
|
-
require 'ftp_paradise/interactive_ftp/directory_handling.rb'
|
12
|
-
|
13
|
-
require 'ftp_paradise/toplevel_methods/determine_user_dataset_from_this_hash.rb'
|
14
|
-
|
15
|
-
# ========================================================================= #
|
16
|
-
# === set_editor
|
17
|
-
# ========================================================================= #
|
18
|
-
def set_editor(
|
19
|
-
i, be_verbose = true
|
20
|
-
)
|
21
|
-
i = i.first if i.is_a? Array
|
22
|
-
if be_verbose
|
23
|
-
opnn; e "Now using the editor called `#{sfancy(i)}`."
|
24
|
-
end
|
25
|
-
@use_this_editor = i
|
26
|
-
end
|
27
|
-
|
28
|
-
# ========================================================================= #
|
29
|
-
# === report_which_editor_is_in_use
|
30
|
-
# ========================================================================= #
|
31
|
-
def report_which_editor_is_in_use
|
32
|
-
opnn; e "The editor in use is `#{sfancy(@use_this_editor)}`."
|
33
|
-
end
|
34
|
-
|
35
|
-
# ========================================================================= #
|
36
|
-
# === open_this_file_in_editor (edit tag, editor tag, open tag)
|
37
|
-
#
|
38
|
-
# If you pass as first argument to this method the string 'ALL', we
|
39
|
-
# will try to open the (local) project files in your editor.
|
40
|
-
#
|
41
|
-
# To test this, do:
|
42
|
-
#
|
43
|
-
# open ALL
|
44
|
-
# open YAML
|
45
|
-
#
|
46
|
-
# ========================================================================= #
|
47
|
-
def open_this_file_in_editor(
|
48
|
-
this_file = @file
|
49
|
-
)
|
50
|
-
this_file = ARRAY_PROJECT_FILES if this_file.nil?
|
51
|
-
if this_file.is_a? Array
|
52
|
-
this_file.each {|entry| open_this_file_in_editor(entry) }
|
53
|
-
else
|
54
|
-
this_file = this_file.to_s
|
55
|
-
if this_file == 'TODO'
|
56
|
-
this_file = ARRAY_PROJECT_FILES.select {|entry| entry.include? 'TODO' }[0]
|
57
|
-
end
|
58
|
-
if this_file.to_s =~ /^\d+$/ # If only numbers were given.
|
59
|
-
this_file = Dir['*'].sort[this_file.to_i - 1]
|
60
|
-
end
|
61
|
-
this_file = NAME_OF_THIS_FILE if this_file.empty?
|
62
|
-
if this_file == 'ALL' and ! File.exist?('ALL')
|
63
|
-
open_this_file_in_editor(ARRAY_PROJECT_FILES)
|
64
|
-
elsif this_file == 'YAML' and ! File.exist?('YAML')
|
65
|
-
open_this_file_in_editor(YAML_FILE)
|
66
|
-
else
|
67
|
-
_ = @use_this_editor+" #{this_file}"
|
68
|
-
if File.exist?(this_file) && File.file?(this_file)
|
69
|
-
unless has_unwanted_file_suffix?(this_file)
|
70
|
-
e 'Loading '+sfile(this_file)+' in editor '+
|
71
|
-
'now as '+simp('USE_THIS_EDITOR')+' was set '+
|
72
|
-
'to true:'
|
73
|
-
e ' '+_+' &'
|
74
|
-
`#{_}`
|
75
|
-
end
|
76
|
-
set_file(this_file) # Since 24.12.2011 we also assign it.
|
77
|
-
else
|
78
|
-
e swarn('But the file `')+sfile(this_file)+
|
79
|
-
swarn('` does not exist.')
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end; alias open_in_editor open_this_file_in_editor # === open_in_editor
|
84
|
-
|
85
|
-
# ========================================================================= #
|
86
|
-
# === determine_user_dataset_from_this_hash
|
87
|
-
#
|
88
|
-
# This method can set relevant entries from an input Hash.
|
89
|
-
# ========================================================================= #
|
90
|
-
def determine_user_dataset_from_this_hash(
|
91
|
-
i,
|
92
|
-
optional_use_this_entry = :default
|
93
|
-
)
|
94
|
-
if optional_use_this_entry
|
95
|
-
case optional_use_this_entry
|
96
|
-
# ===================================================================== #
|
97
|
-
# === :default
|
98
|
-
# ===================================================================== #
|
99
|
-
when :default
|
100
|
-
optional_use_this_entry = :bplaced
|
101
|
-
end
|
102
|
-
end
|
103
|
-
FtpParadise.determine_user_dataset_from_this_hash(i)
|
104
|
-
end
|
105
|
-
|
106
|
-
# ========================================================================= #
|
107
|
-
# === set_password
|
108
|
-
# ========================================================================= #
|
109
|
-
def set_password(
|
110
|
-
i, be_verbose = be_verbose?
|
111
|
-
)
|
112
|
-
i = i.to_s
|
113
|
-
if be_verbose
|
114
|
-
e "Setting password to #{sfancy(i)} now."
|
115
|
-
end
|
116
|
-
FtpParadise.set_password(i)
|
117
|
-
end
|
118
|
-
|
119
|
-
# ========================================================================= #
|
120
|
-
# === pass_commandline_arguments_into_the_menu
|
121
|
-
# ========================================================================= #
|
122
|
-
def pass_commandline_arguments_into_the_menu
|
123
|
-
menu(@commandline_arguments)
|
124
|
-
end
|
125
|
-
|
126
|
-
# ========================================================================= #
|
127
|
-
# === set_port
|
128
|
-
#
|
129
|
-
# Use this method to set the port.
|
130
|
-
# ========================================================================= #
|
131
|
-
def set_port(
|
132
|
-
i = 21, be_verbose = false
|
133
|
-
)
|
134
|
-
if be_verbose
|
135
|
-
e "Setting port to #{sfancy(i)} now."
|
136
|
-
end
|
137
|
-
ftp?.set_port(i)
|
138
|
-
end
|
139
|
-
|
140
|
-
# ========================================================================= #
|
141
|
-
# === remote_url?
|
142
|
-
# ========================================================================= #
|
143
|
-
def remote_url?
|
144
|
-
FtpParadise.remote_url?
|
145
|
-
end; alias remote_host? remote_url? # === remote_host?
|
146
|
-
|
147
|
-
# ========================================================================= #
|
148
|
-
# === remote_remove_file
|
149
|
-
# ========================================================================= #
|
150
|
-
def remote_remove_file(
|
151
|
-
i = @first_argument
|
152
|
-
)
|
153
|
-
if i.is_a? Array
|
154
|
-
i.each {|entry| remote_remove_file(entry) }
|
155
|
-
else
|
156
|
-
e "Trying to remove `#{sfile(i)}` next:"
|
157
|
-
@ftp.delete(i)
|
158
|
-
end
|
159
|
-
end; alias remote_remove_files remote_remove_file # === remote_remove_files
|
160
|
-
|
161
|
-
# ========================================================================= #
|
162
|
-
# === display_file
|
163
|
-
#
|
164
|
-
# Use this method to display a file in question.
|
165
|
-
# ========================================================================= #
|
166
|
-
def display_file(i)
|
167
|
-
if File.exist? i
|
168
|
-
_ = File.readlines(i).join
|
169
|
-
e _
|
170
|
-
else
|
171
|
-
ewarn "File #{sfile(i)} does not exist."
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
# ========================================================================= #
|
176
|
-
# === report_version
|
177
|
-
# ========================================================================= #
|
178
|
-
def report_version
|
179
|
-
e sfancy(FtpParadise::VERSION)
|
180
|
-
end
|
181
|
-
|
182
|
-
# ========================================================================= #
|
183
|
-
# === all_arguments?
|
184
|
-
#
|
185
|
-
# The alias a? may be an easier wrapper over @all_arguments.
|
186
|
-
# ========================================================================= #
|
187
|
-
def all_arguments?
|
188
|
-
@all_arguments
|
189
|
-
end; alias a? all_arguments? # === a?
|
190
|
-
|
191
|
-
# ========================================================================= #
|
192
|
-
# === try_to_chmod_this_remote_file
|
193
|
-
# ========================================================================= #
|
194
|
-
def try_to_chmod_this_remote_file(
|
195
|
-
filename, chmod_value_to_use = '0777'
|
196
|
-
)
|
197
|
-
e "Trying to chmod the remote file #{filename} next."
|
198
|
-
ftp?.sendcmd("SITE CHMOD #{chmod_value_to_use} #{filename}")
|
199
|
-
end
|
200
|
-
|
201
|
-
# ========================================================================= #
|
202
|
-
# === password?
|
203
|
-
# ========================================================================= #
|
204
|
-
def password?
|
205
|
-
FtpParadise.password?
|
206
|
-
end
|
207
|
-
|
208
|
-
end; end
|
@@ -1,124 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# Encoding: UTF-8
|
3
|
-
# frozen_string_literal: true
|
4
|
-
# =========================================================================== #
|
5
|
-
# require 'ftp_paradise/interactive_ftp/mode.rb'
|
6
|
-
# =========================================================================== #
|
7
|
-
module FtpParadise
|
8
|
-
|
9
|
-
class InteractiveFtp # === FtpParadise::InteractiveFtp
|
10
|
-
|
11
|
-
# ========================================================================= #
|
12
|
-
# === use_binary_mode
|
13
|
-
#
|
14
|
-
# This enables use the binary mode.
|
15
|
-
# ========================================================================= #
|
16
|
-
def use_binary_mode(
|
17
|
-
be_verbose = false
|
18
|
-
)
|
19
|
-
case be_verbose
|
20
|
-
when :be_quiet
|
21
|
-
be_verbose = false
|
22
|
-
when :be_verbose
|
23
|
-
be_verbose = true
|
24
|
-
end
|
25
|
-
e 'Using binary mode now.' if be_verbose
|
26
|
-
set_mode :binary
|
27
|
-
end; alias set_binary use_binary_mode # === set_binary
|
28
|
-
|
29
|
-
# ========================================================================= #
|
30
|
-
# === set_mode
|
31
|
-
#
|
32
|
-
# Set the mode here. We default to :ascii mode.
|
33
|
-
#
|
34
|
-
# There are only two valid modes:
|
35
|
-
#
|
36
|
-
# :ascii
|
37
|
-
# :binary
|
38
|
-
#
|
39
|
-
# ========================================================================= #
|
40
|
-
def set_mode(
|
41
|
-
i = :ascii
|
42
|
-
)
|
43
|
-
@mode = i
|
44
|
-
ftp?.set_transfer_mode(
|
45
|
-
@mode, :be_quiet # Cascade the variable down into ftp_lib.rb.
|
46
|
-
)
|
47
|
-
end
|
48
|
-
|
49
|
-
# ========================================================================= #
|
50
|
-
# === do_use_binary_mode
|
51
|
-
# ========================================================================= #
|
52
|
-
def do_use_binary_mode
|
53
|
-
use_binary_mode(:be_quiet)
|
54
|
-
end
|
55
|
-
|
56
|
-
# ========================================================================= #
|
57
|
-
# === change
|
58
|
-
#
|
59
|
-
# This method can be used to change the main transfer mode.
|
60
|
-
# ========================================================================= #
|
61
|
-
def change(i)
|
62
|
-
case i
|
63
|
-
# ======================================================================= #
|
64
|
-
# === mode
|
65
|
-
# ======================================================================= #
|
66
|
-
when 'mode' # Change the mode that we use.
|
67
|
-
use_binary_mode
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# ========================================================================= #
|
72
|
-
# === set_run_mode
|
73
|
-
#
|
74
|
-
# This will set the run-mode. The run-mode can be either :standalone or
|
75
|
-
# :connected.
|
76
|
-
# ========================================================================= #
|
77
|
-
def set_run_mode(
|
78
|
-
i = :standalone
|
79
|
-
)
|
80
|
-
@run_mode = i
|
81
|
-
end
|
82
|
-
|
83
|
-
# ========================================================================= #
|
84
|
-
# === toggle_modes
|
85
|
-
# ========================================================================= #
|
86
|
-
def toggle_modes
|
87
|
-
if @mode == :ascii
|
88
|
-
set_mode :binary
|
89
|
-
else
|
90
|
-
set_mode :ascii
|
91
|
-
end
|
92
|
-
e mode?.to_s
|
93
|
-
end
|
94
|
-
|
95
|
-
# ========================================================================= #
|
96
|
-
# === use_ascii_mode
|
97
|
-
# ========================================================================= #
|
98
|
-
def use_ascii_mode(be_verbose = false)
|
99
|
-
e 'Using ascii mode now.' if be_verbose
|
100
|
-
set_mode :ascii
|
101
|
-
end
|
102
|
-
|
103
|
-
# ========================================================================= #
|
104
|
-
# === mode?
|
105
|
-
#
|
106
|
-
# @mode is a Symbol, hence we will not apply .to_s on it.
|
107
|
-
# ========================================================================= #
|
108
|
-
def mode?
|
109
|
-
return @mode
|
110
|
-
end
|
111
|
-
|
112
|
-
# ========================================================================= #
|
113
|
-
# === set_passive
|
114
|
-
# ========================================================================= #
|
115
|
-
def set_passive(
|
116
|
-
be_verbose = false
|
117
|
-
)
|
118
|
-
if be_verbose
|
119
|
-
e 'Enabling passive mode for FTP.'
|
120
|
-
end
|
121
|
-
ftp?.passive = true
|
122
|
-
end
|
123
|
-
|
124
|
-
end; end
|
@@ -1,113 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# Encoding: UTF-8
|
3
|
-
# frozen_string_literal: true
|
4
|
-
# =========================================================================== #
|
5
|
-
# The Readline component will belong to class FtpParadise::InteractiveFtp.
|
6
|
-
#
|
7
|
-
# It would not make any sense to use it elsewhere within the FtpParadise
|
8
|
-
# project, as we don't have other interactive elements elsewhere.
|
9
|
-
# =========================================================================== #
|
10
|
-
# require 'ftp_paradise/interactive_ftp/readline.rb'
|
11
|
-
# =========================================================================== #
|
12
|
-
module FtpParadise
|
13
|
-
|
14
|
-
class InteractiveFtp # === FtpParadise::Interactive
|
15
|
-
|
16
|
-
begin
|
17
|
-
require 'readline'
|
18
|
-
rescue LoadError; end # Silent rescue.
|
19
|
-
|
20
|
-
# ========================================================================= #
|
21
|
-
# === use_readline?
|
22
|
-
# ========================================================================= #
|
23
|
-
def use_readline?
|
24
|
-
@use_readline
|
25
|
-
end; alias do_we_use_readline? use_readline? # === do_we_use_readline?
|
26
|
-
|
27
|
-
# ========================================================================= #
|
28
|
-
# === do_not_use_readline
|
29
|
-
# ========================================================================= #
|
30
|
-
def do_not_use_readline
|
31
|
-
@use_readline = false
|
32
|
-
end
|
33
|
-
|
34
|
-
# ========================================================================= #
|
35
|
-
# === enable_readline
|
36
|
-
# ========================================================================= #
|
37
|
-
def enable_readline
|
38
|
-
@use_readline = true
|
39
|
-
try_to_use_readline
|
40
|
-
end
|
41
|
-
|
42
|
-
# ========================================================================= #
|
43
|
-
# === try_to_use_readline
|
44
|
-
#
|
45
|
-
# This method ought to be called before we invoke the method menu().
|
46
|
-
# ========================================================================= #
|
47
|
-
def try_to_use_readline
|
48
|
-
if @use_readline
|
49
|
-
begin
|
50
|
-
require 'readline' # Using readline since August 2011.
|
51
|
-
setup_readline_completion
|
52
|
-
rescue LoadError
|
53
|
-
# =================================================================== #
|
54
|
-
# In this case the user can not use the readline-module.
|
55
|
-
# =================================================================== #
|
56
|
-
do_not_use_readline
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end; alias consider_using_the_readline_module try_to_use_readline # === consider_using_the_readline_module
|
60
|
-
|
61
|
-
# ========================================================================= #
|
62
|
-
# === setup_readline_completion
|
63
|
-
#
|
64
|
-
# Call this method to invoke completion support.
|
65
|
-
# ========================================================================= #
|
66
|
-
def setup_readline_completion
|
67
|
-
Readline.completion_case_fold = true # Ignore case on tab-completion.
|
68
|
-
Readline.completer_word_break_characters = "\n"
|
69
|
-
Readline.completion_append_character = ' '
|
70
|
-
# ======================================================================= #
|
71
|
-
# Act on Readline's completion functionality here. (readline tag)
|
72
|
-
#
|
73
|
-
# We will respond to these events specifically:
|
74
|
-
#
|
75
|
-
# - rcd
|
76
|
-
# - cd
|
77
|
-
# - upload
|
78
|
-
# - download
|
79
|
-
#
|
80
|
-
# ======================================================================= #
|
81
|
-
Readline.completion_proc = proc {|input|
|
82
|
-
_ = []
|
83
|
-
case input # case tag
|
84
|
-
# ===================================================================== #
|
85
|
-
# To test it, do:
|
86
|
-
# rcd AUS<TAB>
|
87
|
-
# ===================================================================== #
|
88
|
-
when /^rcd/,
|
89
|
-
/^rcd /,
|
90
|
-
/^rc/,
|
91
|
-
'rchange_dir',
|
92
|
-
'lcd',
|
93
|
-
'remote_change_directory'
|
94
|
-
result = @_.return_directories # This will return the remote directories only.
|
95
|
-
_ << result.map {|entry| input+' '+entry}
|
96
|
-
# ===================================================================== #
|
97
|
-
# === cd
|
98
|
-
# ===================================================================== #
|
99
|
-
when /^cd/,/^cd / # Fetch only directories.
|
100
|
-
_ << @_.return_local_directories
|
101
|
-
when /^upload/ # Act on upload.
|
102
|
-
return_local_files.each { |array| _ << array }
|
103
|
-
when /^download/ # Act on download.
|
104
|
-
@_.array_file_listing.each { |array| _ << array.first }
|
105
|
-
else # Default.
|
106
|
-
# _ << return_local_files # Disabled in June 2014 because it gives completions to things I did not ask for.
|
107
|
-
end
|
108
|
-
_ = _.flatten
|
109
|
-
_ # Return it here finally.
|
110
|
-
}
|
111
|
-
end
|
112
|
-
|
113
|
-
end; end
|
@@ -1,97 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# Encoding: UTF-8
|
3
|
-
# frozen_string_literal: true
|
4
|
-
# =========================================================================== #
|
5
|
-
# require 'ftp_paradise/interactive_ftp/remove.rb'
|
6
|
-
# =========================================================================== #
|
7
|
-
module FtpParadise
|
8
|
-
|
9
|
-
class InteractiveFtp
|
10
|
-
|
11
|
-
# ========================================================================= #
|
12
|
-
# === remove_local
|
13
|
-
# ========================================================================= #
|
14
|
-
def remove_local(i)
|
15
|
-
delete(i)
|
16
|
-
end
|
17
|
-
|
18
|
-
# ========================================================================= #
|
19
|
-
# === remove_remote_directory
|
20
|
-
#
|
21
|
-
# Use this method to remove a remote directory.
|
22
|
-
# ========================================================================= #
|
23
|
-
def remove_remote_directory(i)
|
24
|
-
e "Removing remote directory `#{sdir(i)}` next."
|
25
|
-
# ======================================================================= #
|
26
|
-
# Delegate to ftp?. :force_remove so we remove even non-empty directories.
|
27
|
-
# ======================================================================= #
|
28
|
-
ftp?.remove_directory(i, :force_remove)
|
29
|
-
end
|
30
|
-
|
31
|
-
# ========================================================================= #
|
32
|
-
# === remote_remove
|
33
|
-
#
|
34
|
-
# Use this if you wish to remove a remote file or a remote directory.
|
35
|
-
# ========================================================================= #
|
36
|
-
def remote_remove(i)
|
37
|
-
if i.is_a? Array
|
38
|
-
i.each {|entry| remote_remove(entry) }
|
39
|
-
else
|
40
|
-
i = i.to_s.strip # Added as of July 2014.
|
41
|
-
i = File.basename(i) if i.include? '/'
|
42
|
-
# ===================================================================== #
|
43
|
-
# The user may input numbers. If the input is a number, we will try to
|
44
|
-
# find the corresponding entry - but only if no remote directory or
|
45
|
-
# remote file exists with that name. Some directories may be named,
|
46
|
-
# e. g. "123456".
|
47
|
-
# ===================================================================== #
|
48
|
-
unless this_remote_entry_exists? i
|
49
|
-
i = convert_number_to_file(i) if i =~ /^\d+$/
|
50
|
-
end
|
51
|
-
# ===================================================================== #
|
52
|
-
# Next check for user input. If the user did input a '*', then we
|
53
|
-
# will expand that.
|
54
|
-
# ===================================================================== #
|
55
|
-
if i.include?('*') or i.include?('*.')
|
56
|
-
i = ftp?.array_file_listing.select {|entry|
|
57
|
-
entry[0].include? i.delete('*')
|
58
|
-
}
|
59
|
-
i.reject! {|line|
|
60
|
-
line == '.' or line == '..' # Reject '.' and '..' entries.
|
61
|
-
}
|
62
|
-
i.map! {|entry|
|
63
|
-
File.basename(entry)
|
64
|
-
} # ^^^ This is a bit hackish.
|
65
|
-
remote_remove(i)
|
66
|
-
else
|
67
|
-
# =================================================================== #
|
68
|
-
# We try to find out whether we have a directory or a file next.
|
69
|
-
# =================================================================== #
|
70
|
-
if is_dir?(i)
|
71
|
-
remove_remote_directory(i)
|
72
|
-
else # Assume it is a file.
|
73
|
-
remove_remote_file(i)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# ========================================================================= #
|
80
|
-
# === remove_remote_file
|
81
|
-
#
|
82
|
-
# Use this method to attempt remove a remote file.
|
83
|
-
# ========================================================================= #
|
84
|
-
def remove_remote_file(i)
|
85
|
-
i[0,1] = ''.dup if i.start_with? '/' # We don't like starting "/" characters here.
|
86
|
-
e "Removing remote file `#{sfile(i)}` next." # We remove the remote file here.
|
87
|
-
begin
|
88
|
-
result = ftp?.remove_file(i)
|
89
|
-
e "Successfully removed remote file `#{sfile(result)}`."
|
90
|
-
rescue Net::FTPPermError => error
|
91
|
-
e 'Can not remove file `'+sfile(i)+'` as you are not '\
|
92
|
-
'the owner. ('+simp('Net::FTPPermError')+')'
|
93
|
-
pp error
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
end; end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# Encoding: UTF-8
|
3
|
-
# frozen_string_literal: true
|
4
|
-
# =========================================================================== #
|
5
|
-
# require 'ftp_paradise/interactive_ftp/reset.rb'
|
6
|
-
# =========================================================================== #
|
7
|
-
module FtpParadise
|
8
|
-
|
9
|
-
class InteractiveFtp # === FtpParadise::InteractiveFtp
|
10
|
-
|
11
|
-
require 'ftp_paradise/interactive_ftp/misc.rb'
|
12
|
-
require 'ftp_paradise/interactive_ftp/readline.rb'
|
13
|
-
|
14
|
-
# ========================================================================= #
|
15
|
-
# === reset (reset tag)
|
16
|
-
#
|
17
|
-
# Initialize and/or reset the variables used in this class.
|
18
|
-
# ========================================================================= #
|
19
|
-
def reset
|
20
|
-
super()
|
21
|
-
# ======================================================================= #
|
22
|
-
# The following check is for my home system.
|
23
|
-
# ======================================================================= #
|
24
|
-
if File.exist? FILE_ROEBE_FTP
|
25
|
-
dataset = YAML.load_file(FILE_ROEBE_FTP)
|
26
|
-
determine_user_dataset_from_this_hash(dataset, :default)
|
27
|
-
end
|
28
|
-
# ======================================================================= #
|
29
|
-
# === @user_input
|
30
|
-
#
|
31
|
-
# Must "initialize" @user_input.
|
32
|
-
# ======================================================================= #
|
33
|
-
@user_input = nil
|
34
|
-
# ======================================================================= #
|
35
|
-
# Which files we did download so far.
|
36
|
-
# ======================================================================= #
|
37
|
-
@array_downloaded_files = []
|
38
|
-
# ======================================================================= #
|
39
|
-
# === @array_all_input
|
40
|
-
# ======================================================================= #
|
41
|
-
@array_all_input = [] # Stores which was the input.
|
42
|
-
# ======================================================================= #
|
43
|
-
# === @history
|
44
|
-
# ======================================================================= #
|
45
|
-
@history = []
|
46
|
-
# ======================================================================= #
|
47
|
-
# === @array_history_remote_directories
|
48
|
-
#
|
49
|
-
# This array keeps a listing of all remote directories we rcd-ed into.
|
50
|
-
# ======================================================================= #
|
51
|
-
@array_history_remote_directories = []
|
52
|
-
# ======================================================================= #
|
53
|
-
# === @debug
|
54
|
-
#
|
55
|
-
# Whether we will debug or not, by default.
|
56
|
-
# ======================================================================= #
|
57
|
-
@debug = SHALL_WE_DEBUG
|
58
|
-
# ======================================================================= #
|
59
|
-
# === @are_we_connected
|
60
|
-
# ======================================================================= #
|
61
|
-
@are_we_connected = false
|
62
|
-
# ======================================================================= #
|
63
|
-
# === @pad
|
64
|
-
# ======================================================================= #
|
65
|
-
@pad = ' ' # The default padding to use.
|
66
|
-
# ======================================================================= #
|
67
|
-
# === @use_readline
|
68
|
-
#
|
69
|
-
# Initially we will try to make use of the Readline module.
|
70
|
-
# ======================================================================= #
|
71
|
-
@use_readline = true
|
72
|
-
# ======================================================================= #
|
73
|
-
# === @use_this_editor
|
74
|
-
#
|
75
|
-
# Specify which editor we may use - this can be overruled in the
|
76
|
-
# interactive menu by the user of the FtpParadise project.
|
77
|
-
# ======================================================================= #
|
78
|
-
@use_this_editor = USE_THIS_EDITOR
|
79
|
-
# ======================================================================= #
|
80
|
-
# Try to make use of the Readline module as well.
|
81
|
-
# ======================================================================= #
|
82
|
-
consider_using_the_readline_module
|
83
|
-
reset_instance_variables_that_hold_all_arguments
|
84
|
-
set_file
|
85
|
-
set_local_directory
|
86
|
-
load_config
|
87
|
-
initialize_ftp_object # Initialize the @ftp variable.
|
88
|
-
end
|
89
|
-
|
90
|
-
end; end
|