This commit is contained in:
CJ Pais 2025-11-17 10:41:31 +07:00
parent 3b3ed5abc5
commit 315c32eab4
7 changed files with 35 additions and 23 deletions

View file

@ -73,7 +73,7 @@ pub async fn update_recording_retention_period(
period: String, period: String,
) -> Result<(), String> { ) -> Result<(), String> {
use crate::settings::RecordingRetentionPeriod; use crate::settings::RecordingRetentionPeriod;
let retention_period = match period.as_str() { let retention_period = match period.as_str() {
"never" => RecordingRetentionPeriod::Never, "never" => RecordingRetentionPeriod::Never,
"preserve_limit" => RecordingRetentionPeriod::PreserveLimit, "preserve_limit" => RecordingRetentionPeriod::PreserveLimit,

View file

@ -28,13 +28,13 @@ pub fn open_recordings_folder(app: AppHandle) -> Result<(), String> {
.path() .path()
.app_data_dir() .app_data_dir()
.map_err(|e| format!("Failed to get app data directory: {}", e))?; .map_err(|e| format!("Failed to get app data directory: {}", e))?;
let recordings_dir = app_data_dir.join("recordings"); let recordings_dir = app_data_dir.join("recordings");
let path = recordings_dir.to_string_lossy().as_ref().to_string(); let path = recordings_dir.to_string_lossy().as_ref().to_string();
app.opener() app.opener()
.open_path(path, None::<String>) .open_path(path, None::<String>)
.map_err(|e| format!("Failed to open recordings folder: {}", e))?; .map_err(|e| format!("Failed to open recordings folder: {}", e))?;
Ok(()) Ok(())
} }

View file

@ -229,7 +229,10 @@ impl HistoryManager {
Ok(()) Ok(())
} }
fn cleanup_by_time(&self, retention_period: crate::settings::RecordingRetentionPeriod) -> Result<()> { fn cleanup_by_time(
&self,
retention_period: crate::settings::RecordingRetentionPeriod,
) -> Result<()> {
let conn = self.get_connection()?; let conn = self.get_connection()?;
// Calculate cutoff timestamp (current time minus retention period) // Calculate cutoff timestamp (current time minus retention period)
@ -243,7 +246,7 @@ impl HistoryManager {
// Get all unsaved entries older than the cutoff timestamp // Get all unsaved entries older than the cutoff timestamp
let mut stmt = conn.prepare( let mut stmt = conn.prepare(
"SELECT id, file_name FROM transcription_history WHERE saved = 0 AND timestamp < ?1" "SELECT id, file_name FROM transcription_history WHERE saved = 0 AND timestamp < ?1",
)?; )?;
let rows = stmt.query_map(params![cutoff_timestamp], |row| { let rows = stmt.query_map(params![cutoff_timestamp], |row| {
@ -258,7 +261,10 @@ impl HistoryManager {
let deleted_count = self.delete_entries_and_files(&entries_to_delete)?; let deleted_count = self.delete_entries_and_files(&entries_to_delete)?;
if deleted_count > 0 { if deleted_count > 0 {
debug!("Cleaned up {} old history entries based on retention period", deleted_count); debug!(
"Cleaned up {} old history entries based on retention period",
deleted_count
);
} }
Ok(()) Ok(())

View file

@ -9,19 +9,19 @@ interface RecordingRetentionPeriodProps {
grouped?: boolean; grouped?: boolean;
} }
export const RecordingRetentionPeriodSelector: React.FC<RecordingRetentionPeriodProps> = React.memo( export const RecordingRetentionPeriodSelector: React.FC<RecordingRetentionPeriodProps> =
({ descriptionMode = "tooltip", grouped = false }) => { React.memo(({ descriptionMode = "tooltip", grouped = false }) => {
const { const { getSetting, updateSetting, isUpdating } = useSettings();
getSetting,
updateSetting,
isUpdating,
} = useSettings();
const selectedRetentionPeriod = getSetting("recording_retention_period") || "never"; const selectedRetentionPeriod =
getSetting("recording_retention_period") || "never";
const historyLimit = getSetting("history_limit") || 5; const historyLimit = getSetting("history_limit") || 5;
const handleRetentionPeriodSelect = async (period: string) => { const handleRetentionPeriodSelect = async (period: string) => {
await updateSetting("recording_retention_period", period as RecordingRetentionPeriod); await updateSetting(
"recording_retention_period",
period as RecordingRetentionPeriod,
);
}; };
const retentionOptions = [ const retentionOptions = [
@ -48,7 +48,7 @@ export const RecordingRetentionPeriodSelector: React.FC<RecordingRetentionPeriod
/> />
</SettingContainer> </SettingContainer>
); );
}, });
);
RecordingRetentionPeriodSelector.displayName = "RecordingRetentionPeriodSelector"; RecordingRetentionPeriodSelector.displayName =
"RecordingRetentionPeriodSelector";

View file

@ -24,4 +24,4 @@ export const AdvancedSettings: React.FC = () => {
</SettingsGroup> </SettingsGroup>
</div> </div>
); );
}; };

View file

@ -19,7 +19,10 @@ export const DebugSettings: React.FC = () => {
/> />
<WordCorrectionThreshold descriptionMode="tooltip" grouped={true} /> <WordCorrectionThreshold descriptionMode="tooltip" grouped={true} />
<HistoryLimit descriptionMode="tooltip" grouped={true} /> <HistoryLimit descriptionMode="tooltip" grouped={true} />
<RecordingRetentionPeriodSelector descriptionMode="tooltip" grouped={true} /> <RecordingRetentionPeriodSelector
descriptionMode="tooltip"
grouped={true}
/>
<AlwaysOnMicrophone descriptionMode="tooltip" grouped={true} /> <AlwaysOnMicrophone descriptionMode="tooltip" grouped={true} />
<ClamshellMicrophoneSelector descriptionMode="tooltip" grouped={true} /> <ClamshellMicrophoneSelector descriptionMode="tooltip" grouped={true} />
<PostProcessingToggle descriptionMode="tooltip" grouped={true} /> <PostProcessingToggle descriptionMode="tooltip" grouped={true} />

View file

@ -50,7 +50,9 @@ export const RecordingRetentionPeriodSchema = z.enum([
"weeks2", "weeks2",
"months3", "months3",
]); ]);
export type RecordingRetentionPeriod = z.infer<typeof RecordingRetentionPeriodSchema>; export type RecordingRetentionPeriod = z.infer<
typeof RecordingRetentionPeriodSchema
>;
export const LLMPromptSchema = z.object({ export const LLMPromptSchema = z.object({
id: z.string(), id: z.string(),
@ -98,7 +100,8 @@ export const SettingsSchema = z.object({
model_unload_timeout: ModelUnloadTimeoutSchema.optional().default("never"), model_unload_timeout: ModelUnloadTimeoutSchema.optional().default("never"),
word_correction_threshold: z.number().optional().default(0.18), word_correction_threshold: z.number().optional().default(0.18),
history_limit: z.number().optional().default(5), history_limit: z.number().optional().default(5),
recording_retention_period: RecordingRetentionPeriodSchema.optional().default("preserve_limit"), recording_retention_period:
RecordingRetentionPeriodSchema.optional().default("preserve_limit"),
paste_method: PasteMethodSchema.optional().default("ctrl_v"), paste_method: PasteMethodSchema.optional().default("ctrl_v"),
clipboard_handling: ClipboardHandlingSchema.optional().default("dont_modify"), clipboard_handling: ClipboardHandlingSchema.optional().default("dont_modify"),
post_process_enabled: z.boolean().optional().default(false), post_process_enabled: z.boolean().optional().default(false),