diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-02-08 12:51:15 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-02-08 12:51:15 +0000 |
| commit | deb9d6cb53057ca8b90d10d6a3bdc5dcfd1b3ee4 (patch) | |
| tree | d956bad28e28aadc3c83dbf88b3eddb5e1d9a9f4 /src/base/QXmppVCardIq.cpp | |
| parent | e8a1ad0cc608f12874ba4bafbd8282fa537ec9fb (diff) | |
| download | qxmpp-deb9d6cb53057ca8b90d10d6a3bdc5dcfd1b3ee4.tar.gz | |
move files common to client/server into "base"
Diffstat (limited to 'src/base/QXmppVCardIq.cpp')
| -rw-r--r-- | src/base/QXmppVCardIq.cpp | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/src/base/QXmppVCardIq.cpp b/src/base/QXmppVCardIq.cpp new file mode 100644 index 00000000..aaaf4554 --- /dev/null +++ b/src/base/QXmppVCardIq.cpp @@ -0,0 +1,310 @@ +/* + * Copyright (C) 2008-2011 The QXmpp developers + * + * Author: + * Manjeet Dahiya + * + * Source: + * http://code.google.com/p/qxmpp + * + * This file is a part of QXmpp library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + + +#include <QBuffer> +#include <QXmlStreamWriter> + +#include "QXmppVCardIq.h" +#include "QXmppUtils.h" +#include "QXmppConstants.h" + +QString getImageType(const QByteArray &contents) +{ + if (contents.startsWith("\x89PNG\x0d\x0a\x1a\x0a")) + return "image/png"; + else if (contents.startsWith("\x8aMNG")) + return "video/x-mng"; + else if (contents.startsWith("GIF8")) + return "image/gif"; + else if (contents.startsWith("BM")) + return "image/bmp"; + else if (contents.contains("/* XPM */")) + return "image/x-xpm"; + else if (contents.contains("<?xml") && contents.contains("<svg")) + return "image/svg+xml"; + else if (contents.startsWith("\xFF\xD8\xFF\xE0")) + return "image/jpeg"; + return "image/unknown"; +} + +/// Constructs a QXmppVCardIq for the specified recipient. +/// +/// \param jid + +QXmppVCardIq::QXmppVCardIq(const QString& jid) : QXmppIq(QXmppIq::Get) +{ + // for self jid should be empty + setTo(jid); +} + +/// Returns the date of birth of the individual associated with the vCard. +/// + +QDate QXmppVCardIq::birthday() const +{ + return m_birthday; +} + +/// Sets the date of birth of the individual associated with the vCard. +/// +/// \param birthday + +void QXmppVCardIq::setBirthday(const QDate &birthday) +{ + m_birthday = birthday; +} + +/// Returns the email address. +/// + +QString QXmppVCardIq::email() const +{ + return m_email; +} + +/// Sets the email address. +/// +/// \param email + +void QXmppVCardIq::setEmail(const QString &email) +{ + m_email = email; +} + +/// Returns the first name. +/// + +QString QXmppVCardIq::firstName() const +{ + return m_firstName; +} + +/// Sets the first name. +/// +/// \param firstName + +void QXmppVCardIq::setFirstName(const QString &firstName) +{ + m_firstName = firstName; +} + +/// Returns the full name. +/// + +QString QXmppVCardIq::fullName() const +{ + return m_fullName; +} + +/// Sets the full name. +/// +/// \param fullName + +void QXmppVCardIq::setFullName(const QString &fullName) +{ + m_fullName = fullName; +} + +/// Returns the last name. +/// + +QString QXmppVCardIq::lastName() const +{ + return m_lastName; +} + +/// Sets the last name. +/// +/// \param lastName + +void QXmppVCardIq::setLastName(const QString &lastName) +{ + m_lastName = lastName; +} + +/// Returns the middle name. +/// + +QString QXmppVCardIq::middleName() const +{ + return m_middleName; +} + +/// Sets the middle name. +/// +/// \param middleName + +void QXmppVCardIq::setMiddleName(const QString &middleName) +{ + m_middleName = middleName; +} + +/// Returns the nickname. +/// + +QString QXmppVCardIq::nickName() const +{ + return m_nickName; +} + +/// Sets the nickname. +/// +/// \param nickName + +void QXmppVCardIq::setNickName(const QString &nickName) +{ + m_nickName = nickName; +} + +/// Returns the URL associated with the vCard. It can represent the user's +/// homepage or a location at which you can find real-time information about +/// the vCard. + +QString QXmppVCardIq::url() const +{ + return m_url; +} + +/// Sets the URL associated with the vCard. It can represent the user's +/// homepage or a location at which you can find real-time information about +/// the vCard. +/// +/// \param url + +void QXmppVCardIq::setUrl(const QString& url) +{ + m_url = url; +} + +/// Returns the photo's binary contents. +/// +/// If you want to use the photo as a QImage you can use: +/// +/// \code +/// QBuffer buffer; +/// buffer.setData(myCard.photo()); +/// buffer.open(QIODevice::ReadOnly); +/// QImageReader imageReader(&buffer); +/// QImage myImage = imageReader.read(); +/// \endcode + +QByteArray QXmppVCardIq::photo() const +{ + return m_photo; +} + +/// Sets the photo's binary contents. + +void QXmppVCardIq::setPhoto(const QByteArray& photo) +{ + m_photo = photo; +} + +/// Returns the photo's MIME type. + +QString QXmppVCardIq::photoType() const +{ + return m_photoType; +} + +/// Sets the photo's MIME type. + +void QXmppVCardIq::setPhotoType(const QString& photoType) +{ + m_photoType = photoType; +} + +bool QXmppVCardIq::isVCard(const QDomElement &nodeRecv) +{ + return nodeRecv.firstChildElement("vCard").namespaceURI() == ns_vcard; +} + +void QXmppVCardIq::parseElementFromChild(const QDomElement& nodeRecv) +{ + // vCard + QDomElement cardElement = nodeRecv.firstChildElement("vCard"); + m_birthday = QDate::fromString(cardElement.firstChildElement("BDAY").text(), "yyyy-MM-dd"); + QDomElement emailElement = cardElement.firstChildElement("EMAIL"); + m_email = emailElement.firstChildElement("USERID").text(); + m_fullName = cardElement.firstChildElement("FN").text(); + m_nickName = cardElement.firstChildElement("NICKNAME").text(); + QDomElement nameElement = cardElement.firstChildElement("N"); + m_firstName = nameElement.firstChildElement("GIVEN").text(); + m_lastName = nameElement.firstChildElement("FAMILY").text(); + m_middleName = nameElement.firstChildElement("MIDDLE").text(); + m_url = cardElement.firstChildElement("URL").text(); + QDomElement photoElement = cardElement.firstChildElement("PHOTO"); + QByteArray base64data = photoElement. + firstChildElement("BINVAL").text().toAscii(); + m_photo = QByteArray::fromBase64(base64data); + m_photoType = photoElement.firstChildElement("TYPE").text(); +} + +void QXmppVCardIq::toXmlElementFromChild(QXmlStreamWriter *writer) const +{ + writer->writeStartElement("vCard"); + writer->writeAttribute("xmlns", ns_vcard); + if (m_birthday.isValid()) + helperToXmlAddTextElement(writer, "BDAY", m_birthday.toString("yyyy-MM-dd")); + if (!m_email.isEmpty()) + { + writer->writeStartElement("EMAIL"); + writer->writeEmptyElement("INTERNET"); + helperToXmlAddTextElement(writer, "USERID", m_email); + writer->writeEndElement(); + } + if (!m_fullName.isEmpty()) + helperToXmlAddTextElement(writer, "FN", m_fullName); + if(!m_nickName.isEmpty()) + helperToXmlAddTextElement(writer, "NICKNAME", m_nickName); + if (!m_firstName.isEmpty() || + !m_lastName.isEmpty() || + !m_middleName.isEmpty()) + { + writer->writeStartElement("N"); + if (!m_firstName.isEmpty()) + helperToXmlAddTextElement(writer, "GIVEN", m_firstName); + if (!m_lastName.isEmpty()) + helperToXmlAddTextElement(writer, "FAMILY", m_lastName); + if (!m_middleName.isEmpty()) + helperToXmlAddTextElement(writer, "MIDDLE", m_middleName); + writer->writeEndElement(); + } + if (!m_url.isEmpty()) + helperToXmlAddTextElement(writer, "URL", m_url); + + if(!photo().isEmpty()) + { + writer->writeStartElement("PHOTO"); + QString photoType = m_photoType; + if (photoType.isEmpty()) + photoType = getImageType(m_photo); + helperToXmlAddTextElement(writer, "TYPE", photoType); + helperToXmlAddTextElement(writer, "BINVAL", m_photo.toBase64()); + writer->writeEndElement(); + } + + writer->writeEndElement(); +} + |
