Model wallpaper display policies
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
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 });
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user