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

@ -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

@ -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),