From a286fe5143f6dc9d69c2d4a3bd11bde444161ba8 Mon Sep 17 00:00:00 2001 From: Jackson <54308792+jacksongoode@users.noreply.github.com> Date: Fri, 17 Oct 2025 01:08:27 +0900 Subject: [PATCH] Add custom sound and control notif volume (#214) * Add custom sound and control notif volume * Modularize the picker and slider, consolidate the playback and loading * Move custom sounds to advanced * pairs of audio * custom sound handling --------- Co-authored-by: CJ Pais --- .../{rec_start.wav => marimba_start.wav} | Bin .../{rec_stop.wav => marimba_stop.wav} | Bin src-tauri/resources/pop_start.wav | Bin 0 -> 391758 bytes src-tauri/resources/pop_stop.wav | Bin 0 -> 391758 bytes src-tauri/src/actions.rs | 8 +- src-tauri/src/audio_feedback.rs | 76 ++++--- src-tauri/src/commands/audio.rs | 37 ++++ src-tauri/src/lib.rs | 4 + src-tauri/src/settings.rs | 40 ++++ src-tauri/src/shortcut.rs | 27 ++- src/components/settings/AudioFeedback.tsx | 33 +-- src/components/settings/DebugSettings.tsx | 5 + src/components/settings/GeneralSettings.tsx | 2 + src/components/settings/HistorySettings.tsx | 10 +- src/components/settings/SoundPicker.tsx | 67 ++++++ src/components/settings/VolumeSlider.tsx | 28 +++ src/components/ui/Dropdown.tsx | 4 +- src/components/ui/Slider.tsx | 5 +- src/lib/types.ts | 5 + src/stores/settingsStore.ts | 192 +++++++++--------- 20 files changed, 394 insertions(+), 149 deletions(-) rename src-tauri/resources/{rec_start.wav => marimba_start.wav} (100%) rename src-tauri/resources/{rec_stop.wav => marimba_stop.wav} (100%) create mode 100644 src-tauri/resources/pop_start.wav create mode 100644 src-tauri/resources/pop_stop.wav create mode 100644 src/components/settings/SoundPicker.tsx create mode 100644 src/components/settings/VolumeSlider.tsx diff --git a/src-tauri/resources/rec_start.wav b/src-tauri/resources/marimba_start.wav similarity index 100% rename from src-tauri/resources/rec_start.wav rename to src-tauri/resources/marimba_start.wav diff --git a/src-tauri/resources/rec_stop.wav b/src-tauri/resources/marimba_stop.wav similarity index 100% rename from src-tauri/resources/rec_stop.wav rename to src-tauri/resources/marimba_stop.wav diff --git a/src-tauri/resources/pop_start.wav b/src-tauri/resources/pop_start.wav new file mode 100644 index 0000000000000000000000000000000000000000..fe23de930d95024879d0a4a95590fee1b77da33b GIT binary patch literal 391758 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 zMr7k5Fa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J z2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U341pmq1cty67y?6J l2n>NCFa(Cc5EueOUAut4nzz`S$LtqFDfnR~Z{{iBaiEID> literal 0 HcmV?d00001 diff --git a/src-tauri/resources/pop_stop.wav b/src-tauri/resources/pop_stop.wav new file mode 100644 index 0000000000000000000000000000000000000000..04024adfdd7b50f84e5b516d73ee3c7f9bb887a6 GIT binary patch literal 391758 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 t6UH+F7pqnJi9Tcfr{En)A~ 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

-^8SrnPhsj_c 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 path.to_path_buf(), Err(e) => { eprintln!( @@ -35,38 +29,67 @@ pub fn play_sound(app: &AppHandle, resource_path: &str) { } }; - // Get the selected output device from settings let settings = settings::get_settings(&app_handle); let selected_device = settings.selected_output_device.clone(); - // Try to play the audio file - if let Err(e) = play_audio_file(&audio_path, selected_device) { + if let Err(e) = play_audio_file(&audio_path, selected_device, volume) { eprintln!("Failed to play sound '{}': {}", resource_path, e); } }); } -/// Convenience function to play the recording start sound -pub fn play_recording_start_sound(app: &AppHandle) { - play_sound(app, "resources/rec_start.wav"); +fn get_sound_path(app: &AppHandle, sound_type: SoundType) -> String { + let settings = settings::get_settings(app); + match sound_type { + SoundType::Start => match settings.sound_theme { + crate::settings::SoundTheme::Custom => "custom_start.wav".to_string(), + _ => settings.sound_theme.to_start_path(), + }, + SoundType::Stop => match settings.sound_theme { + crate::settings::SoundTheme::Custom => "custom_stop.wav".to_string(), + _ => settings.sound_theme.to_stop_path(), + }, + } } -/// Convenience function to play the recording stop sound -pub fn play_recording_stop_sound(app: &AppHandle) { - play_sound(app, "resources/rec_stop.wav"); +pub fn play_feedback_sound(app: &AppHandle, sound_type: SoundType) { + // Only play if audio feedback is enabled + let settings = settings::get_settings(app); + if !settings.audio_feedback { + return; + } + + let sound_file = get_sound_path(app, sound_type); + let base_dir = if settings.sound_theme == crate::settings::SoundTheme::Custom { + tauri::path::BaseDirectory::AppData + } else { + tauri::path::BaseDirectory::Resource + }; + play_sound(app, &sound_file, base_dir); +} + +pub fn play_test_sound(app: &AppHandle, sound_type: SoundType) { + // Always play test sound, regardless of audio_feedback setting + let settings = settings::get_settings(app); + let sound_file = get_sound_path(app, sound_type); + let base_dir = if settings.sound_theme == crate::settings::SoundTheme::Custom { + tauri::path::BaseDirectory::AppData + } else { + tauri::path::BaseDirectory::Resource + }; + play_sound(app, &sound_file, base_dir); } fn play_audio_file( path: &std::path::Path, selected_device: Option, + volume: f32, ) -> Result<(), Box> { let stream_builder = if let Some(device_name) = selected_device { if device_name == "Default" { println!("Using default device"); - // Use default device OutputStreamBuilder::from_default_device()? } else { - // Try to find the device by name let host = crate::audio_toolkit::get_cpal_host(); let devices = host.output_devices()?; @@ -88,18 +111,17 @@ fn play_audio_file( } } else { println!("Using default device"); - // Use default device OutputStreamBuilder::from_default_device()? }; let stream_handle = stream_builder.open_stream()?; let mixer = stream_handle.mixer(); - // Load the audio file let file = File::open(path)?; let buf_reader = BufReader::new(file); let sink = rodio::play(mixer, buf_reader)?; + sink.set_volume(volume); sink.sleep_until_end(); Ok(()) diff --git a/src-tauri/src/commands/audio.rs b/src-tauri/src/commands/audio.rs index 00d6cc3..d39cc54 100644 --- a/src-tauri/src/commands/audio.rs +++ b/src-tauri/src/commands/audio.rs @@ -1,3 +1,4 @@ +use crate::audio_feedback; use crate::audio_toolkit::audio::{list_input_devices, list_output_devices}; use crate::managers::audio::{AudioRecordingManager, MicrophoneMode}; use crate::settings::{get_settings, write_settings}; @@ -5,6 +6,29 @@ use serde::{Deserialize, Serialize}; use std::sync::Arc; use tauri::{AppHandle, Manager}; +#[derive(Serialize)] +pub struct CustomSounds { + start: bool, + stop: bool, +} + +fn custom_sound_exists(app: &AppHandle, sound_type: &str) -> bool { + app.path() + .resolve( + format!("custom_{}.wav", sound_type), + tauri::path::BaseDirectory::AppData, + ) + .map_or(false, |path| path.exists()) +} + +#[tauri::command] +pub fn check_custom_sounds(app: AppHandle) -> CustomSounds { + CustomSounds { + start: custom_sound_exists(&app, "start"), + stop: custom_sound_exists(&app, "stop"), + } +} + #[derive(Serialize, Deserialize, Debug, Clone)] pub struct AudioDevice { pub index: String, @@ -122,3 +146,16 @@ pub fn get_selected_output_device(app: AppHandle) -> Result { .selected_output_device .unwrap_or_else(|| "default".to_string())) } + +#[tauri::command] +pub fn play_test_sound(app: AppHandle, sound_type: String) { + let sound = match sound_type.as_str() { + "start" => audio_feedback::SoundType::Start, + "stop" => audio_feedback::SoundType::Stop, + _ => { + eprintln!("Unknown sound type: {}", sound_type); + return; + } + }; + audio_feedback::play_test_sound(&app, sound); +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 441782d..634a4cc 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -211,6 +211,8 @@ pub fn run() { shortcut::reset_binding, shortcut::change_ptt_setting, shortcut::change_audio_feedback_setting, + shortcut::change_audio_feedback_volume_setting, + shortcut::change_sound_theme_setting, shortcut::change_start_hidden_setting, shortcut::change_autostart_setting, shortcut::change_translate_to_english_setting, @@ -245,6 +247,8 @@ pub fn run() { commands::audio::get_available_output_devices, commands::audio::set_selected_output_device, commands::audio::get_selected_output_device, + commands::audio::play_test_sound, + commands::audio::check_custom_sounds, commands::transcription::set_model_unload_timeout, commands::transcription::get_model_load_status, commands::transcription::unload_model_manually, diff --git a/src-tauri/src/settings.rs b/src-tauri/src/settings.rs index 1bc1760..b7a4c88 100644 --- a/src-tauri/src/settings.rs +++ b/src-tauri/src/settings.rs @@ -80,12 +80,42 @@ impl ModelUnloadTimeout { } } +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum SoundTheme { + Marimba, + Pop, + Custom, +} + +impl SoundTheme { + fn as_str(&self) -> &'static str { + match self { + SoundTheme::Marimba => "marimba", + SoundTheme::Pop => "pop", + SoundTheme::Custom => "custom", + } + } + + pub fn to_start_path(&self) -> String { + format!("resources/{}_start.wav", self.as_str()) + } + + pub fn to_stop_path(&self) -> String { + format!("resources/{}_stop.wav", self.as_str()) + } +} + /* still handy for composing the initial JSON in the store ------------- */ #[derive(Serialize, Deserialize, Debug, Clone)] pub struct AppSettings { pub bindings: HashMap, pub push_to_talk: bool, pub audio_feedback: bool, + #[serde(default = "default_audio_feedback_volume")] + pub audio_feedback_volume: f32, + #[serde(default = "default_sound_theme")] + pub sound_theme: SoundTheme, #[serde(default = "default_start_hidden")] pub start_hidden: bool, #[serde(default = "default_autostart_enabled")] @@ -161,6 +191,14 @@ fn default_history_limit() -> usize { 5 } +fn default_audio_feedback_volume() -> f32 { + 1.0 +} + +fn default_sound_theme() -> SoundTheme { + SoundTheme::Marimba +} + pub const SETTINGS_STORE_PATH: &str = "settings_store.json"; pub fn get_default_settings() -> AppSettings { @@ -189,6 +227,8 @@ pub fn get_default_settings() -> AppSettings { bindings, push_to_talk: true, audio_feedback: false, + audio_feedback_volume: default_audio_feedback_volume(), + sound_theme: default_sound_theme(), start_hidden: default_start_hidden(), autostart_enabled: default_autostart_enabled(), selected_model: "".to_string(), diff --git a/src-tauri/src/shortcut.rs b/src-tauri/src/shortcut.rs index 8b84ba8..a5ce7d3 100644 --- a/src-tauri/src/shortcut.rs +++ b/src-tauri/src/shortcut.rs @@ -6,7 +6,7 @@ use tauri_plugin_global_shortcut::{Shortcut, ShortcutState}; use crate::actions::ACTION_MAP; use crate::settings::ShortcutBinding; -use crate::settings::{self, get_settings, OverlayPosition, PasteMethod}; +use crate::settings::{self, get_settings, OverlayPosition, PasteMethod, SoundTheme}; use crate::ManagedToggleState; pub fn init_shortcuts(app: &App) { @@ -119,6 +119,31 @@ pub fn change_audio_feedback_setting(app: AppHandle, enabled: bool) -> Result<() Ok(()) } +#[tauri::command] +pub fn change_audio_feedback_volume_setting(app: AppHandle, volume: f32) -> Result<(), String> { + let mut settings = settings::get_settings(&app); + settings.audio_feedback_volume = volume; + settings::write_settings(&app, settings); + Ok(()) +} + +#[tauri::command] +pub fn change_sound_theme_setting(app: AppHandle, theme: String) -> Result<(), String> { + let mut settings = settings::get_settings(&app); + let parsed = match theme.as_str() { + "marimba" => SoundTheme::Marimba, + "pop" => SoundTheme::Pop, + "custom" => SoundTheme::Custom, + other => { + eprintln!("Invalid sound theme '{}', defaulting to marimba", other); + SoundTheme::Marimba + } + }; + settings.sound_theme = parsed; + settings::write_settings(&app, settings); + Ok(()) +} + #[tauri::command] pub fn change_translate_to_english_setting(app: AppHandle, enabled: bool) -> Result<(), String> { let mut settings = settings::get_settings(&app); diff --git a/src/components/settings/AudioFeedback.tsx b/src/components/settings/AudioFeedback.tsx index 7aeb53d..3889aa9 100644 --- a/src/components/settings/AudioFeedback.tsx +++ b/src/components/settings/AudioFeedback.tsx @@ -1,30 +1,31 @@ import React from "react"; import { ToggleSwitch } from "../ui/ToggleSwitch"; import { useSettings } from "../../hooks/useSettings"; +import { VolumeSlider } from "./VolumeSlider"; +import { SoundPicker } from "./SoundPicker"; interface AudioFeedbackProps { descriptionMode?: "inline" | "tooltip"; grouped?: boolean; } -export const AudioFeedback: React.FC = React.memo(({ - descriptionMode = "tooltip", - grouped = false, -}) => { - const { getSetting, updateSetting, isUpdating } = useSettings(); - - const audioFeedbackEnabled = getSetting("audio_feedback") || false; +export const AudioFeedback: React.FC = React.memo( + ({ descriptionMode = "tooltip", grouped = false }) => { + const { getSetting, updateSetting, isUpdating } = useSettings(); + const audioFeedbackEnabled = getSetting("audio_feedback") || false; return ( - updateSetting("audio_feedback", enabled)} - isUpdating={isUpdating("audio_feedback")} - label="Audio Feedback" - description="Play sound when recording starts and stops" - descriptionMode={descriptionMode} - grouped={grouped} - /> +

+ updateSetting("audio_feedback", enabled)} + isUpdating={isUpdating("audio_feedback")} + label="Audio Feedback" + description="Play sound when recording starts and stops" + descriptionMode={descriptionMode} + grouped={grouped} + /> +
); }, ); diff --git a/src/components/settings/DebugSettings.tsx b/src/components/settings/DebugSettings.tsx index ee73608..fc1ca27 100644 --- a/src/components/settings/DebugSettings.tsx +++ b/src/components/settings/DebugSettings.tsx @@ -5,12 +5,17 @@ import { SettingsGroup } from "../ui/SettingsGroup"; import { HistoryLimit } from "./HistoryLimit"; import { PasteMethodSetting } from "./PasteMethod"; import { AlwaysOnMicrophone } from "./AlwaysOnMicrophone"; +import { SoundPicker } from "./SoundPicker"; export const DebugSettings: React.FC = () => { return (
+ diff --git a/src/components/settings/GeneralSettings.tsx b/src/components/settings/GeneralSettings.tsx index 5ff6af6..4f9d7a1 100644 --- a/src/components/settings/GeneralSettings.tsx +++ b/src/components/settings/GeneralSettings.tsx @@ -7,6 +7,7 @@ import { OutputDeviceSelector } from "./OutputDeviceSelector"; import { PushToTalk } from "./PushToTalk"; import { AudioFeedback } from "./AudioFeedback"; import { useSettings } from "../../hooks/useSettings"; +import { VolumeSlider } from "./VolumeSlider"; export const GeneralSettings: React.FC = () => { const { audioFeedbackEnabled } = useSettings(); @@ -25,6 +26,7 @@ export const GeneralSettings: React.FC = () => { grouped={true} disabled={!audioFeedbackEnabled} /> +
); diff --git a/src/components/settings/HistorySettings.tsx b/src/components/settings/HistorySettings.tsx index b78aec3..b6d5014 100644 --- a/src/components/settings/HistorySettings.tsx +++ b/src/components/settings/HistorySettings.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect, useCallback } from "react"; import { SettingsGroup } from "../ui/SettingsGroup"; import { AudioPlayer } from "../ui/AudioPlayer"; -import { ClipboardCopy, Star, Check, Trash2, Loader2 } from "lucide-react"; +import { Copy, Star, Check, Trash2 } from "lucide-react"; import { convertFileSrc, invoke } from "@tauri-apps/api/core"; import { listen } from "@tauri-apps/api/event"; @@ -86,12 +86,12 @@ export const HistorySettings: React.FC = () => { const deleteAudioEntry = async (id: number) => { try { - await invoke("delete_history_entry", {id}); + await invoke("delete_history_entry", { id }); } catch (error) { console.error("Failed to delete audio entry:", error); throw error; } - } + }; if (loading) { return ( @@ -189,7 +189,7 @@ const HistoryEntryComponent: React.FC = ({ {showCopied ? ( ) : ( - + )} diff --git a/src/components/settings/SoundPicker.tsx b/src/components/settings/SoundPicker.tsx new file mode 100644 index 0000000..629f737 --- /dev/null +++ b/src/components/settings/SoundPicker.tsx @@ -0,0 +1,67 @@ +import React from "react"; +import { Button } from "../ui/Button"; +import { Dropdown, DropdownOption } from "../ui/Dropdown"; +import { PlayIcon } from "lucide-react"; +import { SettingContainer } from "../ui/SettingContainer"; +import { useSettingsStore } from "../../stores/settingsStore"; +import { useSettings } from "../../hooks/useSettings"; + +interface SoundPickerProps { + label: string; + description: string; +} + +export const SoundPicker: React.FC = ({ + label, + description, +}) => { + const { getSetting, updateSetting } = useSettings(); + const playTestSound = useSettingsStore((state) => state.playTestSound); + const customSounds = useSettingsStore((state) => state.customSounds); + + const selectedTheme = getSetting("sound_theme") ?? "marimba"; + + const options: DropdownOption[] = [ + { value: "marimba", label: "Marimba" }, + { value: "pop", label: "Pop" }, + ]; + + // Only add Custom option if both custom sound files exist + if (customSounds.start && customSounds.stop) { + options.push({ value: "custom", label: "Custom" }); + } + + const handlePlayBothSounds = async () => { + await playTestSound("start"); + // Wait before playing stop sound + await new Promise((resolve) => setTimeout(resolve, 800)); + await playTestSound("stop"); + }; + + return ( + +
+ + updateSetting("sound_theme", value as "marimba" | "pop" | "custom") + } + options={options} + /> + +
+
+ ); +}; diff --git a/src/components/settings/VolumeSlider.tsx b/src/components/settings/VolumeSlider.tsx new file mode 100644 index 0000000..7a2cd3e --- /dev/null +++ b/src/components/settings/VolumeSlider.tsx @@ -0,0 +1,28 @@ +import React from "react"; +import { Slider } from "../ui/Slider"; +import { useSettings } from "../../hooks/useSettings"; + +export const VolumeSlider: React.FC<{ disabled?: boolean }> = ({ + disabled = false, +}) => { + const { getSetting, updateSetting } = useSettings(); + const audioFeedbackVolume = getSetting("audio_feedback_volume") ?? 0.5; + + return ( + + updateSetting("audio_feedback_volume", value) + } + min={0} + max={1} + step={0.1} + label="Volume" + description="Adjust the volume of audio feedback sounds" + descriptionMode="tooltip" + grouped + formatValue={(value) => `${Math.round(value * 100)}%`} + disabled={disabled} + /> + ); +}; diff --git a/src/components/ui/Dropdown.tsx b/src/components/ui/Dropdown.tsx index 8e1cf5c..724861f 100644 --- a/src/components/ui/Dropdown.tsx +++ b/src/components/ui/Dropdown.tsx @@ -3,6 +3,7 @@ import React, { useEffect, useRef, useState } from "react"; export interface DropdownOption { value: string; label: string; + disabled?: boolean; } interface DropdownProps { @@ -97,8 +98,9 @@ export const Dropdown: React.FC = ({ selectedValue === option.value ? "bg-logo-primary/20 font-semibold" : "" - }`} + } ${option.disabled ? "opacity-50 cursor-not-allowed" : ""}`} onClick={() => handleSelect(option.value)} + disabled={option.disabled} > {option.label} diff --git a/src/components/ui/Slider.tsx b/src/components/ui/Slider.tsx index 005bd18..2aabb81 100644 --- a/src/components/ui/Slider.tsx +++ b/src/components/ui/Slider.tsx @@ -41,6 +41,7 @@ export const Slider: React.FC = ({ descriptionMode={descriptionMode} grouped={grouped} layout="horizontal" + disabled={disabled} >
@@ -54,11 +55,11 @@ export const Slider: React.FC = ({ disabled={disabled} className="flex-grow h-2 rounded-lg appearance-none cursor-pointer focus:outline-none focus:ring-2 focus:ring-logo-primary disabled:opacity-50 disabled:cursor-not-allowed" style={{ - background: `linear-gradient(to right, #FAA2CA 0%, #FAA2CA ${ + background: `linear-gradient(to right, var(--color-background-ui) ${ ((value - min) / (max - min)) * 100 }%, rgba(128, 128, 128, 0.2) ${ ((value - min) / (max - min)) * 100 - }%, rgba(128, 128, 128, 0.2) 100%)`, + }%)`, }} /> {showValue && ( diff --git a/src/lib/types.ts b/src/lib/types.ts index 70a4424..52740ab 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -41,6 +41,11 @@ export const SettingsSchema = z.object({ bindings: ShortcutBindingsMapSchema, push_to_talk: z.boolean(), audio_feedback: z.boolean(), + audio_feedback_volume: z.number().optional().default(1.0), + sound_theme: z + .enum(["marimba", "pop", "custom"]) + .optional() + .default("marimba"), start_hidden: z.boolean().optional().default(false), autostart_enabled: z.boolean().optional().default(false), selected_model: z.string(), diff --git a/src/stores/settingsStore.ts b/src/stores/settingsStore.ts index 1e35265..86bc00c 100644 --- a/src/stores/settingsStore.ts +++ b/src/stores/settingsStore.ts @@ -9,6 +9,7 @@ interface SettingsStore { isUpdating: Record; audioDevices: AudioDevice[]; outputDevices: AudioDevice[]; + customSounds: { start: boolean; stop: boolean }; // Actions initialize: () => Promise; @@ -24,6 +25,8 @@ interface SettingsStore { resetBinding: (id: string) => Promise; getSetting: (key: K) => Settings[K] | undefined; isUpdatingKey: (key: string) => boolean; + playTestSound: (soundType: "start" | "stop") => Promise; + checkCustomSounds: () => Promise; // Internal state setters setSettings: (settings: Settings | null) => void; @@ -31,11 +34,14 @@ interface SettingsStore { setUpdating: (key: string, updating: boolean) => void; setAudioDevices: (devices: AudioDevice[]) => void; setOutputDevices: (devices: AudioDevice[]) => void; + setCustomSounds: (sounds: { start: boolean; stop: boolean }) => void; } const DEFAULT_SETTINGS: Partial = { always_on_microphone: false, audio_feedback: true, + audio_feedback_volume: 1.0, + sound_theme: "marimba", start_hidden: false, autostart_enabled: false, push_to_talk: false, @@ -55,6 +61,46 @@ const DEFAULT_AUDIO_DEVICE: AudioDevice = { is_default: true, }; +const settingUpdaters: { + [K in keyof Settings]?: (value: Settings[K]) => Promise; +} = { + always_on_microphone: (value) => + invoke("update_microphone_mode", { alwaysOn: value }), + audio_feedback: (value) => + invoke("change_audio_feedback_setting", { enabled: value }), + audio_feedback_volume: (value) => + invoke("change_audio_feedback_volume_setting", { volume: value }), + sound_theme: (value) => + invoke("change_sound_theme_setting", { theme: value }), + start_hidden: (value) => + invoke("change_start_hidden_setting", { enabled: value }), + autostart_enabled: (value) => + invoke("change_autostart_setting", { enabled: value }), + push_to_talk: (value) => invoke("change_ptt_setting", { enabled: value }), + selected_microphone: (value) => + invoke("set_selected_microphone", { + deviceName: value === "Default" ? "default" : value, + }), + selected_output_device: (value) => + invoke("set_selected_output_device", { + deviceName: value === "Default" ? "default" : value, + }), + translate_to_english: (value) => + invoke("change_translate_to_english_setting", { enabled: value }), + selected_language: (value) => + invoke("change_selected_language_setting", { language: value }), + overlay_position: (value) => + invoke("change_overlay_position_setting", { position: value }), + debug_mode: (value) => + invoke("change_debug_mode_setting", { enabled: value }), + custom_words: (value) => invoke("update_custom_words", { words: value }), + word_correction_threshold: (value) => + invoke("change_word_correction_threshold_setting", { threshold: value }), + paste_method: (value) => + invoke("change_paste_method_setting", { method: value }), + history_limit: (value) => invoke("update_history_limit", { limit: value }), +}; + export const useSettingsStore = create()( subscribeWithSelector((set, get) => ({ settings: null, @@ -62,6 +108,7 @@ export const useSettingsStore = create()( isUpdating: {}, audioDevices: [], outputDevices: [], + customSounds: { start: false, stop: false }, // Internal setters setSettings: (settings) => set({ settings }), @@ -72,6 +119,7 @@ export const useSettingsStore = create()( })), setAudioDevices: (audioDevices) => set({ audioDevices }), setOutputDevices: (outputDevices) => set({ outputDevices }), + setCustomSounds: (customSounds) => set({ customSounds }), // Getters getSetting: (key) => get().settings?.[key], @@ -154,99 +202,52 @@ export const useSettingsStore = create()( } }, + // Play a test sound + playTestSound: async (soundType: "start" | "stop") => { + try { + await invoke("play_test_sound", { soundType }); + } catch (error) { + console.error(`Failed to play test sound (${soundType}):`, error); + } + }, + + + checkCustomSounds: async () => { + try { + const sounds = await invoke("check_custom_sounds"); + get().setCustomSounds(sounds as { start: boolean; stop: boolean }); + } catch (error) { + console.error("Failed to check custom sounds:", error); + } + }, + // Update a specific setting updateSetting: async ( key: K, value: Settings[K], ) => { - const { settings, setUpdating, refreshSettings } = get(); + const { settings, setUpdating } = get(); const updateKey = String(key); const originalValue = settings?.[key]; setUpdating(updateKey, true); try { - // Optimistic update set((state) => ({ settings: state.settings ? { ...state.settings, [key]: value } : null, })); - // Invoke the appropriate backend method - switch (key) { - case "always_on_microphone": - await invoke("update_microphone_mode", { alwaysOn: value }); - break; - case "audio_feedback": - await invoke("change_audio_feedback_setting", { enabled: value }); - break; - case "start_hidden": - await invoke("change_start_hidden_setting", { enabled: value }); - break; - case "autostart_enabled": - await invoke("change_autostart_setting", { enabled: value }); - break; - case "push_to_talk": - await invoke("change_ptt_setting", { enabled: value }); - break; - case "selected_microphone": - const micDeviceName = value === "Default" ? "default" : value; - await invoke("set_selected_microphone", { - deviceName: micDeviceName, - }); - break; - case "selected_output_device": - const outputDeviceName = value === "Default" ? "default" : value; - await invoke("set_selected_output_device", { - deviceName: outputDeviceName, - }); - break; - case "translate_to_english": - await invoke("change_translate_to_english_setting", { - enabled: value, - }); - break; - case "selected_language": - await invoke("change_selected_language_setting", { - language: value, - }); - break; - case "overlay_position": - await invoke("change_overlay_position_setting", { - position: value, - }); - break; - case "debug_mode": - await invoke("change_debug_mode_setting", { enabled: value }); - break; - case "custom_words": - await invoke("update_custom_words", { words: value }); - break; - case "word_correction_threshold": - await invoke("change_word_correction_threshold_setting", { - threshold: value, - }); - break; - case "paste_method": - await invoke("change_paste_method_setting", { method: value }); - break; - case "history_limit": - await invoke("update_history_limit", { limit: value }); - break; - case "bindings": - case "selected_model": - break; - default: - console.warn(`No handler for setting: ${String(key)}`); + const updater = settingUpdaters[key]; + if (updater) { + await updater(value); + } else if (key !== "bindings" && key !== "selected_model") { + console.warn(`No handler for setting: ${String(key)}`); } } catch (error) { console.error(`Failed to update setting ${String(key)}:`, error); - - // Rollback on error - set((state) => ({ - settings: state.settings - ? { ...state.settings, [key]: originalValue } - : null, - })); + if (settings) { + set({ settings: { ...settings, [key]: originalValue } }); + } } finally { setUpdating(updateKey, false); } @@ -273,15 +274,15 @@ export const useSettingsStore = create()( set((state) => ({ settings: state.settings ? { - ...state.settings, - bindings: { - ...state.settings.bindings, - [id]: { - ...state.settings.bindings[id], - current_binding: binding, + ...state.settings, + bindings: { + ...state.settings.bindings, + [id]: { + ...state.settings.bindings[id], + current_binding: binding, + }, }, - }, - } + } : null, })); @@ -294,15 +295,15 @@ export const useSettingsStore = create()( set((state) => ({ settings: state.settings ? { - ...state.settings, - bindings: { - ...state.settings.bindings, - [id]: { - ...state.settings.bindings[id], - current_binding: originalBinding, + ...state.settings, + bindings: { + ...state.settings.bindings, + [id]: { + ...state.settings.bindings[id], + current_binding: originalBinding, + }, }, - }, - } + } : null, })); } @@ -330,12 +331,17 @@ export const useSettingsStore = create()( // Initialize everything initialize: async () => { - const { refreshSettings, refreshAudioDevices, refreshOutputDevices } = - get(); + const { + refreshSettings, + refreshAudioDevices, + refreshOutputDevices, + checkCustomSounds, + } = get(); await Promise.all([ refreshSettings(), refreshAudioDevices(), refreshOutputDevices(), + checkCustomSounds(), ]); }, })),