diff --git a/yazi-plugin/preset/plugins/image.lua b/yazi-plugin/preset/plugins/image.lua index c787acd8..2d1a9d27 100644 --- a/yazi-plugin/preset/plugins/image.lua +++ b/yazi-plugin/preset/plugins/image.lua @@ -1,9 +1,7 @@ local M = {} -function M:cache() return ya.cache_file(self.file.url .. tostring(self.file.cha.modified)) end - function M:peek() - local cache = self:cache() + local cache = ya.file_cache(self) ya.image_show(fs.symlink_metadata(cache) and cache or self.file.url, self.area) ya.preview_widgets(self, {}) end @@ -11,7 +9,7 @@ end function M:seek() end function M:preload() - local cache = self:cache() + local cache = ya.file_cache(self) if fs.symlink_metadata(cache) then return 1 end diff --git a/yazi-plugin/preset/plugins/pdf.lua b/yazi-plugin/preset/plugins/pdf.lua index c2ad4362..b4e37d5d 100644 --- a/yazi-plugin/preset/plugins/pdf.lua +++ b/yazi-plugin/preset/plugins/pdf.lua @@ -1,10 +1,8 @@ local M = {} -function M:cache() return ya.cache_file(self.file.url .. self.skip .. tostring(self.file.cha.modified)) end - function M:peek() if self:preload() == 1 then - ya.image_show(self:cache(), self.area) + ya.image_show(ya.file_cache(self), self.area) ya.preview_widgets(self, {}) end end @@ -18,7 +16,7 @@ function M:seek(units) end function M:preload() - local cache = self:cache() + local cache = ya.file_cache(self) if fs.symlink_metadata(cache) then return 1 end diff --git a/yazi-plugin/preset/plugins/video.lua b/yazi-plugin/preset/plugins/video.lua index 0a5e61f8..46a3a02b 100644 --- a/yazi-plugin/preset/plugins/video.lua +++ b/yazi-plugin/preset/plugins/video.lua @@ -1,10 +1,8 @@ local M = {} -function M:cache() return ya.cache_file(self.file.url .. self.skip .. tostring(self.file.cha.modified)) end - function M:peek() if self:preload() == 1 then - ya.image_show(self:cache(), self.area) + ya.image_show(ya.file_cache(self), self.area) ya.preview_widgets(self, {}) end end @@ -26,7 +24,7 @@ function M:preload() return 2 end - local cache = self:cache() + local cache = ya.file_cache(self) if fs.symlink_metadata(cache) then return 1 end diff --git a/yazi-plugin/src/utils/cache.rs b/yazi-plugin/src/utils/cache.rs index 85c962c6..94aa4aac 100644 --- a/yazi-plugin/src/utils/cache.rs +++ b/yazi-plugin/src/utils/cache.rs @@ -3,17 +3,25 @@ use mlua::{Lua, Table}; use yazi_config::PREVIEW; use super::Utils; -use crate::bindings::{Cast, Url}; +use crate::bindings::{Cast, FileRef, Url}; impl Utils { pub(super) fn cache(lua: &Lua, ya: &Table) -> mlua::Result<()> { ya.set( - "cache_file", - lua.create_function(|lua, data: mlua::String| { - Url::cast( - lua, - PREVIEW.cache_dir.join(format!("{:x}", Md5::new_with_prefix(data).finalize())), - ) + "file_cache", + lua.create_function(|lua, t: Table| { + let file: FileRef = t.get("file")?; + if file.url.parent() == Some(&PREVIEW.cache_dir) { + return Ok(None); + } + + let hex = { + let mut digest = Md5::new_with_prefix(file.url.as_os_str().as_encoded_bytes()); + digest.update(&format!("//{:?}//{}", file.cha.modified, t.get("skip").unwrap_or(0))); + format!("{:x}", digest.finalize()) + }; + + Some(Url::cast(lua, PREVIEW.cache_dir.join(hex))).transpose() })?, )?;