void RoomHandler::HandlePermsChanged (const QString& nick, QXmppMucItem::Affiliation aff, QXmppMucItem::Role role, const QString& reason) { RoomParticipantEntry_ptr entry = GetParticipantEntry (nick); if (aff == QXmppMucItem::OutcastAffiliation || role == QXmppMucItem::NoRole) { Account_->handleEntryRemoved (entry.get ()); if (aff == QXmppMucItem::OutcastAffiliation) MakeBanMessage (nick, reason); else MakeKickMessage (nick, reason); Nick2Entry_.remove (nick); return; } entry->SetAffiliation (aff); entry->SetRole (role); MakePermsChangedMessage (nick, aff, role, reason); }
void RoomHandler::handleParticipantAdded (const QString& jid) { const QXmppPresence& pres = Room_->participantPresence (jid); QString nick; ClientConnection::Split (jid, 0, &nick); if (PendingNickChanges_.remove (nick)) return; RoomParticipantEntry_ptr entry = GetParticipantEntry (nick); entry->SetAffiliation (pres.mucItem ().affiliation ()); entry->SetRole (pres.mucItem ().role ()); entry->SetPhotoHash (pres.photoHash ()); entry->HandlePresence (pres, ""); MakeJoinMessage (pres, nick); }
void RoomHandler::HandlePresence (const QXmppPresence& pres, const QString& nick) { if (pres.type () == QXmppPresence::Unavailable && PendingNickChanges_.remove (nick)) return; const bool existed = Nick2Entry_.contains (nick); RoomParticipantEntry_ptr entry = GetParticipantEntry (nick); if (pres.type () == QXmppPresence::Unavailable) { MakeLeaveMessage (pres, nick); Account_->handleEntryRemoved (entry.get ()); Nick2Entry_.remove (nick); return; } entry->SetClientInfo ("", pres); const QXmppPresence::Status& xmppSt = pres.status (); EntryStatus status (static_cast<State> (xmppSt.type ()), xmppSt.statusText ()); const bool statusChanged = (status != entry->GetStatus (QString ())); if (statusChanged) entry->SetStatus (status, QString ()); if (!PendingNickChanges_.remove (nick)) { if (!existed) { Account_->GetClientConnection ()-> FetchVCard (RoomJID_ + "/" + nick); MakeJoinMessage (pres, nick); entry->SetAffiliation (MUCManager_->getAffiliation (RoomJID_, nick)); entry->SetRole (MUCManager_->getRole (RoomJID_, nick)); } else if (statusChanged) MakeStatusChangedMessage (pres, nick); } }