fix: presence timer not working
This commit is contained in:
parent
0074f903d8
commit
6f15c9b3f4
3 changed files with 24 additions and 12 deletions
|
@ -82,14 +82,19 @@ pub(crate) async fn get_presence_route(
|
||||||
presence.content.status_msg
|
presence.content.status_msg
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let last_active_ago = match presence.content.currently_active {
|
||||||
|
| Some(true) => None,
|
||||||
|
| _ => presence
|
||||||
|
.content
|
||||||
|
.last_active_ago
|
||||||
|
.map(|millis| Duration::from_millis(millis.into())),
|
||||||
|
};
|
||||||
|
|
||||||
Ok(get_presence::v3::Response {
|
Ok(get_presence::v3::Response {
|
||||||
// TODO: Should ruma just use the presenceeventcontent type here?
|
// TODO: Should ruma just use the presenceeventcontent type here?
|
||||||
status_msg,
|
status_msg,
|
||||||
currently_active: presence.content.currently_active,
|
currently_active: presence.content.currently_active,
|
||||||
last_active_ago: presence
|
last_active_ago,
|
||||||
.content
|
|
||||||
.last_active_ago
|
|
||||||
.map(|millis| Duration::from_millis(millis.into())),
|
|
||||||
presence: presence.content.presence,
|
presence: presence.content.presence,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -382,7 +382,16 @@ async fn process_presence_updates(
|
||||||
.ready_fold(PresenceUpdates::new(), |mut updates, (user_id, event)| {
|
.ready_fold(PresenceUpdates::new(), |mut updates, (user_id, event)| {
|
||||||
match updates.entry(user_id.into()) {
|
match updates.entry(user_id.into()) {
|
||||||
| Entry::Vacant(slot) => {
|
| Entry::Vacant(slot) => {
|
||||||
slot.insert(event);
|
let mut new_event = event;
|
||||||
|
new_event.content.last_active_ago = match new_event.content.currently_active {
|
||||||
|
| Some(true) => None,
|
||||||
|
| _ => new_event
|
||||||
|
.content
|
||||||
|
.last_active_ago
|
||||||
|
.or(new_event.content.last_active_ago),
|
||||||
|
};
|
||||||
|
|
||||||
|
slot.insert(new_event);
|
||||||
},
|
},
|
||||||
| Entry::Occupied(mut slot) => {
|
| Entry::Occupied(mut slot) => {
|
||||||
let curr_event = slot.get_mut();
|
let curr_event = slot.get_mut();
|
||||||
|
@ -394,8 +403,6 @@ async fn process_presence_updates(
|
||||||
curr_content.status_msg = new_content
|
curr_content.status_msg = new_content
|
||||||
.status_msg
|
.status_msg
|
||||||
.or_else(|| curr_content.status_msg.take());
|
.or_else(|| curr_content.status_msg.take());
|
||||||
curr_content.last_active_ago =
|
|
||||||
new_content.last_active_ago.or(curr_content.last_active_ago);
|
|
||||||
curr_content.displayname = new_content
|
curr_content.displayname = new_content
|
||||||
.displayname
|
.displayname
|
||||||
.or_else(|| curr_content.displayname.take());
|
.or_else(|| curr_content.displayname.take());
|
||||||
|
@ -405,6 +412,10 @@ async fn process_presence_updates(
|
||||||
curr_content.currently_active = new_content
|
curr_content.currently_active = new_content
|
||||||
.currently_active
|
.currently_active
|
||||||
.or(curr_content.currently_active);
|
.or(curr_content.currently_active);
|
||||||
|
curr_content.last_active_ago = match curr_content.currently_active {
|
||||||
|
| Some(true) => None,
|
||||||
|
| _ => new_content.last_active_ago.or(curr_content.last_active_ago),
|
||||||
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -46,11 +46,7 @@ impl Presence {
|
||||||
users: &users::Service,
|
users: &users::Service,
|
||||||
) -> PresenceEvent {
|
) -> PresenceEvent {
|
||||||
let now = utils::millis_since_unix_epoch();
|
let now = utils::millis_since_unix_epoch();
|
||||||
let last_active_ago = if self.currently_active {
|
let last_active_ago = Some(UInt::new_saturating(now.saturating_sub(self.last_active_ts)));
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(UInt::new_saturating(now.saturating_sub(self.last_active_ts)))
|
|
||||||
};
|
|
||||||
|
|
||||||
PresenceEvent {
|
PresenceEvent {
|
||||||
sender: user_id.to_owned(),
|
sender: user_id.to_owned(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue