From 00d3c1a472888817d7649391d4a8485c5fc6f6f5 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sat, 3 May 2025 23:56:37 +1000 Subject: feat: launcher wallpaper selector --- services/Wallpapers.qml | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 services/Wallpapers.qml (limited to 'services') 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 list + + readonly property list 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 {} + } +} -- cgit v1.2.3-freya