fix: wrong state pointed to and ignore plugin/flavor directory creation errors

This commit is contained in:
sxyazi 2024-04-01 00:11:07 +08:00
parent bfcf401b40
commit 7a99ea4409
No known key found for this signature in database
4 changed files with 20 additions and 23 deletions

View file

@ -157,8 +157,8 @@ impl Default for Boot {
state_dir: Xdg::state_dir(),
};
std::fs::create_dir_all(&boot.flavor_dir).expect("Failed to create flavor directory");
std::fs::create_dir_all(&boot.plugin_dir).expect("Failed to create plugin directory");
std::fs::create_dir_all(&boot.flavor_dir).ok();
std::fs::create_dir_all(&boot.plugin_dir).ok();
boot
}
}

View file

@ -1,4 +1,4 @@
use std::{fs, path::PathBuf, time::{self, SystemTime}};
use std::{path::PathBuf, time::{self, SystemTime}};
use serde::{Deserialize, Serialize};
use validator::Validate;
@ -53,7 +53,7 @@ impl Default for Preview {
preview.cache_dir.filter(|p| !p.is_empty()).map_or_else(Xdg::cache_dir, expand_path);
if !cache_dir.is_dir() {
fs::create_dir(&cache_dir).unwrap();
std::fs::create_dir(&cache_dir).expect("Failed to create cache directory");
}
Preview {

View file

@ -5,7 +5,7 @@ use parking_lot::RwLock;
use yazi_boot::BOOT;
use yazi_shared::{fs::Url, RoCell};
use crate::{body::{Body, BodyCd, BodyHi, BodyHover, BodyRename, BodyTabs, BodyYank}, Client, Payload, ID, PEERS};
use crate::{body::{Body, BodyCd, BodyHi, BodyHover, BodyRename, BodyTabs, BodyYank}, Client, ID, PEERS};
pub static LOCAL: RoCell<RwLock<HashMap<String, HashMap<String, Function<'static>>>>> =
RoCell::new();

View file

@ -13,11 +13,11 @@ impl Require {
"require",
lua.create_function(move |lua, name: mlua::String| {
lua.named_registry_value::<RtRef>("rt")?.swap(name.to_str()?);
let module: Table = require.call(&name)?;
let mod_: Table = require.call(&name)?;
lua.named_registry_value::<RtRef>("rt")?.reset();
module.raw_set("_name", &name)?;
Self::create_mt(lua, name, module)
mod_.raw_set("_name", &name)?;
Self::create_mt(lua, name, mod_)
})?,
)?;
@ -27,38 +27,35 @@ impl Require {
fn create_mt(
lua: &'static Lua,
name: mlua::String<'static>,
module: Table<'static>,
mod_: Table<'static>,
) -> mlua::Result<Table<'static>> {
let ts =
lua.create_table_from([("name", name.into_lua(lua)?), ("module", module.into_lua(lua)?)])?;
lua.create_table_from([("name", name.into_lua(lua)?), ("mod", mod_.into_lua(lua)?)])?;
let mt = lua.create_table()?;
mt.raw_set(
let mt = lua.create_table_from([(
"__index",
lua.create_function(|_, (ts, key): (Table, mlua::String)| {
lua.create_function(|_, (_, key): (Table, mlua::String)| {
if key.to_str()? == "setup" {
Ok(RequireSetup { name: ts.raw_get("name")?, module: ts.raw_get("module")? })
Ok(RequireSetup)
} else {
Err("Only `require():setup()` and `require().setup()` are supported").into_lua_err()
Err("Only `require():setup()` is supported").into_lua_err()
}
})?,
)?;
)])?;
ts.set_metatable(Some(mt));
Ok(ts)
}
}
pub(super) struct RequireSetup {
name: mlua::String<'static>,
module: Table<'static>,
}
pub(super) struct RequireSetup;
impl UserData for RequireSetup {
fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) {
methods.add_meta_method(MetaMethod::Call, |lua, me, args: Variadic<Value>| {
lua.named_registry_value::<RtRef>("rt")?.swap(me.name.to_str()?);
let result = me.module.call_function::<_, Variadic<Value>>("setup", args);
methods.add_meta_method(MetaMethod::Call, |lua, _, (ts, args): (Table, Variadic<Value>)| {
let (name, mod_): (mlua::String, Table) = (ts.raw_get("name")?, ts.raw_get("mod")?);
lua.named_registry_value::<RtRef>("rt")?.swap(name.to_str()?);
let result = mod_.call_method::<_, Variadic<Value>>("setup", args);
lua.named_registry_value::<RtRef>("rt")?.reset();
result
});