Sha256: fbb83c4b1fadbfefe0136cbe0dc5e089de73d3cf3cdf9b1589737c3fbfaa3fa7

Contents?: true

Size: 1.01 KB

Versions: 4

Compression:

Stored size: 1.01 KB

Contents

module DropboxApi
  class ChunkedUploader
    include DropboxApi::OptionsValidator

    def initialize(client, path, i_stream, options = {})
      @chunk_size = options.delete(:chunk_size) || 4 * 1024 * 1024 # 4 MiB

      @client = client
      @i_stream = i_stream

      init_commit_info(path, options)
    end

    def start
      chunk = @i_stream.read @chunk_size

      @cursor = @client.upload_session_start chunk
    end

    def upload
      loop do
        chunk = @i_stream.read @chunk_size
        break if chunk.nil?

        @client.upload_session_append_v2 @cursor, chunk
        break if chunk.size < @chunk_size
      end
    end

    def finish
      @client.upload_session_finish @cursor, @commit_info
    end

    private

    def init_commit_info(path, options)
      validate_options([
        :mode,
        :autorename,
        :client_modified,
        :mute
      ], options)

      options[:path] = path
      @commit_info = DropboxApi::Metadata::CommitInfo.build_from_options options
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dropbox_api-0.1.14 lib/dropbox_api/chunked_uploader.rb
dropbox_api-0.1.13 lib/dropbox_api/chunked_uploader.rb
dropbox_api-0.1.12 lib/dropbox_api/chunked_uploader.rb
dropbox_api-0.1.11 lib/dropbox_api/chunked_uploader.rb