diff --git a/src/plugin/interface/fs.rs b/src/plugin/interface/fs.rs index 3557c343a..562448637 100644 --- a/src/plugin/interface/fs.rs +++ b/src/plugin/interface/fs.rs @@ -5,6 +5,8 @@ use std::{ use mlua::UserData; +use crate::tools::extract_zip; + pub struct PluginFileSystem; impl UserData for PluginFileSystem { fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) { @@ -54,5 +56,14 @@ impl UserData for PluginFileSystem { file.write_all(content.as_bytes())?; Ok(()) }); + methods.add_function("unzip_file", |_, args: (String, String)| { + let file = PathBuf::from(args.0); + let target = PathBuf::from(args.1); + let res = extract_zip(&file, &target); + if let Err(e) = res { + return Err(mlua::Error::RuntimeError(e.to_string())); + } + Ok(()) + }); } } diff --git a/src/tools.rs b/src/tools.rs index 3f95ccac1..a8266c8ec 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -313,7 +313,7 @@ impl Tool { } } -fn extract_zip(file: &Path, target: &Path) -> anyhow::Result<()> { +pub fn extract_zip(file: &Path, target: &Path) -> anyhow::Result<()> { let zip_file = std::fs::File::open(&file)?; let mut zip = zip::ZipArchive::new(zip_file)?;