update cli

This commit is contained in:
Tim-Paik 2022-04-04 23:53:17 +08:00
parent 376919d1a5
commit 45a5b6a1a6
Signed by: Tim-Paik
GPG Key ID: DC36A050DB42566D
3 changed files with 56 additions and 58 deletions

View File

@ -11,3 +11,7 @@ new_mime_guess = "4.0"
serde = {version = "1.0", features = ["derive"]}
toml = "0.5"
wry = "0.12"
[profile.release.package.wry]
debug = true
debug-assertions = true

View File

@ -0,0 +1,49 @@
use crate::data;
use std::{fs, io::Write};
#[cfg(windows)]
const RUNTIME_DATA: &[u8] = include_bytes!("../../target/release/neutauri_runtime.exe");
#[cfg(not(windows))]
const RUNTIME_DATA: &[u8] = include_bytes!("../../target/release/neutauri_runtime");
fn options() -> fs::OpenOptions {
#[cfg(not(windows))]
use std::os::unix::prelude::OpenOptionsExt;
let mut options = fs::OpenOptions::new();
options.write(true);
options.create(true);
options.truncate(true);
#[cfg(not(windows))]
options.mode(0o755);
options
}
pub fn bundle(config_path: String) -> std::io::Result<()> {
let config_path = std::path::Path::new(&config_path).canonicalize()?;
let config: data::Config = toml::from_str(fs::read_to_string(&config_path)?.as_str())
.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?;
let source = match config_path.parent() {
Some(path) => path.join(&config.source).canonicalize()?,
None => config.source.canonicalize()?,
};
let target = match config_path.parent() {
Some(path) => data::normalize_path(&path.join(&config.target)),
None => data::normalize_path(&config.target),
};
let target = if target.extension() == None && cfg!(windows) {
target.with_extension("exe")
} else {
target
};
if target.extension() == Some(std::ffi::OsStr::new("neu")) {
data::pack(config_path)?;
return Ok(());
}
let data = data::Data::build_from_dir(source, config.window_attr()?, config.webview_attr()?)?;
let mut f = options().open(&target)?;
f.write_all(RUNTIME_DATA)?;
f.write_all(&data)?;
f.sync_all()?;
f.flush()?;
Ok(())
}

View File

@ -1,65 +1,10 @@
use std::{fs, io::Write};
mod bundle;
mod data;
#[cfg(windows)]
const RUNTIME_DATA: &[u8] = include_bytes!("../../target/release/neutauri_runtime.exe");
#[cfg(not(windows))]
const RUNTIME_DATA: &[u8] = include_bytes!("../../target/release/neutauri_runtime");
#[cfg(not(windows))]
fn options() -> fs::OpenOptions {
use std::os::unix::prelude::OpenOptionsExt;
let mut options = fs::OpenOptions::new();
options.write(true);
options.create(true);
options.truncate(true);
options.mode(0o755);
options
}
#[cfg(windows)]
fn options() -> fs::OpenOptions {
let mut options = fs::OpenOptions::new();
options.write(true);
options.create(true);
options.truncate(true);
options
}
fn main() -> wry::Result<()> {
fn main() -> std::io::Result<()> {
let arg = std::env::args()
.nth(1)
.unwrap_or_else(|| "neutauri.toml".into());
if arg == "--help" || arg == "-h" {
println!("Usage: neutauri_bundler [neutauri.toml]");
return Ok(());
}
let config_path = std::path::Path::new(&arg).canonicalize()?;
let config: data::Config = toml::from_str(fs::read_to_string(&config_path)?.as_str())
.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?;
let source = match config_path.parent() {
Some(path) => path.join(&config.source).canonicalize()?,
None => config.source.canonicalize()?,
};
let target = match config_path.parent() {
Some(path) => data::normalize_path(&path.join(&config.target)),
None => data::normalize_path(&config.target),
};
let target = if target.extension() == None && cfg!(windows) {
target.with_extension("exe")
} else {
target
};
if target.extension() == Some(std::ffi::OsStr::new("neu")) {
data::pack(arg)?;
return Ok(());
}
let data = data::Data::build_from_dir(source, config.window_attr()?, config.webview_attr()?)?;
let mut f = options().open(&target)?;
f.write_all(RUNTIME_DATA)?;
f.write_all(&data)?;
f.sync_all()?;
f.flush()?;
bundle::bundle(arg)?;
Ok(())
}