diff options
Diffstat (limited to 'services/Wallpapers.qml')
| -rw-r--r-- | services/Wallpapers.qml | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/services/Wallpapers.qml b/services/Wallpapers.qml new file mode 100644 index 0000000..833e808 --- /dev/null +++ b/services/Wallpapers.qml @@ -0,0 +1,53 @@ +pragma Singleton + +import "root:/utils/scripts/fuzzysort.js" as Fuzzy +import Quickshell +import Quickshell.Io +import QtQuick +import Qt.labs.platform + +Singleton { + id: root + + readonly property string path: `${StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]}/Wallpapers` + + property list<Wallpaper> list + + readonly property list<var> preppedPaths: list.map(w => ({ + path: Fuzzy.prepare(w.path), + wall: w + })) + + function fuzzyQuery(search: string): var { + return Fuzzy.go(search, preppedPaths, { + all: true, + keys: ["name", "path"], + scoreFn: r => r[0].score * 0.9 + r[1].score * 0.1 + }).map(r => r.obj.wall); + } + + Process { + running: true + command: ["fd", ".", root.path.slice(7), "-t", "f", "-e", "jpg", "-e", "jpeg", "-e", "png", "-e", "svg"] + stdout: SplitParser { + splitMarker: "" + onRead: data => { + const list = data.trim().split("\n"); + root.list = list.map(p => wallpaperComp.createObject(root, { + path: p + })); + } + } + } + + component Wallpaper: QtObject { + required property string path + readonly property string name: path.slice(path.lastIndexOf("/") + 1, path.lastIndexOf(".")) + } + + Component { + id: wallpaperComp + + Wallpaper {} + } +} |