void Gateways::resolveNickName(const Jid &AStreamJid, const Jid &AContactJid) { IRoster *roster = FRosterPlugin!=NULL ? FRosterPlugin->findRoster(AStreamJid) : NULL; IRosterItem ritem = roster!=NULL ? roster->rosterItem(AContactJid) : IRosterItem(); if (ritem.isValid && roster->isOpen()) { if (FVCardPlugin->hasVCard(ritem.itemJid)) { static const QList<QString> nickFields = QList<QString>() << VVN_NICKNAME << VVN_FULL_NAME << VVN_GIVEN_NAME << VVN_FAMILY_NAME; LOG_STRM_INFO(AStreamJid,QString("Resolving contact nick name from vCard, jid=%1").arg(AContactJid.bare())); IVCard *vcard = FVCardPlugin->getVCard(ritem.itemJid); foreach(const QString &field, nickFields) { QString nick = vcard->value(field); if (!nick.isEmpty()) { if (ritem.name != nick) roster->renameItem(ritem.itemJid,nick); break; } } vcard->unlock(); } else {
QString StatusIcons::iconKeyByJid(const Jid &AStreamJid, const Jid &AContactJid) const { bool ask = false; int show = IPresence::Offline; QString subscription = SUBSCRIPTION_NONE; IPresence *presence = FPresenceManager!=NULL ? FPresenceManager->findPresence(AStreamJid) : NULL; if (AStreamJid == AContactJid) { subscription = SUBSCRIPTION_BOTH; show = presence!=NULL ? presence->show() : show; } else if (AStreamJid && AContactJid) { subscription = SUBSCRIPTION_BOTH; show = presence!=NULL ? presence->findItem(AContactJid).show : show; } else { IRoster *roster = FRosterManager!=NULL ? FRosterManager->findRoster(AStreamJid) : NULL; IRosterItem ritem = roster!=NULL ? roster->findItem(AContactJid) : IRosterItem(); ask = !ritem.subscriptionAsk.isEmpty(); subscription = ritem.subscription; show = presence!=NULL ? presence->findItem(AContactJid).show : show; } return iconKeyByStatus(show,subscription,ask); }
IRosterItem Roster::rosterItem(const Jid &AItemJid) const { foreach(const IRosterItem &ritem, FRosterItems) if (AItemJid && ritem.itemJid) return ritem; return IRosterItem(); }
void InfoWidget::updateFieldLabel(IInfoWidget::InfoField AField) { switch (AField) { case AccountName: { QString name = field(AField).toString(); ui.lblAccount->setText(Qt::escape(name)); ui.lblAccount->setVisible(isFieldVisible(AField) && !name.isEmpty()); break; } case ContactName: { QString name = field(AField).toString(); IRosterItem ritem = FRoster ? FRoster->rosterItem(FContactJid) : IRosterItem(); if (isFiledAutoUpdated(AField) && ritem.name.isEmpty()) ui.lblName->setText(Qt::escape(FContactJid.full())); else ui.lblName->setText(QString("<big><b>%1</b></big> - %2").arg(Qt::escape(name)).arg(Qt::escape(FContactJid.full()))); ui.lblName->setVisible(isFieldVisible(AField)); break; } case ContactStatus: { QString status = field(AField).toString(); ui.lblStatus->setText(Qt::escape(status)); ui.lblStatus->setVisible(isFieldVisible(AField) && !status.isEmpty()); break; } case ContactAvatar: { if (ui.lblAvatar->movie()!=NULL) ui.lblAvatar->movie()->deleteLater(); QString fileName = field(AField).toString(); if (!fileName.isEmpty()) { QMovie *movie = new QMovie(fileName,QByteArray(),ui.lblAvatar); QSize size = QImageReader(fileName).size(); size.scale(QSize(32,32),Qt::KeepAspectRatio); movie->setScaledSize(size); ui.lblAvatar->setMovie(movie); movie->start(); } else { ui.lblAvatar->setMovie(NULL); } ui.lblAvatar->setVisible(isFieldVisible(AField) && !fileName.isEmpty()); break; } default: break; } }
void InfoWidget::autoUpdateField(InfoField AField) { switch (AField) { case AccountName: { setField(AField, FAccount!=NULL ? FAccount->name() : FStreamJid.full()); break; } case ContactName: { QString name; if (!(FStreamJid && FContactJid)) { IRosterItem ritem = FRoster ? FRoster->rosterItem(FContactJid) : IRosterItem(); name = ritem.isValid && !ritem.name.isEmpty() ? ritem.name : (!FContactJid.node().isEmpty() ? FContactJid.node() : FContactJid.bare()); } else name = FContactJid.resource(); setField(AField,name); break; } case ContactShow: { setField(AField,FPresence!=NULL ? FPresence->presenceItem(FContactJid).show : IPresence::Offline); break; } case ContactStatus: { setField(AField,FPresence!=NULL ? FPresence->presenceItem(FContactJid).status : QString::null); break; } case ContactAvatar: { setField(AField, FAvatars!=NULL ? FAvatars->avatarFileName(FAvatars->avatarHash(FContactJid)) : QString::null); break; } } }