-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathapp.vue
94 lines (76 loc) · 2.15 KB
/
app.vue
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<template>
<Titlebar />
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>
<script lang="ts" setup>
import {
register,
unregister,
isRegistered,
} from "@tauri-apps/plugin-global-shortcut";
import initializeSettings from "~/plugins/settings";
import { invoke } from "@tauri-apps/api/core";
const { $player, $settings } = useNuxtApp();
onMounted(async () => {
await initializeSettings(useNuxtApp());
document.addEventListener("keydown", handleKeyDown);
document.addEventListener("focusin", updateFocus);
document.addEventListener("focusout", updateFocus);
if (await isRegistered("MediaPlayPause")) {
await unregister("MediaPlayPause");
}
await register("MediaPlayPause", (event) => {
if (event.state === "Pressed") {
$player.playPause();
}
});
if (await isRegistered("MediaTrackNext")) {
await unregister("MediaTrackNext");
}
await register("MediaTrackNext", (event) => {
if (event.state === "Pressed") {
$player.skip();
}
});
if (await isRegistered("MediaTrackPrevious")) {
await unregister("MediaTrackPrevious");
}
await register("MediaTrackPrevious", (event) => {
if (event.state === "Pressed") {
$player.rewind();
}
});
});
onUnmounted(async () => {
document.removeEventListener("keydown", handleKeyDown);
document.removeEventListener("focusin", updateFocus);
document.removeEventListener("focusout", updateFocus);
if (await isRegistered("MediaPlayPause")) {
await unregister("MediaPlayPause");
}
if (await isRegistered("MediaTrackNext")) {
await unregister("MediaTrackNext");
}
if (await isRegistered("MediaTrackPrevious")) {
await unregister("MediaTrackPrevious");
}
});
const isTextInputFocused = ref(false);
function handleKeyDown(event: KeyboardEvent) {
if (event.code === "Space" && !isTextInputFocused.value) {
$player.playPause();
event.preventDefault();
}
}
function updateFocus() {
const activeElement = document.activeElement;
isTextInputFocused.value =
activeElement instanceof HTMLInputElement ||
activeElement instanceof HTMLTextAreaElement;
}
</script>
<style lang="scss">
@use "~/assets/styles/global";
</style>