summaryrefslogtreecommitdiffstats
path: root/src/user_presences.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/user_presences.rs')
-rw-r--r--src/user_presences.rs126
1 files changed, 81 insertions, 45 deletions
diff --git a/src/user_presences.rs b/src/user_presences.rs
index 1a719a2..e864dbf 100644
--- a/src/user_presences.rs
+++ b/src/user_presences.rs
@@ -43,7 +43,7 @@ impl UserPresences {
pub struct Presences {
/// presences are sorted by time, first by type, then by last activity.
- presences: IndexMap<String, Presence>
+ presences: IndexMap<String, Presence>,
}
impl Presences {
@@ -55,47 +55,89 @@ impl Presences {
/// gets the highest priority presence
pub fn presence(&self) -> Option<(String, Presence)> {
- if let Some((resource, presence)) = self.presences.iter().filter(|(_resource, presence)| if let PresenceType::Online(online) = &presence.presence {
- online.show == Some(Show::DoNotDisturb)
- } else {
- false
- }).next() {
- return Some((resource.clone(), presence.clone()))
+ if let Some((resource, presence)) = self
+ .presences
+ .iter()
+ .filter(|(_resource, presence)| {
+ if let PresenceType::Online(online) = &presence.presence {
+ online.show == Some(Show::DoNotDisturb)
+ } else {
+ false
+ }
+ })
+ .next()
+ {
+ return Some((resource.clone(), presence.clone()));
}
- if let Some((resource, presence)) = self.presences.iter().filter(|(_resource, presence)| if let PresenceType::Online(online) = &presence.presence {
- online.show == Some(Show::Chat)
- } else {
- false
- }).next() {
- return Some((resource.clone(), presence.clone()))
+ if let Some((resource, presence)) = self
+ .presences
+ .iter()
+ .filter(|(_resource, presence)| {
+ if let PresenceType::Online(online) = &presence.presence {
+ online.show == Some(Show::Chat)
+ } else {
+ false
+ }
+ })
+ .next()
+ {
+ return Some((resource.clone(), presence.clone()));
}
- if let Some((resource, presence)) = self.presences.iter().filter(|(_resource, presence)| if let PresenceType::Online(online) = &presence.presence {
- online.show == None
- } else {
- false
- }).next() {
- return Some((resource.clone(), presence.clone()))
+ if let Some((resource, presence)) = self
+ .presences
+ .iter()
+ .filter(|(_resource, presence)| {
+ if let PresenceType::Online(online) = &presence.presence {
+ online.show == None
+ } else {
+ false
+ }
+ })
+ .next()
+ {
+ return Some((resource.clone(), presence.clone()));
}
- if let Some((resource, presence)) = self.presences.iter().filter(|(_resource, presence)| if let PresenceType::Online(online) = &presence.presence {
- online.show == Some(Show::Away)
- } else {
- false
- }).next() {
- return Some((resource.clone(), presence.clone()))
+ if let Some((resource, presence)) = self
+ .presences
+ .iter()
+ .filter(|(_resource, presence)| {
+ if let PresenceType::Online(online) = &presence.presence {
+ online.show == Some(Show::Away)
+ } else {
+ false
+ }
+ })
+ .next()
+ {
+ return Some((resource.clone(), presence.clone()));
}
- if let Some((resource, presence)) = self.presences.iter().filter(|(_resource, presence)| if let PresenceType::Online(online) = &presence.presence {
- online.show == Some(Show::ExtendedAway)
- } else {
- false
- }).next() {
- return Some((resource.clone(), presence.clone()))
+ if let Some((resource, presence)) = self
+ .presences
+ .iter()
+ .filter(|(_resource, presence)| {
+ if let PresenceType::Online(online) = &presence.presence {
+ online.show == Some(Show::ExtendedAway)
+ } else {
+ false
+ }
+ })
+ .next()
+ {
+ return Some((resource.clone(), presence.clone()));
}
- if let Some((resource, presence)) = self.presences.iter().filter(|(_resource, presence)| if let PresenceType::Offline(_offline) = &presence.presence {
- true
- } else {
- false
- }).next() {
- return Some((resource.clone(), presence.clone()))
+ if let Some((resource, presence)) = self
+ .presences
+ .iter()
+ .filter(|(_resource, presence)| {
+ if let PresenceType::Offline(_offline) = &presence.presence {
+ true
+ } else {
+ false
+ }
+ })
+ .next()
+ {
+ return Some((resource.clone(), presence.clone()));
} else {
None
}
@@ -103,19 +145,14 @@ impl Presences {
pub fn update_presence(&mut self, resource: String, presence: Presence) {
let index = match self.presences.binary_search_by(|_, existing_presence| {
- presence.timestamp
- .cmp(
- &existing_presence.timestamp
- )
+ presence.timestamp.cmp(&existing_presence.timestamp)
}) {
Ok(i) => i,
Err(i) => i,
};
self.presences.insert_before(
// TODO: check if this logic is correct
- index,
- resource,
- presence,
+ index, resource, presence,
);
}
@@ -130,4 +167,3 @@ impl Presences {
}
}
}
-