working on zip writer

develop
Kinch 2023-09-19 19:57:12 +02:00
parent e96052c286
commit cb6bce2ba5
5 changed files with 46 additions and 10 deletions

View File

@ -64,15 +64,16 @@ function does_not(predicate)
return function(...) return not predicate(...) end
end
function zip(source)
print("would zip")
for entry in source do
print(entry.path)
end
end
local comic_dir = directory("/Users/kinch/Desktop/Rebuild World")
comic_dir:filter(is_dir)
for chapter_dir in comic_dir do
print(chapter_dir)
--local images = FileTree
-- :new(fs.directory(chapter_dir.path))
-- :filter(does_not(contains("._")))
--for img in images do
-- print(img)
--end
zip(directory(chapter_dir):filter(does_not(contains("._"))))
end

View File

@ -1,8 +1,20 @@
use crate::resources::input_stream::DynResourceInputStream;
use crate::resources::Resource;
use mlua::{UserData, UserDataMethods};
use std::path::PathBuf;
mod zip_sink;
pub trait ResourceSink {
fn new(path: PathBuf) -> Self;
fn add_file(&mut self, input: DynResourceInputStream);
fn add_directory(&mut self);
fn add_directory(&mut self, dirname: String);
}
pub struct ResourceSinkWrapper<SinkType: ResourceSink>(SinkType);
impl<SinkType: ResourceSink> UserData for ResourceSinkWrapper<SinkType> {
fn add_methods<'lua, M: UserDataMethods<'lua, Self>>(methods: &mut M) {
methods.add_method_mut("add_file", |lua, this, resouce: DynResourceInputStream|)
}
}

View File

@ -2,6 +2,7 @@ use crate::resources::input_stream::DynResourceInputStream;
use crate::sinks::ResourceSink;
use std::fs::File;
use std::io::Write;
use std::path::PathBuf;
use std::ptr::write;
use zip::ZipWriter;
@ -10,10 +11,20 @@ pub struct ZipSink {
}
impl ResourceSink for ZipSink {
fn add(&mut self, mut input: DynResourceInputStream) {
fn new(path: PathBuf) -> Self {
ZipSink {
writer: ZipWriter::new(std::fs::File::create(path).expect("could not create file")),
}
}
fn add_file(&mut self, mut input: DynResourceInputStream) {
self.writer
.start_file(input.path(), Default::default())
.start_file(input.path().display().to_string(), Default::default())
.expect("error writing zip");
std::io::copy(&mut input, &mut self.writer).expect("error writing zip");
}
fn add_directory(&mut self, dirname: String) {
todo!("implementing adding directory")
}
}

View File

@ -1,5 +1,6 @@
use crate::resources::resource_filesystem::FilesystemResource;
use crate::resources::ResourceWrapper;
use crate::source::RessourceSource;
use mlua::{MetaMethod, UserData, UserDataMethods};
use std::fs::{read_dir, ReadDir};
use std::path::PathBuf;
@ -17,6 +18,12 @@ impl From<String> for DirectorySource {
}
}
impl RessourceSource<FilesystemResource> for DirectorySource {
fn root(&self) -> FilesystemResource {
self.path.clone().into()
}
}
impl Iterator for DirectorySource {
type Item = FilesystemResource;

View File

@ -1 +1,6 @@
use crate::resources::Resource;
pub mod directory_source;
pub trait RessourceSource<ResType: Resource>: Iterator {
fn root(&self) -> ResType;
}