class

ZipTricks::Streamer

Inherits Reference < Object

Constants

DEFLATED = 8
STORED = 0

Constructors

new(io : IO)
Source

Class methods

archive(io : IO, &)
Source

Instance methods

add_deflated(filename : String, modification_time : Time = Time.utc, unix_permissions : Int | Nil = nil, &)
Source
add_deflated_entry(filename : String, modification_time : Time = Time.utc, compressed_size : Int = 0, uncompressed_size : Int = 0, crc32 : Int = 0, unix_permissions : Int | Nil = nil, use_data_descriptor : Bool = false)

Writes out the local header for an entry (file in the ZIP) that is using the deflated storage model (is compressed). Once this method is called, you need to write the actual compressed contents and then call simulate_write with the number of bytes written.

Note that the deflated body that is going to be written into the output has to be precompressed (pre-deflated) before writing it into the Streamer, because otherwise it is impossible to know it's size upfront.

@param filename the name of the file in the entry @param modification_time the modification time of the file in the archive @param compressed_size the size of the compressed entry @param uncompressed_size the size of the entry when uncompressed, in bytes @param crc32 the CRC32 checksum of the entry when uncompressed @param unix_permissions which UNIX permissions to set, or nil for the default @param use_data_descriptor whether the entry body will be followed by a data descriptor @return the offset the output IO is at after writing the entry header

Source
add_empty_directory(dirname : String, modification_time : Time = Time.utc, unix_permissions : Int | Nil = nil)

Adds an empty directory to the archive with a size of 0 and permissions of 755.

@param dirname the name of the directory in the archive @param modification_time the modification time of the directory in the archive @param unix_permissions which UNIX permissions to set, or nil for the default (0o755) @return the offset the output IO is at after writing the entry header

Source
add_stored(filename : String, modification_time : Time = Time.utc, unix_permissions : Int | Nil = nil, &)
Source
add_stored_entry(filename : String, modification_time : Time = Time.utc, size : Int = 0, crc32 : Int = 0, unix_permissions : Int | Nil = nil, use_data_descriptor : Bool = false)

Writes out the local header for an entry (file in the ZIP) that is using the stored storage model (is stored as-is). Once this method is called, you need to write the actual contents of the body and then call simulate_write with the number of bytes written.

@param filename the name of the file in the entry @param modification_time the modification time of the file in the archive @param size the size of the file when uncompressed, in bytes @param crc32 the CRC32 checksum of the entry when uncompressed @param unix_permissions which UNIX permissions to set, or nil for the default @param use_data_descriptor whether the entry body will be followed by a data descriptor @return the offset the output IO is at after writing the entry header

Source
advance(by)

Legacy method - use simulate_write instead for clarity

Source
bytesize
Source
finish
Source
simulate_write(num_bytes : Int)

Advances the internal IO pointer to keep the offsets of the ZIP file in check. Use this if you are going to use accelerated writes to the socket (like the sendfile() call) after writing the headers, or if you just need to figure out the size of the archive.

Returns the current position in the output stream / ZIP archive.

Source
update_last_entry_and_write_data_descriptor(crc32 : Int, compressed_size : Int, uncompressed_size : Int)

Updates the last entry written with the CRC32 checksum and compressed/uncompressed sizes. For stored entries, compressed_size and uncompressed_size are the same. After updating the entry will immediately write the data descriptor bytes to the output.

@param crc32 the CRC32 checksum of the entry when uncompressed @param compressed_size the size of the compressed segment within the ZIP @param uncompressed_size the size of the entry once uncompressed @return the offset the output IO is at after writing the data descriptor

Source
write_central_directory
Source
write_data_descriptor_for_last_entry
Source
write_local_entry_header(entry)
Source

Nested types