void ChatDlg::setJid(const Jid &j) { if (!j.compare(jid())) { account()->dialogUnregister(this); TabbableWidget::setJid(j); account()->dialogRegister(this, jid()); updateContact(jid(), false); } }
bool GenericChatDialog::doConsecutiveMessage(const QDateTime& time, const Jid& sender) { //Q_ASSERT(time >= lastMsgTime); this is not true for offline messages if (lastMsgTime.secsTo(time) > 3 * 60) { //too old return false; } if (sender.compare(lastEventOwner, true)) { return true; } return false; }
bool Task::iqVerify(const QDomElement &x, const Jid &to, const QString &id, const QString &xmlns) { if(x.tagName() != "iq") return false; Jid from(x.attribute("from")); Jid local = client()->jid(); Jid server = client()->host(); // empty 'from' ? if(from.isEmpty()) { // allowed if we are querying the server if(!to.isEmpty() && !to.compare(server)) return false; } // from ourself? else if(from.compare(local, false)) { // allowed if we are querying ourself or the server if(!to.isEmpty() && !to.compare(local, false) && !to.compare(server)) return false; } // from anywhere else? else { if(!from.compare(to)) return false; } if(!id.isEmpty()) { if(x.attribute("id") != id) return false; } if(!xmlns.isEmpty()) { if(queryNS(x) != xmlns) return false; } return true; }
/** * \brief Registers new incoming capabilities information of a JID. * If the features of the entity are unknown, discovery requests are sent to * retrieve the information. * * @param jid The entity's JID * @param node The entity's caps node * @param ver The entity's caps version * @param ext The entity's caps extensions */ void CapsManager::updateCaps(const Jid& jid, const QString& node, const QString& ver, const QString& ext) { if (jid.compare(jid_,false)) return; CapsSpec c(node,ver,ext); CapsSpecs caps = c.flatten(); if (capsSpecs_[jid.full()] != c) { //qDebug() << QString("caps.cpp: Updating caps for %1 (node=%2,ver=%3,ext=%4)").arg(QString(jid.full()).replace('%',"%%")).arg(node).arg(ver).arg(ext); // Unregister from all old caps nodes CapsSpecs old_caps = capsSpecs_[jid.full()].flatten(); foreach(CapsSpec s, old_caps) { if (s != CapsSpec()) { capsJids_[s].removeAll(jid.full()); } } if (!node.isEmpty() && !ver.isEmpty()) { // Register with all new caps nodes capsSpecs_[jid.full()] = c; foreach(CapsSpec s, caps) { if (!capsJids_[s].contains(jid.full())) { capsJids_[s].push_back(jid.full()); } } emit capsChanged(jid); // Register new caps and check if we need to discover features if (isEnabled()) { foreach(CapsSpec s, caps) { if (!registry_->isRegistered(s) && capsJids_[s].count() == 1) { //qDebug() << QString("caps.cpp: Sending disco request to %1, node=%2").arg(QString(jid.full()).replace('%',"%%")).arg(node + "#" + s.extensions()); discoInfoQuerier_->getDiscoInfo(jid,node + "#" + s.extensions()); } } } }
void YaProfile::vcardChanged(const Jid& j) { if (!j.compare(jid(), false)) return; emit nameChanged(); }
void YaProfile::avatarChanged(const Jid& j) { if (!j.compare(jid(), false)) return; emit avatarChanged(); }
void Client::ppPresence(const Jid &j, const Status &s) { if(s.isAvailable()) debug(QString("Client: %1 is available.\n").arg(j.full())); else debug(QString("Client: %1 is unavailable.\n").arg(j.full())); for(QValueList<GroupChat>::Iterator it = d->groupChatList.begin(); it != d->groupChatList.end(); it++) { GroupChat &i = *it; if(i.j.compare(j, false)) { bool us = (i.j.resource() == j.resource() || j.resource().isEmpty()) ? true: false; debug(QString("for groupchat i=[%1] pres=[%2], [us=%3].\n").arg(i.j.full()).arg(j.full()).arg(us)); switch(i.status) { case GroupChat::Connecting: if(us && s.hasError()) { Jid j = i.j; d->groupChatList.remove(it); groupChatError(j, s.errorCode(), s.errorString()); } else { // don't signal success unless it is a non-error presence if(!s.hasError()) { i.status = GroupChat::Connected; groupChatJoined(i.j); } groupChatPresence(j, s); } break; case GroupChat::Connected: groupChatPresence(j, s); break; case GroupChat::Closing: if(us && !s.isAvailable()) { Jid j = i.j; d->groupChatList.remove(it); groupChatLeft(j); } break; default: break; } return; } } if(s.hasError()) { presenceError(j, s.errorCode(), s.errorString()); return; } // is it me? if(j.compare(jid(), false)) { updateSelfPresence(j, s); } else { // update all relavent roster entries for(LiveRoster::Iterator it = d->roster.begin(); it != d->roster.end(); ++it) { LiveRosterItem &i = *it; if(!i.jid().compare(j, false)) continue; // roster item has its own resource? if(!i.jid().resource().isEmpty()) { if(i.jid().resource() != j.resource()) continue; } updatePresence(&i, j, s); } } }
void ChatDlg::updateAvatar(const Jid& j) { if (j.compare(jid(), false)) updateAvatar(); }