working on zip writer
parent
e96052c286
commit
cb6bce2ba5
|
|
@ -64,15 +64,16 @@ function does_not(predicate)
|
||||||
return function(...) return not predicate(...) end
|
return function(...) return not predicate(...) end
|
||||||
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")
|
local comic_dir = directory("/Users/kinch/Desktop/Rebuild World")
|
||||||
comic_dir:filter(is_dir)
|
comic_dir:filter(is_dir)
|
||||||
|
|
||||||
for chapter_dir in comic_dir do
|
for chapter_dir in comic_dir do
|
||||||
print(chapter_dir)
|
zip(directory(chapter_dir):filter(does_not(contains("._"))))
|
||||||
--local images = FileTree
|
|
||||||
-- :new(fs.directory(chapter_dir.path))
|
|
||||||
-- :filter(does_not(contains("._")))
|
|
||||||
--for img in images do
|
|
||||||
-- print(img)
|
|
||||||
--end
|
|
||||||
end
|
end
|
||||||
|
|
@ -1,8 +1,20 @@
|
||||||
use crate::resources::input_stream::DynResourceInputStream;
|
use crate::resources::input_stream::DynResourceInputStream;
|
||||||
|
use crate::resources::Resource;
|
||||||
|
use mlua::{UserData, UserDataMethods};
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
mod zip_sink;
|
mod zip_sink;
|
||||||
|
|
||||||
pub trait ResourceSink {
|
pub trait ResourceSink {
|
||||||
|
fn new(path: PathBuf) -> Self;
|
||||||
fn add_file(&mut self, input: DynResourceInputStream);
|
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 crate::sinks::ResourceSink;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
use std::path::PathBuf;
|
||||||
use std::ptr::write;
|
use std::ptr::write;
|
||||||
use zip::ZipWriter;
|
use zip::ZipWriter;
|
||||||
|
|
||||||
|
|
@ -10,10 +11,20 @@ pub struct ZipSink {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ResourceSink for 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
|
self.writer
|
||||||
.start_file(input.path(), Default::default())
|
.start_file(input.path().display().to_string(), Default::default())
|
||||||
.expect("error writing zip");
|
.expect("error writing zip");
|
||||||
std::io::copy(&mut input, &mut self.writer).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::resource_filesystem::FilesystemResource;
|
||||||
use crate::resources::ResourceWrapper;
|
use crate::resources::ResourceWrapper;
|
||||||
|
use crate::source::RessourceSource;
|
||||||
use mlua::{MetaMethod, UserData, UserDataMethods};
|
use mlua::{MetaMethod, UserData, UserDataMethods};
|
||||||
use std::fs::{read_dir, ReadDir};
|
use std::fs::{read_dir, ReadDir};
|
||||||
use std::path::PathBuf;
|
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 {
|
impl Iterator for DirectorySource {
|
||||||
type Item = FilesystemResource;
|
type Item = FilesystemResource;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1,6 @@
|
||||||
|
use crate::resources::Resource;
|
||||||
|
|
||||||
pub mod directory_source;
|
pub mod directory_source;
|
||||||
|
pub trait RessourceSource<ResType: Resource>: Iterator {
|
||||||
|
fn root(&self) -> ResType;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue