mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
fix: prevent recursive caching - don't cache files in the cache directory (#504)
This commit is contained in:
parent
560a1bf3f9
commit
a735b3234f
4 changed files with 39 additions and 23 deletions
|
|
@ -1,18 +1,20 @@
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
function M:cache() return ya.cache_file(self.file.url .. tostring(self.file.cha.modified)) end
|
|
||||||
|
|
||||||
function M:peek()
|
function M:peek()
|
||||||
local cache = self:cache()
|
local url = ya.file_cache(self)
|
||||||
ya.image_show(fs.symlink_metadata(cache) and cache or self.file.url, self.area)
|
if not url or not fs.symlink_metadata(url) then
|
||||||
|
url = self.file.url
|
||||||
|
end
|
||||||
|
|
||||||
|
ya.image_show(url, self.area)
|
||||||
ya.preview_widgets(self, {})
|
ya.preview_widgets(self, {})
|
||||||
end
|
end
|
||||||
|
|
||||||
function M:seek() end
|
function M:seek() end
|
||||||
|
|
||||||
function M:preload()
|
function M:preload()
|
||||||
local cache = self:cache()
|
local cache = ya.file_cache(self)
|
||||||
if fs.symlink_metadata(cache) then
|
if not cache or fs.symlink_metadata(cache) then
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
function M:cache() return ya.cache_file(self.file.url .. self.skip .. tostring(self.file.cha.modified)) end
|
|
||||||
|
|
||||||
function M:peek()
|
function M:peek()
|
||||||
|
local cache = ya.file_cache(self)
|
||||||
|
if not cache then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if self:preload() == 1 then
|
if self:preload() == 1 then
|
||||||
ya.image_show(self:cache(), self.area)
|
ya.image_show(cache, self.area)
|
||||||
ya.preview_widgets(self, {})
|
ya.preview_widgets(self, {})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -18,8 +21,8 @@ function M:seek(units)
|
||||||
end
|
end
|
||||||
|
|
||||||
function M:preload()
|
function M:preload()
|
||||||
local cache = self:cache()
|
local cache = ya.file_cache(self)
|
||||||
if fs.symlink_metadata(cache) then
|
if not cache or fs.symlink_metadata(cache) then
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
function M:cache() return ya.cache_file(self.file.url .. self.skip .. tostring(self.file.cha.modified)) end
|
|
||||||
|
|
||||||
function M:peek()
|
function M:peek()
|
||||||
|
local cache = ya.file_cache(self)
|
||||||
|
if not cache then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if self:preload() == 1 then
|
if self:preload() == 1 then
|
||||||
ya.image_show(self:cache(), self.area)
|
ya.image_show(cache, self.area)
|
||||||
ya.preview_widgets(self, {})
|
ya.preview_widgets(self, {})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -26,8 +29,8 @@ function M:preload()
|
||||||
return 2
|
return 2
|
||||||
end
|
end
|
||||||
|
|
||||||
local cache = self:cache()
|
local cache = ya.file_cache(self)
|
||||||
if fs.symlink_metadata(cache) then
|
if not cache or fs.symlink_metadata(cache) then
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,17 +3,25 @@ use mlua::{Lua, Table};
|
||||||
use yazi_config::PREVIEW;
|
use yazi_config::PREVIEW;
|
||||||
|
|
||||||
use super::Utils;
|
use super::Utils;
|
||||||
use crate::bindings::{Cast, Url};
|
use crate::bindings::{Cast, FileRef, Url};
|
||||||
|
|
||||||
impl Utils {
|
impl Utils {
|
||||||
pub(super) fn cache(lua: &Lua, ya: &Table) -> mlua::Result<()> {
|
pub(super) fn cache(lua: &Lua, ya: &Table) -> mlua::Result<()> {
|
||||||
ya.set(
|
ya.set(
|
||||||
"cache_file",
|
"file_cache",
|
||||||
lua.create_function(|lua, data: mlua::String| {
|
lua.create_function(|lua, t: Table| {
|
||||||
Url::cast(
|
let file: FileRef = t.get("file")?;
|
||||||
lua,
|
if file.url.parent() == Some(&PREVIEW.cache_dir) {
|
||||||
PREVIEW.cache_dir.join(format!("{:x}", Md5::new_with_prefix(data).finalize())),
|
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()
|
||||||
})?,
|
})?,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue