59 lines
2.5 KiB
QML
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 });
|
|
}
|
|
}
|
|
}
|