diff --git a/README.md b/README.md index c71d2e2..2e62edd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # filegram ![tests](https://github.com/PKopel/filegram/actions/workflows/build.yml/badge.svg) +![pages](https://github.com/PKopel/filegram/actions/workflows/pages.yml/badge.svg) Store files as images. @@ -12,4 +13,4 @@ Filegram is inspired by the ["Using YouTube as Unlimited Cloud Storage??"](https - [`filegram`](./filegram/): library for encodeing and decodeing files - [`filegram-cli`](./filegram-cli/): command line interface for filegram -- [`filegram-web`](./filegram-web/): web tool build with webassembly +- [`filegram-web`](./filegram-web/): filegram web tool diff --git a/filegram-cli/Cargo.toml b/filegram-cli/Cargo.toml index 50570f6..d1f3780 100644 --- a/filegram-cli/Cargo.toml +++ b/filegram-cli/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" [dependencies] filegram = { path = "../filegram" } -clap = { version = "4.4.8", features = ["derive"] } +clap = { version = "4.4.10", features = ["derive"] } serde_json = "1.0.108" [[bin]] diff --git a/filegram-cli/src/fig.rs b/filegram-cli/src/fig.rs index a80eacf..415dd87 100644 --- a/filegram-cli/src/fig.rs +++ b/filegram-cli/src/fig.rs @@ -1,6 +1,8 @@ +mod utils; + use std::{ fs::{self, File}, - io::{BufReader, Error, ErrorKind, Read}, + io::{self, BufReader, Error, ErrorKind}, path::Path, }; @@ -40,8 +42,8 @@ trait CommandTrait { #[derive(Args)] struct Encode { - #[arg(short, long)] - file: String, + #[arg(short, long, help = "path to input file, default is stdin")] + file: Option, #[arg(short, long)] output: Option, #[arg(short, long)] @@ -51,18 +53,18 @@ struct Encode { impl CommandTrait for Encode { fn execute(&self) -> Result<(), Error> { let output = self.output.clone().unwrap_or_else(|| self.default_output()); - let file = File::open(self.file.clone())?; - let file_size = file.metadata()?.len() as usize; - let mut file = BufReader::new(file); + let data = if let Some(file) = self.file.clone() { + utils::read_to_end(File::open(file.clone())?) + } else { + utils::read_to_end(io::stdin()) + }?; let rgb = if self.encrypted { let cipher = Cipher::new(); save_cipher_key(cipher.get_key_struct())?; - let mut data = Vec::new(); - file.read_to_end(&mut data)?; let data = cipher.encrypt(&data); encode::from_slice(&data) } else { - encode::from_reader(&mut file, file_size) + encode::from_slice(&data) }; let path = Path::new(&output); rgb.save(path) @@ -71,7 +73,10 @@ impl CommandTrait for Encode { } fn default_output(&self) -> String { - self.file.clone() + ".png" + match self.file.clone() { + Some(file) => file + ".png", + None => "output.png".to_owned(), + } } } diff --git a/filegram-cli/src/utils.rs b/filegram-cli/src/utils.rs new file mode 100644 index 0000000..a00aad8 --- /dev/null +++ b/filegram-cli/src/utils.rs @@ -0,0 +1,8 @@ +use std::io::{BufReader, Error, Read}; + +pub fn read_to_end(reader: R) -> Result, Error> { + let mut buffer = BufReader::new(reader); + let mut data = Vec::new(); + buffer.read_to_end(&mut data)?; + Ok(data) +} diff --git a/filegram-web/Cargo.toml b/filegram-web/Cargo.toml index dea247e..0161792 100644 --- a/filegram-web/Cargo.toml +++ b/filegram-web/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" filegram = { path = "../filegram" } getrandom = { version = "0.2.11", features = ["js"] } -js-sys = "0.3.65" +js-sys = "0.3.66" image = "0.24.7" web-sys = { version = "0.3.63", features = [ "File", @@ -16,7 +16,7 @@ web-sys = { version = "0.3.63", features = [ "Url", "ReadableStream", ] } -wasm-bindgen = "0.2.86" +wasm-bindgen = "0.2.89" yew = { version = "0.21.0", features = ["csr"] } gloo = "0.10.0" gloo-file = "0.3.0" diff --git a/filegram/Cargo.toml b/filegram/Cargo.toml index d400b2a..bd062d1 100644 --- a/filegram/Cargo.toml +++ b/filegram/Cargo.toml @@ -11,7 +11,7 @@ block-padding = "0.3.3" chacha20poly1305 = { version = "0.10.1", features = ["heapless"] } image = "0.24.7" imageproc = "0.23.0" -serde = { version = "1.0.192", features = ["derive"] } +serde = { version = "1.0.193", features = ["derive"] } [lib] name = "filegram"