44 lines
1.2 KiB
QML
44 lines
1.2 KiB
QML
pragma Singleton
|
|
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import Qt.labs.platform
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
readonly property string thumbDir: `${StandardPaths.standardLocations(StandardPaths.GenericCacheLocation)[0]}/caelestia/thumbnails`.slice(7)
|
|
|
|
function go(sha: string, path: string, width: int, height: int): string {
|
|
if (!sha || !path || !width || !height)
|
|
return "";
|
|
|
|
const thumbPath = `${thumbDir}/${sha}@${width}x${height}-exact.png`;
|
|
|
|
thumbProc.path = path;
|
|
thumbProc.thumbPath = thumbPath;
|
|
thumbProc.width = width;
|
|
thumbProc.height = height;
|
|
thumbProc.startDetached();
|
|
|
|
return thumbPath;
|
|
}
|
|
|
|
Process {
|
|
id: thumbProc
|
|
|
|
property string path
|
|
property string thumbPath
|
|
property int width
|
|
property int height
|
|
|
|
command: ["fish", "-c", `
|
|
if ! test -f ${thumbPath}
|
|
set -l size (identify -ping -format '%w\n%h' ${path})
|
|
if test $size[1] -gt ${width} -o $size[2] -gt ${height}
|
|
magick ${path} -thumbnail ${width}x${height}^ -background none -gravity center -extent ${width}x${height} -unsharp 0x.5 ${thumbPath}
|
|
end
|
|
end
|
|
`]
|
|
}
|
|
}
|