pragma Singleton import qs.config import qs.utils import Caelestia import Quickshell import Quickshell.Io import QtQuick Searcher { id: root readonly property string currentNamePath: `${Paths.state}/wallpaper/path.txt` readonly property list smartArg: Config.services.smartScheme ? [] : ["--no-smart"] property bool showPreview: false readonly property string current: showPreview ? previewPath : actualCurrent property string previewPath property string actualCurrent property bool previewColourLock function setWallpaper(path: string): void { actualCurrent = path; Quickshell.execDetached(["caelestia", "wallpaper", "-f", path, ...smartArg]); } function preview(path: string): void { previewPath = path; showPreview = true; if (Colours.scheme === "dynamic") getPreviewColoursProc.running = true; } function stopPreview(): void { showPreview = false; if (!previewColourLock) Colours.showPreview = false; } list: wallpapers.entries useFuzzy: Config.launcher.useFuzzy.wallpapers extraOpts: useFuzzy ? ({}) : ({ forward: false }) IpcHandler { target: "wallpaper" function get(): string { return root.actualCurrent; } function set(path: string): void { root.setWallpaper(path); } function list(): string { return root.list.map(w => w.path).join("\n"); } } FileView { path: root.currentNamePath watchChanges: true onFileChanged: reload() onLoaded: { root.actualCurrent = text().trim(); root.previewColourLock = false; } } FileSystemModel { id: wallpapers recursive: true path: Paths.wallsdir filter: FileSystemModel.Images } Process { id: getPreviewColoursProc command: ["caelestia", "wallpaper", "-p", root.previewPath, ...root.smartArg] stdout: StdioCollector { onStreamFinished: { Colours.load(text, true); Colours.showPreview = true; } } } }