NickServ: show last-seen (and online status) in INFO
The account's last-active time was tracked but never surfaced. INFO now reports it, reading 'now (online)' when the account has a live session. Threads NetView into the INFO handler for the session lookup and carries last_seen on AccountView.
This commit is contained in:
parent
2c4bc9079c
commit
39d7421c06
5 changed files with 22 additions and 4 deletions
|
|
@ -11,6 +11,7 @@ impl Store for Db {
|
|||
ts: a.ts,
|
||||
verified: a.verified,
|
||||
greet: a.greet.clone(),
|
||||
last_seen: a.last_seen,
|
||||
})
|
||||
}
|
||||
fn resolve_account(&self, name: &str) -> Option<&str> {
|
||||
|
|
@ -19,7 +20,7 @@ impl Store for Db {
|
|||
fn accounts_matching(&self, pattern: &str) -> Vec<AccountView> {
|
||||
self.accounts()
|
||||
.filter(|a| super::glob_match(pattern, &a.name))
|
||||
.map(|a| AccountView { name: a.name.clone(), email: a.email.clone(), ts: a.ts, verified: a.verified, greet: a.greet.clone() })
|
||||
.map(|a| AccountView { name: a.name.clone(), email: a.email.clone(), ts: a.ts, verified: a.verified, greet: a.greet.clone(), last_seen: a.last_seen })
|
||||
.collect()
|
||||
}
|
||||
fn accounts_by_email(&self, pattern: &str) -> Vec<String> {
|
||||
|
|
|
|||
|
|
@ -446,6 +446,7 @@
|
|||
let mut db = Db::open(&path, "test");
|
||||
db.scram_iterations = 4096;
|
||||
db.register("alice", "sesame", None).unwrap();
|
||||
db.register("bob", "hunter2", None).unwrap();
|
||||
db.register_channel("#a", "alice").unwrap();
|
||||
let ns = NickServ { uid: "42SAAAAAA".into(), guest_nick: "Guest".into(), guest_seq: 0 };
|
||||
let cs = ChanServ { uid: "42SAAAAAB".into() };
|
||||
|
|
@ -461,6 +462,13 @@
|
|||
assert!(notice(&info, "Information for \x02alice\x02"));
|
||||
assert!(notice(&info, "Registered"));
|
||||
assert!(notice(&info, "Email"), "owner sees their email line: {info:?}");
|
||||
// alice is identified, so her INFO reports her as online.
|
||||
assert!(notice(&info, "Last seen"), "INFO has a last-seen line: {info:?}");
|
||||
assert!(notice(&info, "online"), "an identified account reads as online: {info:?}");
|
||||
// bob is registered but not connected: last-seen shows a time, not online.
|
||||
let binfo = to_ns(&mut e, "INFO bob");
|
||||
assert!(notice(&binfo, "Last seen"), "offline account still shows last-seen: {binfo:?}");
|
||||
assert!(!notice(&binfo, "online"), "an offline account is not reported online: {binfo:?}");
|
||||
assert!(notice(&to_ns(&mut e, "INFO ghost"), "isn't registered"));
|
||||
assert!(notice(&to_ns(&mut e, "ALIST"), "#a"));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue