From f8c3c93824645a807d28b760855b4676ea479720 Mon Sep 17 00:00:00 2001 From: Igor Tolmachev Date: Sat, 15 Jun 2024 03:30:50 +0900 Subject: Add simple zip reader --- src/zip/file.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/zip/file.rs (limited to 'src/zip/file.rs') diff --git a/src/zip/file.rs b/src/zip/file.rs new file mode 100644 index 0000000..3b63c2a --- /dev/null +++ b/src/zip/file.rs @@ -0,0 +1,45 @@ +use crate::driver::ArchiveFile; +use chrono::{NaiveDate, NaiveDateTime, NaiveTime}; + +pub struct ZipFile { + pub name: String, + pub datetime: NaiveDateTime, + pub compression_method: u16, + pub compressed_size: u64, + pub size: u64, + pub comment: String, +} + +impl ArchiveFile for ZipFile {} + +impl ZipFile { + pub fn new( + name: String, + dos_date: u16, + dos_time: u16, + compression_method: u16, + compressed_size: u64, + size: u64, + comment: String, + ) -> Self { + let year = (dos_date >> 9 & 0x7F) + 1980; + let month = dos_date >> 5 & 0xF; + let day = dos_date & 0x1F; + + let hour = (dos_time >> 11) & 0x1F; + let minute = (dos_time >> 5) & 0x3F; + let seconds = (dos_time & 0x1F) * 2; + + Self { + name, + datetime: NaiveDateTime::new( + NaiveDate::from_ymd_opt(year as i32, month as u32, day as u32).unwrap(), + NaiveTime::from_hms_opt(hour as u32, minute as u32, seconds as u32).unwrap(), + ), + compression_method, + compressed_size, + size, + comment, + } + } +} -- cgit v1.2.3