aboutsummaryrefslogtreecommitdiff
path: root/linux/home/.config/ags/service/powermenu.ts
blob: fd16bc1c47c766b29988e1c9924c9d1fdb4cd1ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import options from "options"

const { sleep, reboot, logout, shutdown } = options.powermenu

export type Action = "sleep" | "reboot" | "logout" | "shutdown"

class PowerMenu extends Service {
    static {
        Service.register(this, {}, {
            "title": ["string"],
            "cmd": ["string"],
        })
    }

    #title = ""
    #cmd = ""

    get title() { return this.#title }
    get cmd() { return this.#cmd }

    action(action: Action) {
        [this.#cmd, this.#title] = {
            sleep: [sleep.value, "Sleep"],
            reboot: [reboot.value, "Reboot"],
            logout: [logout.value, "Log Out"],
            shutdown: [shutdown.value, "Shutdown"],
        }[action]

        this.notify("cmd")
        this.notify("title")
        this.emit("changed")
        App.closeWindow("powermenu")
        App.openWindow("verification")
    }

    readonly shutdown = () => {
        this.action("shutdown")
    }
}

const powermenu = new PowerMenu
Object.assign(globalThis, { powermenu })
export default powermenu