user preferences
All checks were successful
Deploy / deploy (push) Successful in 36s

This commit is contained in:
2025-12-25 22:50:56 +06:00
parent 22c5fafb11
commit bf38267c37
21 changed files with 359 additions and 102 deletions

View File

@@ -1,13 +1,17 @@
<template>
<div>
<PrimeDivider align="left">
Audio
</PrimeDivider>
<PrimeFloatLabel variant="on">
<PrimeSelect
v-model="inputDeviceId"
:options="audioInputs"
option-label="label"
option-value="deviceId"
fluid
input-id="inputDevice"
fluid
:invalid="!inputDeviceExist"
/>
<label for="inputDevice">Input device</label>
@@ -43,18 +47,41 @@
<!-- <label for="outputDevice">Output device</label> -->
<!-- </PrimeFloatLabel> -->
<template v-if="isTauri">
<PrimeDivider />
<PrimeDivider align="left">
Hotkeys
</PrimeDivider>
<PrimeButton
size="small"
label="Check for Updates"
fluid
severity="info"
:loading="checking"
@click="onCheckForUpdates"
/>
</template>
<PrimeFloatLabel variant="on">
<PrimeInputText id="microphoneToggle" :model-value="toggleInputHotkey" fluid @keydown="setupToggleInputHotkey" />
<label for="microphoneToggle">Toggle microphone</label>
</PrimeFloatLabel>
<PrimeFloatLabel variant="on" class="mt-3">
<PrimeInputText id="soundToggle" :model-value="toggleOutputHotkey" fluid @keydown="setupToggleOutputHotkey" />
<label for="soundToggle">Toggle sound</label>
</PrimeFloatLabel>
<PrimeDivider align="left">
About
</PrimeDivider>
<p v-if="version" class="text-muted-color text-sm">
VERSION: {{ version }}
</p>
<p class="text-muted-color text-sm mt-2">
COMMIT_SHA: {{ commitSha }}
</p>
<PrimeButton
v-if="isTauri"
class="mt-3"
size="small"
label="Check for Updates"
fluid
severity="info"
:loading="checking"
@click="onCheckForUpdates"
/>
</div>
<PrimeToast position="bottom-center" group="updater">
@@ -73,10 +100,12 @@
</template>
<script setup lang="ts">
import type { RemovableRef } from '@vueuse/core'
definePageMeta({
name: 'Preferences',
})
const { isTauri } = useApp()
const { isTauri, version, commitSha } = useApp()
const { checking, checkForUpdates } = useUpdater()
const {
inputDeviceId,
@@ -84,6 +113,8 @@ const {
autoGainControl,
noiseSuppression,
echoCancellation,
toggleInputHotkey,
toggleOutputHotkey,
inputDeviceExist,
outputDeviceExist,
audioInputs,
@@ -92,6 +123,46 @@ const {
const toast = useToast()
const setupToggleInputHotkey = (event: KeyboardEvent) => setupHotkey(event, toggleInputHotkey)
const setupToggleOutputHotkey = (event: KeyboardEvent) => setupHotkey(event, toggleOutputHotkey)
function setupHotkey(event: KeyboardEvent, model: RemovableRef<string>) {
if (event.key === 'Tab' || event.key === 'Enter') {
return
}
event.preventDefault()
const hotkey = []
if (event.ctrlKey || event.metaKey)
hotkey.push('CommandOrControl')
if (event.altKey)
hotkey.push('Alt')
if (event.shiftKey)
hotkey.push('Shift')
const modifierApplied = hotkey.length > 0
if (!modifierApplied && ['Escape', 'Backspace', 'Delete'].includes(event.key)) {
model.value = ''
return
}
if (!['Control', 'Shift', 'Alt'].includes(event.key)) {
hotkey.push(event.key.toUpperCase())
}
if (modifierApplied && hotkey.length === 1) {
model.value = ''
return
}
model.value = hotkey.join('+')
}
async function onCheckForUpdates() {
const update = await checkForUpdates()