2020-01-30 01:27:06 +01:00
|
|
|
|
|
|
|
def remove_chunk_from_db(transfer_info : TransferInfo, chunk_number : Int32)
|
|
|
|
transfer_info.chunks.delete chunk_number
|
|
|
|
Context.db_by_filedigest.update transfer_info.file_info.digest, transfer_info
|
|
|
|
end
|
|
|
|
|
2020-01-30 17:47:56 +01:00
|
|
|
def write_a_chunk(userid : String, file_info : FileStorage::FileInfo, chunk_number : Int32, data : Bytes)
|
2020-01-30 01:27:06 +01:00
|
|
|
|
|
|
|
# storage: Context.storage_directory/userid/fileuuid.bin
|
|
|
|
dir = "#{Context.storage_directory}/#{userid}"
|
|
|
|
|
|
|
|
FileUtils.mkdir_p dir
|
|
|
|
|
|
|
|
path = "#{dir}/#{file_info.digest}.bin"
|
|
|
|
# Create file if non existant
|
|
|
|
File.open(path, "a+") do |file|
|
|
|
|
end
|
|
|
|
|
|
|
|
# Write in it
|
|
|
|
File.open(path, "ab") do |file|
|
|
|
|
offset = chunk_number * FileStorage.message_buffer_size
|
|
|
|
file.seek(offset, IO::Seek::Set)
|
|
|
|
file.write data
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
### # TODO:
|
|
|
|
### # why getting the file_info here? We could check for the transfer_info right away
|
|
|
|
### # it has more info, and we'll get it later eventually
|
|
|
|
###
|
|
|
|
### file_info = nil
|
|
|
|
### begin
|
|
|
|
### file_info = user.uploads.select do |v|
|
|
|
|
### v.file.digest == message.filedigest
|
|
|
|
### end.first.file
|
|
|
|
###
|
|
|
|
### pp! file_info
|
|
|
|
### rescue e : IndexError
|
|
|
|
### puts "No recorded upload request for file #{message.filedigest}"
|
|
|
|
###
|
|
|
|
### rescue e
|
|
|
|
### puts "Unexpected error: #{e}"
|
|
|
|
### end
|