diff --git a/src/lib.rs b/src/lib.rs index 4b69de3..1fc1eb0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -106,16 +106,25 @@ pub fn main(config: &Config, terminal: &mut Terminal>) WorkerResult::Refreshed(Ok(inbox)) => { has_older = inbox.has_older(); oldest_seq = inbox.oldest_seq; + let prev_selected_seq = list_state.selected() + .and_then(|i| emails.get(i)) + .map(|e| e.seq); emails = inbox.emails; error = None; loading = false; if !emails.is_empty() { - list_state.select(Some(0)); - let seq = emails[0].seq; - preview_seq = Some(seq); - preview_body.clear(); - body_loading = true; - let _ = cmd_tx.send(WorkerCmd::FetchBody { seq }); + let new_idx = prev_selected_seq + .and_then(|seq| emails.iter().position(|e| e.seq == seq)) + .unwrap_or(0); + list_state.select(Some(new_idx)); + let seq = emails[new_idx].seq; + if preview_seq != Some(seq) { + preview_seq = Some(seq); + preview_body.clear(); + preview_scroll = 0; + body_loading = true; + let _ = cmd_tx.send(WorkerCmd::FetchBody { seq }); + } } else { list_state.select(None); preview_seq = None;