diff options
author | Kevin Smith <git@kismith.co.uk> | 2010-11-08 22:39:28 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-11-08 22:39:28 (GMT) |
commit | 8774d67aabd02086ec0663bb4567cef14bd513c6 (patch) | |
tree | bfb723ecc9b1fd528b1da3135a5cfd401c44a268 /Swiften/Presence | |
parent | a594eb3fef7e047d1eca7959d7734d4d10fd1eb7 (diff) | |
download | swift-8774d67aabd02086ec0663bb4567cef14bd513c6.zip swift-8774d67aabd02086ec0663bb4567cef14bd513c6.tar.bz2 |
Brute force application of presence to roster items on add/modify.
Resolves: #655
Resolves: #672
Release-Notes: The roster should no longer sometimes show online users as offline.
Diffstat (limited to 'Swiften/Presence')
-rw-r--r-- | Swiften/Presence/PresenceOracle.cpp | 15 | ||||
-rw-r--r-- | Swiften/Presence/PresenceOracle.h | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/Swiften/Presence/PresenceOracle.cpp b/Swiften/Presence/PresenceOracle.cpp index 387ad42..90e403c 100644 --- a/Swiften/Presence/PresenceOracle.cpp +++ b/Swiften/Presence/PresenceOracle.cpp @@ -76,6 +76,21 @@ Presence::ref PresenceOracle::getLastPresence(const JID& jid) const { } } +std::vector<Presence::ref> PresenceOracle::getAllPresence(const JID& bareJID) const { + std::vector<Presence::ref> results; + PresencesMap::const_iterator i = entries_.find(bareJID); + if (i == entries_.end()) { + return results; + } + PresenceMap presenceMap = i->second; + PresenceMap::const_iterator j = presenceMap.begin(); + for (; j != presenceMap.end(); j++) { + Presence::ref current = j->second; + results.push_back(current); + } + return results; +} + Presence::ref PresenceOracle::getHighestPriorityPresence(const JID& bareJID) const { PresencesMap::const_iterator i = entries_.find(bareJID); if (i == entries_.end()) { diff --git a/Swiften/Presence/PresenceOracle.h b/Swiften/Presence/PresenceOracle.h index e846984..4e16e41 100644 --- a/Swiften/Presence/PresenceOracle.h +++ b/Swiften/Presence/PresenceOracle.h @@ -22,6 +22,7 @@ class StanzaChannel; Presence::ref getLastPresence(const JID&) const; Presence::ref getHighestPriorityPresence(const JID& bareJID) const; + std::vector<Presence::ref> getAllPresence(const JID& bareJID) const; public: boost::signal<void (Presence::ref)> onPresenceChange; |