- hypr/apps.lua - hypr/autostart.lua - hypr/envs.lua - hypr/hyprland.lua - hypr/hyprsunset.conf - hypr/input.lua - hypr/looknfeel.lua - hypr/omasettings.lua - hypr/xdph.conf - omarchy/branding/about.txt - omarchy/branding/screensaver.txt - omarchy/extensions/omarchy-menu.jsonc - omarchy/hooks/battery-low.d/play-warning-sound.sample - omarchy/hooks/font-set.d/show-font-notification.sample - omarchy/hooks/post-boot.d/weather.sample - omarchy/hooks/post-update.d/install-voxtype.hook - omarchy/hooks/post-update.d/setup-agent.hook - omarchy/hooks/post-update.d/setup-fingerprint.hook - omarchy/hooks/post-update.d/show-update-notification.sample - omarchy/hooks/pre-refresh-pacman.d/add-custom-repo.sample - omarchy/hooks/theme-set.d/show-theme-notification.sample - omarchy/shell.json - omarchy/shell.toml - omarchy/theme.name - omarchy/themes/azure-glow/README.md - omarchy/themes/azure-glow/alacritty.toml - omarchy/themes/azure-glow/btop.theme - omarchy/themes/azure-glow/hyprland.conf - omarchy/themes/azure-glow/hyprlock.conf - omarchy/themes/azure-glow/icons.theme - … 269 more
99 lines
3.8 KiB
QML
99 lines
3.8 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
|
|
// Standalone harness for the background auto-check logic added to
|
|
// Panel.qml (autoCheckEnabled, autoCheckIntervalHours, and the
|
|
// pendingUpdateCount filter). Panel.qml itself only loads inside the full
|
|
// Omarchy shell (qs.Ui, qs.Commons, the live PluginRegistry), so this copies
|
|
// the pure expressions to exercise them in isolation. Keep the three
|
|
// `readonly property` blocks below byte-for-byte in sync with Panel.qml if
|
|
// that logic changes.
|
|
ShellRoot {
|
|
id: root
|
|
|
|
property var settings: {
|
|
var raw = Quickshell.env("OMAPLUG_TEST_SETTINGS")
|
|
return raw ? JSON.parse(raw) : {}
|
|
}
|
|
|
|
// Mirrors qs.Ui/Panel.qml's setting(name, fallback).
|
|
function setting(name, fallback) {
|
|
var value = settings ? settings[name] : undefined
|
|
return value === undefined || value === null ? fallback : value
|
|
}
|
|
|
|
// Kept byte-identical to Panel.qml by auto-check-test.sh's sync guard;
|
|
// edit both or the build fails.
|
|
// AUTOCHECK-SETTINGS-BEGIN
|
|
readonly property bool autoCheckEnabled: root.setting("autoCheckUpdates", false) === true
|
|
// real, not int: an int property truncates any fractional hours value
|
|
// (e.g. 0.5) towards zero, which would silently turn into a zero-interval
|
|
// Timer below and spin checkUpdates() in a tight loop.
|
|
readonly property real autoCheckIntervalHours: {
|
|
var hours = Number(root.setting("autoCheckIntervalHours", 6))
|
|
return (isFinite(hours) && hours > 0) ? hours : 6
|
|
}
|
|
// AUTOCHECK-SETTINGS-END
|
|
|
|
property var updateStates: JSON.parse(Quickshell.env("OMAPLUG_TEST_UPDATE_STATES") || "{}")
|
|
property var pluginRepos: JSON.parse(Quickshell.env("OMAPLUG_TEST_PLUGIN_REPOS") || "{}")
|
|
|
|
// Kept byte-identical to Panel.qml by auto-check-test.sh's sync guard;
|
|
// edit both or the build fails.
|
|
// PENDING-UPDATE-COUNT-BEGIN
|
|
readonly property int pendingUpdateCount: {
|
|
var n = 0
|
|
for (var k in root.updateStates) {
|
|
if (root.pluginRepos[k] === undefined) continue
|
|
if (root.updateStates[k] === "UPDATE") n++
|
|
}
|
|
n
|
|
}
|
|
// PENDING-UPDATE-COUNT-END
|
|
|
|
Component.onCompleted: {
|
|
console.log("RESOLVED_ENABLED", root.autoCheckEnabled)
|
|
console.log("RESOLVED_HOURS", root.autoCheckIntervalHours)
|
|
console.log("RESOLVED_PENDING", root.pendingUpdateCount)
|
|
}
|
|
|
|
// The property under test: same shape as Panel.qml's autoUpdateCheckTimer.
|
|
// running/interval stay bound to autoCheckEnabled/autoCheckIntervalHours so
|
|
// a live settings change (see toggleTimer below) reaches this Timer the
|
|
// same way persistAutoCheckSetting()'s write to root.settings does in the
|
|
// real Panel.qml - no restart, just the binding re-evaluating.
|
|
Timer {
|
|
interval: root.autoCheckIntervalHours * 3600000
|
|
running: root.autoCheckEnabled
|
|
repeat: true
|
|
triggeredOnStart: true
|
|
onTriggered: console.log("TIMER_FIRED")
|
|
}
|
|
|
|
// Simulates the user flipping the panel's toggle (or picking a new
|
|
// interval) while the shell is already running: OMAPLUG_TEST_TOGGLE_AFTER_MS
|
|
// schedules a one-shot settings mutation partway through the run, proving
|
|
// the Timer above reacts live rather than only at startup.
|
|
property real toggleAfterMs: Number(Quickshell.env("OMAPLUG_TEST_TOGGLE_AFTER_MS") || "0")
|
|
Timer {
|
|
interval: root.toggleAfterMs
|
|
running: root.toggleAfterMs > 0
|
|
onTriggered: {
|
|
var next = {}
|
|
for (var k in root.settings) next[k] = root.settings[k]
|
|
next.autoCheckUpdates = Quickshell.env("OMAPLUG_TEST_TOGGLE_TO") === "true"
|
|
root.settings = next
|
|
console.log("TOGGLED_ENABLED", root.autoCheckEnabled)
|
|
}
|
|
}
|
|
|
|
// Bounds how long the process waits for triggers before exiting; must be
|
|
// well under any interval used above so a firing timer wins the race, and
|
|
// comfortably after toggleAfterMs so the post-toggle behavior is observed.
|
|
Timer {
|
|
interval: 1200
|
|
running: true
|
|
onTriggered: Qt.quit()
|
|
}
|
|
}
|