Add history pruning with configurable max entries and max days

- Add history_max_entries (default 50) and history_max_days (default 30)
  to AppConfig
- Add prune() method to HistoryStore that removes old entries by age
  and count limits
- Call prune after each history entry is added in the GUI
- Preserve history settings through settings dialog save/load cycle
This commit is contained in:
2026-03-06 15:22:17 +02:00
parent 5e83cb09ef
commit 1e3ffaadd3
4 changed files with 41 additions and 0 deletions

View File

@@ -272,6 +272,32 @@ impl HistoryStore {
self.write_all(&entries)
}
pub fn prune(&self, max_entries: usize, max_days: u32) -> Result<()> {
let mut entries = self.list()?;
if entries.is_empty() {
return Ok(());
}
let now_secs = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap_or_default()
.as_secs();
let cutoff_secs = now_secs.saturating_sub(max_days as u64 * 86400);
// Remove entries older than max_days
entries.retain(|e| {
e.timestamp.parse::<u64>().unwrap_or(0) >= cutoff_secs
});
// Trim to max_entries (keep the most recent)
if entries.len() > max_entries {
let start = entries.len() - max_entries;
entries = entries.split_off(start);
}
self.write_all(&entries)
}
pub fn list(&self) -> Result<Vec<HistoryEntry>> {
if !self.history_path.exists() {
return Ok(Vec::new());