void handleSwiftRosterReceived(const std::string &user) { Swift::PresenceOracle *oracle = m_users[user]->getPresenceOracle(); BOOST_FOREACH(const Swift::XMPPRosterItem &item, m_users[user]->getRoster()->getItems()) { Swift::Presence::ref lastPresence = oracle->getLastPresence(item.getJID()); pbnetwork::StatusType status = lastPresence ? ((pbnetwork::StatusType) lastPresence->getShow()) : pbnetwork::STATUS_NONE; handleBuddyChanged(user, item.getJID().toBare().toString(), item.getName(), item.getGroups(), status); } }
void handlePresence() { Swift::Presence::ref response = Swift::Presence::create(); response->setTo("localhost"); response->setFrom("user@localhost/resource"); response->setShow(Swift::StatusShow::Away); injectPresence(response); loop->processEvents(); // no presence received in server mode, just disco#info CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::DiscoInfo>()); CPPUNIT_ASSERT(changedPresence); CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::Away, changedPresence->getShow()); }
void handleSwiftPresenceChanged(const std::string &user, Swift::Presence::ref presence) { LOG4CXX_INFO(logger, user << ": " << presence->getFrom().toBare().toString() << " presence changed"); std::string message = presence->getStatus(); std::string photo = ""; boost::shared_ptr<Swift::VCardUpdate> update = presence->getPayload<Swift::VCardUpdate>(); if (update) { photo = update->getPhotoHash(); } boost::optional<Swift::XMPPRosterItem> item = m_users[user]->getRoster()->getItem(presence->getFrom()); if (item) { handleBuddyChanged(user, presence->getFrom().toBare().toString(), item->getName(), item->getGroups(), (pbnetwork::StatusType) presence->getShow(), message, photo); } else { std::vector<std::string> groups; handleBuddyChanged(user, presence->getFrom().toBare().toString(), presence->getFrom().toBare(), groups, (pbnetwork::StatusType) presence->getShow(), message, photo); } }