Skip to content

Commit cd30cbb

Browse files
move package send
Signed-off-by: Laurent Martin <laurent.martin.l@gmail.com>
1 parent 123a670 commit cd30cbb

File tree

1 file changed

+53
-49
lines changed

1 file changed

+53
-49
lines changed

lib/aspera/cli/plugins/faspex5.rb

Lines changed: 53 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def normalize_recipients(parameters)
118118
recipient_types = [recipient_types] unless recipient_types.is_a?(Array)
119119
end
120120
parameters['recipients'].map! do |recipient_data|
121-
# if just a string, make a general lookup and build expected name/type hash
121+
# If just a string, make a general lookup and build expected name/type hash
122122
if recipient_data.is_a?(String)
123123
matched = @api_v5.lookup_by_name('contacts', recipient_data, query: Rest.php_style({context: 'packages', type: recipient_types}))
124124
recipient_data = {
@@ -174,8 +174,8 @@ def wait_for_job(job_id)
174174
# list all packages with optional filter
175175
def list_packages_with_filter(query: {})
176176
filter = options.get_next_argument('filter', mandatory: false, validation: Proc, default: ->(_x){true})
177-
# translate box name to API prefix (with ending slash)
178177
box = options.get_option(:box)
178+
# Translate box name to API prefix (with ending slash)
179179
entity =
180180
case box
181181
when SpecialValues::ALL then 'packages' # only admin can list all packages globally
@@ -272,6 +272,56 @@ def package_receive(package_ids)
272272
return Main.result_transfer_multiple(result_transfer)
273273
end
274274

275+
def package_send
276+
parameters = value_create_modify(command: :send)
277+
# autofill recipient for public url
278+
if @api_v5.pub_link_context&.key?('recipient_type') && !parameters.key?('recipients')
279+
parameters['recipients'] = [{
280+
name: @api_v5.pub_link_context['name'],
281+
recipient_type: @api_v5.pub_link_context['recipient_type']
282+
}]
283+
end
284+
normalize_recipients(parameters)
285+
# User specified content prot in tspec, but faspex requires in package creation
286+
# `transfer_spec/upload` will set `content_protection`
287+
if transfer.user_transfer_spec['content_protection'] && !parameters.key?('ear_enabled')
288+
transfer.user_transfer_spec.delete('content_protection')
289+
parameters['ear_enabled'] = true
290+
end
291+
package = @api_v5.create('packages', parameters)
292+
shared_folder = options.get_option(:shared_folder)
293+
if shared_folder.nil?
294+
# send from local files
295+
transfer_spec = @api_v5.create(
296+
"packages/#{package['id']}/transfer_spec/upload",
297+
{paths: transfer.source_list},
298+
query: {transfer_type: Api::Faspex::TRANSFER_CONNECT}
299+
)
300+
# well, we asked a TS for connect, but we actually want a generic one
301+
transfer_spec.delete('authentication')
302+
return Main.result_transfer(transfer.start(transfer_spec))
303+
else
304+
# send from remote shared folder
305+
if (m = Base.percent_selector(shared_folder))
306+
shared_folder = lookup_entity_by_field(
307+
api: @api_v5,
308+
entity: 'shared_folders',
309+
field: m[:field],
310+
value: m[:value]
311+
)['id']
312+
end
313+
transfer_request = {shared_folder_id: shared_folder, paths: transfer.source_list}
314+
# start remote transfer and get first status
315+
result = @api_v5.create("packages/#{package['id']}/remote_transfer", transfer_request)
316+
result['id'] = package['id']
317+
unless result['status'].eql?('completed')
318+
formatter.display_status("Package #{package['id']}")
319+
result = wait_package_status(package['id'])
320+
end
321+
return Main.result_single_object(result)
322+
end
323+
end
324+
275325
# Browse a folder
276326
# @param browse_endpoint [String] the endpoint to browse
277327
def browse_folder(browse_endpoint)
@@ -365,53 +415,7 @@ def package_action
365415
when :receive
366416
return package_receive(package_id)
367417
when :send
368-
parameters = value_create_modify(command: command)
369-
# autofill recipient for public url
370-
if @api_v5.pub_link_context&.key?('recipient_type') && !parameters.key?('recipients')
371-
parameters['recipients'] = [{
372-
name: @api_v5.pub_link_context['name'],
373-
recipient_type: @api_v5.pub_link_context['recipient_type']
374-
}]
375-
end
376-
normalize_recipients(parameters)
377-
# User specified content prot in tspec, but faspex requires in package creation
378-
# `transfer_spec/upload` will set `content_protection`
379-
if transfer.user_transfer_spec['content_protection'] && !parameters.key?('ear_enabled')
380-
transfer.user_transfer_spec.delete('content_protection')
381-
parameters['ear_enabled'] = true
382-
end
383-
package = @api_v5.create('packages', parameters)
384-
shared_folder = options.get_option(:shared_folder)
385-
if shared_folder.nil?
386-
# send from local files
387-
transfer_spec = @api_v5.create(
388-
"packages/#{package['id']}/transfer_spec/upload",
389-
{paths: transfer.source_list},
390-
query: {transfer_type: Api::Faspex::TRANSFER_CONNECT}
391-
)
392-
# well, we asked a TS for connect, but we actually want a generic one
393-
transfer_spec.delete('authentication')
394-
return Main.result_transfer(transfer.start(transfer_spec))
395-
else
396-
# send from remote shared folder
397-
if (m = Base.percent_selector(shared_folder))
398-
shared_folder = lookup_entity_by_field(
399-
api: @api_v5,
400-
entity: 'shared_folders',
401-
field: m[:field],
402-
value: m[:value]
403-
)['id']
404-
end
405-
transfer_request = {shared_folder_id: shared_folder, paths: transfer.source_list}
406-
# start remote transfer and get first status
407-
result = @api_v5.create("packages/#{package['id']}/remote_transfer", transfer_request)
408-
result['id'] = package['id']
409-
unless result['status'].eql?('completed')
410-
formatter.display_status("Package #{package['id']}")
411-
result = wait_package_status(package['id'])
412-
end
413-
return Main.result_single_object(result)
414-
end
418+
return package_send
415419
when :list
416420
list, total = list_packages_with_filter
417421
return Main.result_object_list(list, total: total, fields: %w[id title release_date total_bytes total_files created_time state])

0 commit comments

Comments
 (0)