Files
Panama/config/dot/quickshell/wallpaper-policy-harness.qml
T

59 lines
2.5 KiB
QML

import Quickshell
import Quickshell.Io
import QtQuick
import "services/WallpaperPolicy.js" as WallpaperPolicy
ShellRoot {
readonly property var candidates: ["/images/a.jpg", "/images/b.jpg", "/images/c.jpg"]
readonly property var outputs: ["DP-2", "HDMI-A-1"]
IpcHandler {
target: "wallpaper-policy-test"
function status(): string {
const collection = WallpaperPolicy.validCollection([
"/images/a.jpg", "/invalid.jpg", "/images/b.jpg",
"/images/a.jpg", "relative.jpg", "/images/c.jpg"
], candidates);
const assignments = WallpaperPolicy.validAssignments({
"DP-2": "/images/b.jpg",
"HDMI-A-1": "/invalid.jpg",
"bad connector!": "/images/c.jpg"
}, candidates);
return JSON.stringify({
validAbsolute: WallpaperPolicy.validPath("/images/a.jpg", candidates),
invalidComma: WallpaperPolicy.validPath("/images/a,b.jpg", candidates),
invalidUnknown: WallpaperPolicy.validPath("/images/nope.jpg", candidates),
collection,
assignments,
single: WallpaperPolicy.effectiveMap(
"single", "/images/a.jpg", "", assignments, outputs, candidates),
perMonitor: WallpaperPolicy.effectiveMap(
"per-monitor", "/images/a.jpg", "", assignments, outputs, candidates),
slideshow: WallpaperPolicy.effectiveMap(
"slideshow", "/images/a.jpg", "/images/c.jpg", assignments, outputs, candidates),
ordered: [
WallpaperPolicy.orderedNext(collection, "/images/a.jpg"),
WallpaperPolicy.orderedNext(collection, "/images/b.jpg"),
WallpaperPolicy.orderedNext(collection, "/images/c.jpg")
]
});
}
function shuffle(): string {
const values = [0.8, 0.1, 0.6, 0.2, 0.9, 0.4];
let index = 0;
const random = () => values[index++ % values.length];
let state = { bag: [], current: "" };
const emitted = [];
for (let count = 0; count < 4; count++) {
state = WallpaperPolicy.shuffledNext(candidates, state.bag, state.current, random);
emitted.push(state.path);
state.current = state.path;
}
return JSON.stringify({ emitted, remaining: state.bag });
}
}
}