void EntryBase::SetVCard (const QXmppVCardIq& vcard, bool initial) { #if QXMPP_VERSION >= 0x000801 if (vcard == VCardIq_) return; #endif VCardIq_ = vcard; VCardPhotoHash_ = VCardIq_.photo ().isEmpty () ? QByteArray () : QCryptographicHash::hash (VCardIq_.photo (), QCryptographicHash::Sha1); if (!vcard.photo ().isEmpty ()) { SetAvatar (vcard.photo ()); Core::Instance ().GetAvatarsStorage ()->StoreAvatar (Avatar_, VCardPhotoHash_.toHex ()); } if (VCardDialog_) VCardDialog_->UpdateInfo (vcard); if (!initial && GetEntryType () == ICLEntry::EntryType::Chat) Core::Instance ().ScheduleSaveRoster (10000); emit vcardUpdated (); }
void EntryBase::SetVCard (const QXmppVCardIq& vcard, bool initial) { VCardIq_ = vcard; VCardPhotoHash_ = VCardIq_.photo ().isEmpty () ? QByteArray () : QCryptographicHash::hash (VCardIq_.photo (), QCryptographicHash::Sha1); QString text = FormatRawInfo (vcard); if (!text.isEmpty ()) text = QString ("gloox VCard:\n") + text; SetRawInfo (text); if (!vcard.photo ().isEmpty ()) { SetAvatar (vcard.photo ()); Core::Instance ().GetAvatarsStorage ()->StoreAvatar (Avatar_, VCardPhotoHash_.toHex ()); } if (VCardDialog_) VCardDialog_->UpdateInfo (vcard); if (!initial) Core::Instance ().ScheduleSaveRoster (10000); emit vcardUpdated (); }
void VCardDialog::UpdateInfo (const QXmppVCardIq& vcard) { setWindowTitle (tr ("VCard for %1") .arg (vcard.nickName())); Ui_.EditRealName_->setText (vcard.fullName ()); Ui_.EditNick_->setText (vcard.nickName ()); const QDate& date = vcard.birthday (); if (date.isValid ()) Ui_.EditBirthday_->setDate (date); Ui_.EditBirthday_->setVisible (date.isValid ()); Ui_.EditPhone_->setText ("<phones not supported yet>"); Ui_.EditURL_->setText (vcard.url ()); QPixmap px = QPixmap::fromImage (QImage::fromData (vcard.photo ())); if (!px.isNull ()) { const QSize& maxPx = Ui_.LabelPhoto_->maximumSize (); if (px.width () > maxPx.width () || px.height () > maxPx.height ()) px = px.scaled (maxPx, Qt::KeepAspectRatio, Qt::SmoothTransformation); Ui_.LabelPhoto_->setPixmap (px); } else Ui_.LabelPhoto_->setText (tr ("No photo")); }
QString EntryBase::FormatRawInfo (const QXmppVCardIq& vcard) { QString text; text += tr ("Name: %1") .arg (vcard.fullName ()); text += "\n"; if (vcard.nickName ().size ()) text += tr ("Nickname: %1\n") .arg (vcard.nickName ()); if (vcard.url ().size ()) text += tr ("URL: %1\n") .arg (vcard.url ()); if (vcard.birthday ().isValid ()) text += tr ("Birthday: %1\n") .arg (vcard.birthday ().toString ()); if (vcard.email ().size ()) text += tr ("Email: %1\n") .arg (vcard.email ()); if (vcard.photoType ().size ()) { text += tr ("Photo:") + QString ("\ndata:%1;base64,%2\n") .arg (vcard.photoType ()) .arg (vcard.photo ().constData ()); } return text; }
int CUserInfoXmpp::UpdateUserInfo(const QXmppVCardIq &vCard, QString jid) { //if(!vCard.fullName().isEmpty()) // m_szName = vCard.fullName(); m_szNick = vCard.nickName(); m_Birthday = vCard.birthday(); m_szEmail = vCard.email(); m_szDescription = vCard.description(); if(!jid.isEmpty() && m_szJid.isEmpty()) m_szJid = jid; //保存头像 QByteArray photo = vCard.photo(); QBuffer buffer; buffer.setData(photo); buffer.open(QIODevice::ReadOnly); QImageReader imageReader(&buffer); m_imgPhoto = imageReader.read(); buffer.close(); //保存头像到本地 QImageWriter imageWriter(CGlobal::Instance()->GetFileUserAvatar(GetId()), "png"); if(!imageWriter.write(GetPhoto())) LOG_MODEL_ERROR("CUserInfo", "Save avater error, %s", imageWriter.errorString().toStdString().c_str()); return 0; }
VCard GetVCard::createVCardFromXmppFormat(QXmppVCardIq card) { VCard vCard; vCard.setId(card.id()); vCard.setStatus(card.description()); vCard.setAvatar(createImageFromBytes(card.photo())); return vCard; }
void MyXmppClient::initVCard(const QXmppVCardIq &vCard) { QString bareJid = vCard.from(); RosterItemModel *item = (RosterItemModel*)cachedRoster->find( bareJid ); vCardData dataVCard; if( item != 0 ) { /* set nickname */ QXmppRosterIq::Item itemRoster = rosterManager->getRosterEntry( bareJid ); QString nickName = vCard.nickName(); if( (!nickName.isEmpty()) && (!nickName.isNull()) && (itemRoster.name().isEmpty()) ) { qDebug() << "MyXmppClient::initPresence: updating name for"<< bareJid; item->setContactName( nickName ); } /* avatar */ bool isAvatarCreated = true; QString avatarFile = cacheIM->getAvatarCache( bareJid ); if( (avatarFile.isEmpty() || avatarFile == "qrc:/avatar" || (flVCardRequest != "")) && vCard.photo() != "" ) { isAvatarCreated = cacheIM->setAvatarCache( bareJid, vCard.photo() ); } item->setAvatar(cacheIM->getAvatarCache(bareJid)); dataVCard.nickName = nickName; dataVCard.firstName = vCard.firstName(); dataVCard.fullName = vCard.fullName();; dataVCard.middleName = vCard.middleName(); dataVCard.lastName = vCard.lastName(); dataVCard.url = vCard.url(); dataVCard.eMail = vCard.email(); if( flVCardRequest == bareJid ) { qmlVCard->setPhoto( avatarFile ); qmlVCard->setNickName( vCard.nickName() ); qmlVCard->setMiddleName( vCard.middleName() ); qmlVCard->setLastName( vCard.lastName() ); qmlVCard->setFullName( vCard.fullName() ); qmlVCard->setName( vCard.firstName() ); qmlVCard->setBirthday( vCard.birthday().toString("dd.MM.yyyy") ); qmlVCard->setEMail( vCard.email() ); qmlVCard->setUrl( vCard.url() ); qmlVCard->setJid( bareJid ); flVCardRequest = ""; emit vCardChanged(); } cacheIM->setVCard( bareJid, dataVCard ); } }
void MyXmppClient::initVCard(const QXmppVCardIq &vCard) { QString bareJid = vCard.from(); RosterItemModel *item = (RosterItemModel*)cachedRoster->find( bareJid ); vCardData dataVCard; if( item != 0 ) { /* set nickname */ QXmppRosterIq::Item itemRoster = rosterManager->getRosterEntry( bareJid ); QString nickName = vCard.nickName(); if( (!nickName.isEmpty()) && (!nickName.isNull()) && (itemRoster.name().isEmpty()) ) { qDebug() << "MyXmppClient::initPresence: updating name for"<< bareJid; item->setContactName( nickName ); } /* avatar */ bool isAvatarCreated = true; QString avatarFile = cacheIM->getAvatarCache( bareJid ); if( (avatarFile.isEmpty() || avatarFile == "qrc:/avatar") && vCard.photo() != "" && !disableAvatarCaching) { isAvatarCreated = cacheIM->setAvatarCache( bareJid, vCard.photo() ); } item->setAvatar(cacheIM->getAvatarCache(bareJid)); dataVCard.nickName = nickName; dataVCard.firstName = vCard.firstName(); dataVCard.fullName = vCard.fullName();; dataVCard.middleName = vCard.middleName(); dataVCard.lastName = vCard.lastName(); dataVCard.url = vCard.url(); dataVCard.eMail = vCard.email(); cacheIM->setVCard( bareJid, dataVCard ); } }
void Xmpp::vCardReceived (const QXmppVCardIq& vCard) { QByteArray photo = vCard.photo(); QBuffer buffer; buffer.setData (photo); buffer.open (QIODevice::ReadOnly); QImageReader imageReader (&buffer); QImage image = imageReader.read(); if (image.isNull()) image = QImage (":/faces/faces/generic-user.png"); jids.append (vCard.from()); users.append (vCard.fullName()); emit newUser (vCard.fullName(), vCard.from(), image); }
void TestPackets::testVCard() { const QByteArray xml( "<iq id=\"vcard1\" type=\"set\">" "<vCard xmlns=\"vcard-temp\">" "<BDAY>1983-09-14</BDAY>" "<EMAIL><INTERNET/><USERID>[email protected]</USERID></EMAIL>" "<FN>Foo Bar!</FN>" "<NICKNAME>FooBar</NICKNAME>" "<N><GIVEN>Foo</GIVEN><FAMILY>Wiz</FAMILY><MIDDLE>Baz</MIDDLE></N>" "<PHOTO>" "<TYPE>image/png</TYPE>" "<BINVAL>" "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAAXNSR0IArs4c6QAAAAlwSFlzAAA" "UIgAAFCIBjw1HyAAAAAd0SU1FB9oIHQInNvuJovgAAAAiSURBVAjXY2TQ+s/AwMDAwPD/GiMDlP" "WfgYGBiQEHGJwSAK2BBQ1f3uvpAAAAAElFTkSuQmCC" "</BINVAL>" "</PHOTO>" "</vCard>" "</iq>"); QXmppVCardIq vcard; parsePacket(vcard, xml); QCOMPARE(vcard.birthday(), QDate(1983, 9, 14)); QCOMPARE(vcard.email(), QLatin1String("*****@*****.**")); QCOMPARE(vcard.nickName(), QLatin1String("FooBar")); QCOMPARE(vcard.fullName(), QLatin1String("Foo Bar!")); QCOMPARE(vcard.firstName(), QLatin1String("Foo")); QCOMPARE(vcard.middleName(), QLatin1String("Baz")); QCOMPARE(vcard.lastName(), QLatin1String("Wiz")); QCOMPARE(vcard.photo(), QByteArray::fromBase64( "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAAXNSR0IArs4c6QAAAAlwSFlzAAA" "UIgAAFCIBjw1HyAAAAAd0SU1FB9oIHQInNvuJovgAAAAiSURBVAjXY2TQ+s/AwMDAwPD/GiMDlP" "WfgYGBiQEHGJwSAK2BBQ1f3uvpAAAAAElFTkSuQmCC")); QCOMPARE(vcard.photoType(), QLatin1String("image/png")); serializePacket(vcard, xml); }
void tst_QXmppVCardIq::testVCard() { const QByteArray xml( "<iq id=\"vcard1\" type=\"set\">" "<vCard xmlns=\"vcard-temp\">" "<ADR><CTRY>France</CTRY></ADR>" "<BDAY>1983-09-14</BDAY>" "<DESC>I like XMPP.</DESC>" "<EMAIL><INTERNET/><USERID>[email protected]</USERID></EMAIL>" "<FN>Foo Bar!</FN>" "<NICKNAME>FooBar</NICKNAME>" "<N><GIVEN>Foo</GIVEN><FAMILY>Wiz</FAMILY><MIDDLE>Baz</MIDDLE></N>" "<TEL><HOME/><NUMBER>12345</NUMBER></TEL>" "<TEL><WORK/><NUMBER>67890</NUMBER></TEL>" "<PHOTO>" "<TYPE>image/png</TYPE>" "<BINVAL>" "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAAXNSR0IArs4c6QAAAAlwSFlzAAA" "UIgAAFCIBjw1HyAAAAAd0SU1FB9oIHQInNvuJovgAAAAiSURBVAjXY2TQ+s/AwMDAwPD/GiMDlP" "WfgYGBiQEHGJwSAK2BBQ1f3uvpAAAAAElFTkSuQmCC" "</BINVAL>" "</PHOTO>" "<URL>https://github.com/qxmpp-project/qxmpp/</URL>" "<ORG>" "<ORGNAME>QXmpp foundation</ORGNAME>" "<ORGUNIT>Main QXmpp dev unit</ORGUNIT>" "</ORG>" "<TITLE>Executive Director</TITLE>" "<ROLE>Patron Saint</ROLE>" "</vCard>" "</iq>"); QXmppVCardIq vcard; parsePacket(vcard, xml); QCOMPARE(vcard.addresses().size(), 1); QCOMPARE(vcard.addresses()[0].country(), QLatin1String("France")); QCOMPARE(int(vcard.addresses()[0].type()), int(QXmppVCardEmail::None)); QCOMPARE(vcard.birthday(), QDate(1983, 9, 14)); QCOMPARE(vcard.description(), QLatin1String("I like XMPP.")); QCOMPARE(vcard.email(), QLatin1String("*****@*****.**")); QCOMPARE(vcard.emails().size(), 1); QCOMPARE(vcard.emails()[0].address(), QLatin1String("*****@*****.**")); QCOMPARE(int(vcard.emails()[0].type()), int(QXmppVCardEmail::Internet)); QCOMPARE(vcard.nickName(), QLatin1String("FooBar")); QCOMPARE(vcard.fullName(), QLatin1String("Foo Bar!")); QCOMPARE(vcard.firstName(), QLatin1String("Foo")); QCOMPARE(vcard.middleName(), QLatin1String("Baz")); QCOMPARE(vcard.lastName(), QLatin1String("Wiz")); QCOMPARE(vcard.phones().size(), 2); QCOMPARE(vcard.phones()[0].number(), QLatin1String("12345")); QCOMPARE(int(vcard.phones()[0].type()), int(QXmppVCardEmail::Home)); QCOMPARE(vcard.phones()[1].number(), QLatin1String("67890")); QCOMPARE(int(vcard.phones()[1].type()), int(QXmppVCardEmail::Work)); QCOMPARE(vcard.photo(), QByteArray::fromBase64( "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAAXNSR0IArs4c6QAAAAlwSFlzAAA" "UIgAAFCIBjw1HyAAAAAd0SU1FB9oIHQInNvuJovgAAAAiSURBVAjXY2TQ+s/AwMDAwPD/GiMDlP" "WfgYGBiQEHGJwSAK2BBQ1f3uvpAAAAAElFTkSuQmCC")); QCOMPARE(vcard.photoType(), QLatin1String("image/png")); QCOMPARE(vcard.url(), QLatin1String("https://github.com/qxmpp-project/qxmpp/")); const QXmppVCardOrganization &orgInfo = vcard.organization(); QCOMPARE(orgInfo.organization(), QLatin1String("QXmpp foundation")); QCOMPARE(orgInfo.unit(), QLatin1String("Main QXmpp dev unit")); QCOMPARE(orgInfo.title(), QLatin1String("Executive Director")); QCOMPARE(orgInfo.role(), QLatin1String("Patron Saint")); serializePacket(vcard, xml); }