mirror of
https://github.com/girlbossceo/conduwuit.git
synced 2025-03-14 18:55:37 +00:00
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
|
||||
};
|
||||
|
||||
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 {
|
||||
// TODO: Should ruma just use the presenceeventcontent type here?
|
||||
status_msg,
|
||||
currently_active: presence.content.currently_active,
|
||||
last_active_ago: presence
|
||||
.content
|
||||
.last_active_ago
|
||||
.map(|millis| Duration::from_millis(millis.into())),
|
||||
last_active_ago,
|
||||
presence: presence.content.presence,
|
||||
})
|
||||
} else {
|
||||
|
|
|
@ -382,7 +382,16 @@ async fn process_presence_updates(
|
|||
.ready_fold(PresenceUpdates::new(), |mut updates, (user_id, event)| {
|
||||
match updates.entry(user_id.into()) {
|
||||
| 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) => {
|
||||
let curr_event = slot.get_mut();
|
||||
|
@ -394,8 +403,6 @@ async fn process_presence_updates(
|
|||
curr_content.status_msg = new_content
|
||||
.status_msg
|
||||
.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
|
||||
.displayname
|
||||
.or_else(|| curr_content.displayname.take());
|
||||
|
@ -405,6 +412,10 @@ async fn process_presence_updates(
|
|||
curr_content.currently_active = new_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,
|
||||
) -> PresenceEvent {
|
||||
let now = utils::millis_since_unix_epoch();
|
||||
let last_active_ago = if self.currently_active {
|
||||
None
|
||||
} else {
|
||||
Some(UInt::new_saturating(now.saturating_sub(self.last_active_ts)))
|
||||
};
|
||||
let last_active_ago = Some(UInt::new_saturating(now.saturating_sub(self.last_active_ts)));
|
||||
|
||||
PresenceEvent {
|
||||
sender: user_id.to_owned(),
|
||||
|
|
Loading…
Add table
Reference in a new issue