redbear-power: persist refresh interval in session
Add refresh_ms to SessionState (0 = not set, use config/default). Load it into App::poll_ms, give it priority over config when initializing the event-loop poll interval, and save it back in save_session(). Update all SessionState test initializers and assertions. Build, 224 tests, clippy, and fmt clean.
This commit is contained in:
@@ -462,7 +462,7 @@ impl App {
|
||||
None
|
||||
}
|
||||
}),
|
||||
poll_ms: crate::app::POLL_MS,
|
||||
poll_ms: 0,
|
||||
theme_idx: 0,
|
||||
process_tree: false,
|
||||
show_full_cmdline: false,
|
||||
@@ -524,11 +524,11 @@ impl App {
|
||||
app.process_sort = session.process_sort;
|
||||
app.sort_ascending = session.sort_ascending;
|
||||
app.process_tree = session.process_tree;
|
||||
app.show_full_cmdline = session.show_full_cmdline;
|
||||
app.process_narrow = session.process_narrow;
|
||||
app.folded = session.folded.into_iter().collect();
|
||||
app.process_filter = session.process_filter;
|
||||
app.show_full_cmdline = session.show_full_cmdline;
|
||||
app.process_narrow = session.process_narrow;
|
||||
app.poll_ms = session.refresh_ms;
|
||||
app
|
||||
}
|
||||
|
||||
@@ -551,6 +551,7 @@ impl App {
|
||||
process_filter: self.process_filter.clone(),
|
||||
show_full_cmdline: self.show_full_cmdline,
|
||||
process_narrow: self.process_narrow,
|
||||
refresh_ms: self.poll_ms,
|
||||
};
|
||||
session.save();
|
||||
}
|
||||
@@ -1880,6 +1881,7 @@ mod tests {
|
||||
process_filter: app.process_filter.clone(),
|
||||
show_full_cmdline: app.show_full_cmdline,
|
||||
process_narrow: app.process_narrow,
|
||||
refresh_ms: app.poll_ms,
|
||||
};
|
||||
let serialized = toml::to_string(&session).unwrap();
|
||||
let parsed: crate::session::SessionState = toml::from_str(&serialized).unwrap();
|
||||
@@ -1891,6 +1893,7 @@ mod tests {
|
||||
assert_eq!(parsed.folded.len(), 2);
|
||||
assert!(parsed.folded.contains(&100));
|
||||
assert!(parsed.folded.contains(&101));
|
||||
assert_eq!(parsed.refresh_ms, app.poll_ms);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -325,8 +325,10 @@ fn main() -> io::Result<()> {
|
||||
let async_stdin = termion::async_stdin();
|
||||
let mut events = async_stdin.events();
|
||||
let mut last_refresh = Instant::now();
|
||||
// Honor config.refresh_ms when set, otherwise default to POLL_MS.
|
||||
let mut poll = Duration::from_millis(if cfg.display.refresh_ms >= 50 {
|
||||
// Honor the persisted session refresh interval first, then config, then default.
|
||||
let mut poll = Duration::from_millis(if app.poll_ms >= 50 {
|
||||
app.poll_ms
|
||||
} else if cfg.display.refresh_ms >= 50 {
|
||||
cfg.display.refresh_ms
|
||||
} else {
|
||||
POLL_MS
|
||||
|
||||
@@ -48,6 +48,9 @@ pub struct SessionState {
|
||||
/// Narrow process view (hide IO columns for small terminals).
|
||||
#[serde(default)]
|
||||
pub process_narrow: bool,
|
||||
/// Last refresh interval in milliseconds (0 = not set, use config/default).
|
||||
#[serde(default)]
|
||||
pub refresh_ms: u64,
|
||||
}
|
||||
|
||||
impl Default for SessionState {
|
||||
@@ -61,6 +64,7 @@ impl Default for SessionState {
|
||||
process_filter: String::new(),
|
||||
show_full_cmdline: false,
|
||||
process_narrow: false,
|
||||
refresh_ms: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -156,6 +160,7 @@ mod tests {
|
||||
assert!(s.process_filter.is_empty());
|
||||
assert!(!s.show_full_cmdline);
|
||||
assert!(!s.process_narrow);
|
||||
assert_eq!(s.refresh_ms, 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -172,6 +177,7 @@ mod tests {
|
||||
process_filter: "kworker".to_string(),
|
||||
show_full_cmdline: true,
|
||||
process_narrow: true,
|
||||
refresh_ms: 1_500,
|
||||
};
|
||||
let serialized = toml::to_string(&s).unwrap();
|
||||
let parsed: SessionState = toml::from_str(&serialized).unwrap();
|
||||
@@ -231,7 +237,8 @@ mod tests {
|
||||
folded: vec![42],
|
||||
process_filter: "bash".to_string(),
|
||||
show_full_cmdline: false,
|
||||
process_narrow: true,
|
||||
process_narrow: false,
|
||||
refresh_ms: 2_000,
|
||||
};
|
||||
let serialized = toml::to_string(&s).unwrap();
|
||||
// Mimic the temp+rename flow with a different name
|
||||
|
||||
Reference in New Issue
Block a user