working on zip writer
parent
e96052c286
commit
cb6bce2ba5
|
|
@ -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
|
||||
|
|
@ -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|)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1,6 @@
|
|||
use crate::resources::Resource;
|
||||
|
||||
pub mod directory_source;
|
||||
pub trait RessourceSource<ResType: Resource>: Iterator {
|
||||
fn root(&self) -> ResType;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue