1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
use super::*;
use crate::fl;
impl App {
/// Indique si le serveur selectionne est un favori.
pub fn is_selected_favorite(&mut self) -> bool {
if let Some(s) = self.selected_server() {
self.favorites.contains(&Self::server_key(&s))
} else {
false
}
}
/// Bascule le statut favori du serveur selectionne.
pub fn toggle_favorite(&mut self) {
if let Some(server) = self.selected_server() {
let key = Self::server_key(&server);
if self.favorites.contains(&key) {
self.favorites.remove(&key);
self.set_status_message(fl!("favorite-removed"));
} else {
self.favorites.insert(key);
self.set_status_message(fl!("favorite-added"));
}
}
}
/// Bascule le mode "afficher seulement les favoris".
pub fn toggle_favorites_view(&mut self) {
self.favorites_only = !self.favorites_only;
self.items_dirty = true;
self.selected_index = 0;
self.list_state.select(Some(0));
let msg = if self.favorites_only {
fl!("favorites-title")
} else {
fl!("status-normal")
};
self.set_status_message(msg);
}
/// Enregistre une connexion pour le serveur selectionne (timestamp UNIX).
pub fn record_connection(&mut self, server: &ResolvedServer) {
let key = Self::server_key(server);
let ts = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0);
self.last_seen.insert(key, ts);
}
/// Retourne le timestamp UNIX de derniere connexion pour un serveur.
pub fn last_seen_for(&self, server: &ResolvedServer) -> Option<u64> {
self.last_seen.get(&Self::server_key(server)).copied()
}
}