archy/neode-ui/src/stores/screensaver.ts

50 lines
1.2 KiB
TypeScript
Raw Normal View History

import { defineStore } from 'pinia'
2026-04-11 13:35:52 +01:00
import { ref, computed } from 'vue'
const INACTIVITY_MS = 3 * 60 * 1000 // 3 minutes
export const useScreensaverStore = defineStore('screensaver', () => {
const isActive = ref(false)
2026-04-11 13:35:52 +01:00
const activationCount = ref(0)
let inactivityTimer: ReturnType<typeof setTimeout> | null = null
2026-04-11 13:35:52 +01:00
/** True when the current activation is the ASCII variant (every 3rd time) */
const isAsciiMode = computed(() => activationCount.value > 0 && activationCount.value % 3 === 0)
function activate() {
2026-04-11 13:35:52 +01:00
activationCount.value++
isActive.value = true
clearInactivityTimer()
}
function deactivate() {
isActive.value = false
resetInactivityTimer()
}
function resetInactivityTimer() {
clearInactivityTimer()
inactivityTimer = setTimeout(() => {
inactivityTimer = null
isActive.value = true
}, INACTIVITY_MS)
}
function clearInactivityTimer() {
if (inactivityTimer) {
clearTimeout(inactivityTimer)
inactivityTimer = null
}
}
return {
isActive,
2026-04-11 13:35:52 +01:00
isAsciiMode,
activationCount,
activate,
deactivate,
resetInactivityTimer,
clearInactivityTimer,
}
})