dotfiles/.config/yazi/plugins/krita-preview.yazi/main.lua
2026-04-25 16:39:11 +05:30

56 lines
1.3 KiB
Lua

local M = {}
function M:peek(job)
local start, cache = os.clock(), ya.file_cache(job)
if not cache then
return
end
local ok, err = self:preload(job)
if not ok or err then
return ya.preview_widget(job, err)
end
ya.sleep(math.max(0, rt.preview.image_delay / 1000 + start - os.clock()))
local _, err = ya.image_show(cache, job.area)
ya.preview_widget(job, err)
end
function M:seek() end
function M:preload(job)
local cache = ya.file_cache(job)
if not cache or fs.cha(cache) then
return true
end
local cmd_unzip = Command("unzip"):arg({ "-jp", tostring(job.file.url), "preview.png" })
local cmd_7z = Command("7z"):arg({ "e", "-so", tostring(job.file.url), "preview.png" })
local output = cmd_unzip:output()
if not output then
-- Try with `7z` instead
output = cmd_7z:output()
if not output then
return nil, Err("Failed to start `unzip` or `7z`")
elseif not output.status.success then
return nil, Err("`7z` exited with error code: %s", output.status.code)
end
elseif not output.status.success then
return nil, Err("`unzip` exited with error code: %s", output.status.code)
end
local ok, err = fs.write(cache, output.stdout)
if not ok then
return false, Err("Failed to write preview image to cache, error: %s", err)
else
return true
end
end
function M:spot(job)
require("file"):spot(job)
end
return M