@@ -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