Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

quickshell/nuguland/diagnostics.js

Raw
.pragma library
.import "popoutCatalog.js" as PopoutCatalog

// Explicit projections only. Never serialize a service, output, or caller string.
function choice(value, allowed) {
    return allowed.indexOf(value) >= 0 ? value : "unknown";
}

function number(value) {
    return typeof value === "number" && Number.isFinite(value) ? value : 0;
}

function rect(value) {
    return {
        "x": number(value.x),
        "y": number(value.y),
        "width": number(value.width),
        "height": number(value.height)
    };
}

function name(value) {
    if (value === "")
        return "";
    return typeof value === "string" && Object.prototype.hasOwnProperty.call(PopoutCatalog.entries, value) ? value : "unknown";
}

function phase(value) {
    return choice(value, ["closed", "opening", "open", "closing"]);
}

function nextOperationId(current) {
    return current >= 2147483647 ? 1 : current + 1;
}

function transition(event, surfaces) {
    return {
        "version": 1,
        "kind": "popup-transition",
        "operationId": number(surfaces.operationId),
        "event": choice(event, ["opening", "opened", "switched", "closed"]),
        "name": name(surfaces.popoutName),
        "phase": phase(surfaces.popoutPhase)
    };
}

function popup(surfaces) {
    return {
        "operationId": number(surfaces.operationId),
        "name": name(surfaces.popoutName),
        "phase": phase(surfaces.popoutPhase),
        "open": surfaces.popoutOpen === true,
        "closing": surfaces.popoutClosing === true,
        "orientation": choice(surfaces.orientation, ["horizontal", "vertical"]),
        "progress": number(surfaces.popoutProgress),
        "anchor": rect(surfaces.popoutAnchor),
        "card": rect(surfaces.popupCardFrame(surfaces.popoutProgress).currentRect),
        "viewport": {
            "width": number(surfaces.screenWidth),
            "height": number(surfaces.screenHeight),
            "barHeight": number(surfaces.barHeight)
        }
    };
}

function snapshot(surfaces, screens, services) {
    const displays = [];
    for (let i = 0; i < screens.length; i++) {
        const screen = screens[i];
        const display = rect(screen);
        display.scale = number(screen.devicePixelRatio);
        displays.push(display);
    }
    return {
        "version": 1,
        "popup": popup(surfaces),
        "displays": displays,
        "services": {
            "niri": {
                "available": services.niri.available === true,
                "ready": services.niri.ready === true,
                "windowCount": number(services.niri.windows.length),
                "workspaceCount": number(services.niri.workspaces.length)
            },
            "audio": { "ready": services.audio.pipewireReady === true },
            "network": {
                "enabled": services.network.wifiEnabled === true,
                "scanning": services.network.scanning === true
            },
            "vault": {
                "status": choice(services.vault.status, ["needs-setup", "locked", "loading", "unlocked", "syncing", "sync-failure", "stale-cache", "second-factor", "authentication-failure", "unavailable-vault"]),
                "lockPending": services.vault.lockPending === true
            },
            "noko": {
                "ready": services.noko.ready === true,
                "phase": choice(services.noko.overlayState, ["", "capturing", "transcribing", "finished"]),
                "installing": services.noko.installing === true
            }
        }
    };
}