1 /* 2 * Copyright (C) 2008-2021 The QXmpp developers 3 * 4 * Author: 5 * Manjeet Dahiya 6 * 7 * Source: 8 * https://github.com/qxmpp-project/qxmpp 9 * 10 * This file is a part of QXmpp library. 11 * 12 * This library is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU Lesser General Public 14 * License as published by the Free Software Foundation; either 15 * version 2.1 of the License, or (at your option) any later version. 16 * 17 * This library is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 * Lesser General Public License for more details. 21 * 22 */ 23 24 #ifndef QXMPPVCARDIQ_H 25 #define QXMPPVCARDIQ_H 26 27 #include "QXmppIq.h" 28 29 #include <QDate> 30 #include <QDomElement> 31 #include <QMap> 32 33 class QXmppVCardAddressPrivate; 34 class QXmppVCardEmailPrivate; 35 class QXmppVCardPhonePrivate; 36 class QXmppVCardOrganizationPrivate; 37 class QXmppVCardIqPrivate; 38 39 /// \brief Represent a vCard address. 40 41 class QXMPP_EXPORT QXmppVCardAddress 42 { 43 public: 44 /// \brief Describes e-mail address types. 45 enum TypeFlag { 46 None = 0x0, 47 Home = 0x1, 48 Work = 0x2, 49 Postal = 0x4, 50 Preferred = 0x8 51 }; 52 Q_DECLARE_FLAGS(Type, TypeFlag) 53 54 QXmppVCardAddress(); 55 QXmppVCardAddress(const QXmppVCardAddress &other); 56 ~QXmppVCardAddress(); 57 58 QXmppVCardAddress &operator=(const QXmppVCardAddress &other); 59 60 QString country() const; 61 void setCountry(const QString &country); 62 63 QString locality() const; 64 void setLocality(const QString &locality); 65 66 QString postcode() const; 67 void setPostcode(const QString &postcode); 68 69 QString region() const; 70 void setRegion(const QString ®ion); 71 72 QString street() const; 73 void setStreet(const QString &street); 74 75 Type type() const; 76 void setType(Type type); 77 78 /// \cond 79 void parse(const QDomElement &element); 80 void toXml(QXmlStreamWriter *stream) const; 81 /// \endcond 82 83 private: 84 QSharedDataPointer<QXmppVCardAddressPrivate> d; 85 }; 86 87 QXMPP_EXPORT bool operator==(const QXmppVCardAddress &, const QXmppVCardAddress &); 88 QXMPP_EXPORT bool operator!=(const QXmppVCardAddress &, const QXmppVCardAddress &); 89 90 /// \brief Represents a vCard e-mail address. 91 92 class QXMPP_EXPORT QXmppVCardEmail 93 { 94 public: 95 /// \brief Describes e-mail address types. 96 enum TypeFlag { 97 None = 0x0, 98 Home = 0x1, 99 Work = 0x2, 100 Internet = 0x4, 101 Preferred = 0x8, 102 X400 = 0x10 103 }; 104 Q_DECLARE_FLAGS(Type, TypeFlag) 105 106 QXmppVCardEmail(); 107 QXmppVCardEmail(const QXmppVCardEmail &other); 108 ~QXmppVCardEmail(); 109 110 QXmppVCardEmail &operator=(const QXmppVCardEmail &other); 111 112 QString address() const; 113 void setAddress(const QString &address); 114 115 Type type() const; 116 void setType(Type type); 117 118 /// \cond 119 void parse(const QDomElement &element); 120 void toXml(QXmlStreamWriter *stream) const; 121 /// \endcond 122 123 private: 124 QSharedDataPointer<QXmppVCardEmailPrivate> d; 125 }; 126 127 QXMPP_EXPORT bool operator==(const QXmppVCardEmail &, const QXmppVCardEmail &); 128 QXMPP_EXPORT bool operator!=(const QXmppVCardEmail &, const QXmppVCardEmail &); 129 130 /// \brief Represents a vCard phone number. 131 132 class QXMPP_EXPORT QXmppVCardPhone 133 { 134 public: 135 /// \brief Describes phone number types. 136 enum TypeFlag { 137 None = 0x0, 138 Home = 0x1, 139 Work = 0x2, 140 Voice = 0x4, 141 Fax = 0x8, 142 Pager = 0x10, 143 Messaging = 0x20, 144 Cell = 0x40, 145 Video = 0x80, 146 BBS = 0x100, 147 Modem = 0x200, 148 ISDN = 0x400, 149 PCS = 0x800, 150 Preferred = 0x1000 151 }; 152 Q_DECLARE_FLAGS(Type, TypeFlag) 153 154 QXmppVCardPhone(); 155 QXmppVCardPhone(const QXmppVCardPhone &other); 156 ~QXmppVCardPhone(); 157 158 QXmppVCardPhone &operator=(const QXmppVCardPhone &other); 159 160 QString number() const; 161 void setNumber(const QString &number); 162 163 Type type() const; 164 void setType(Type type); 165 166 /// \cond 167 void parse(const QDomElement &element); 168 void toXml(QXmlStreamWriter *stream) const; 169 /// \endcond 170 171 private: 172 QSharedDataPointer<QXmppVCardPhonePrivate> d; 173 }; 174 175 QXMPP_EXPORT bool operator==(const QXmppVCardPhone &, const QXmppVCardPhone &); 176 QXMPP_EXPORT bool operator!=(const QXmppVCardPhone &, const QXmppVCardPhone &); 177 178 /// \brief Represents organization information in XMPP vCards. 179 /// 180 /// This contains both information about organization itself and 181 /// information about job position in the organization. 182 183 class QXMPP_EXPORT QXmppVCardOrganization 184 { 185 public: 186 QXmppVCardOrganization(); 187 QXmppVCardOrganization(const QXmppVCardOrganization &other); 188 ~QXmppVCardOrganization(); 189 190 QXmppVCardOrganization &operator=(const QXmppVCardOrganization &other); 191 192 QString organization() const; 193 void setOrganization(const QString &); 194 195 QString unit() const; 196 void setUnit(const QString &); 197 198 QString title() const; 199 void setTitle(const QString &); 200 201 QString role() const; 202 void setRole(const QString &); 203 204 /// \cond 205 void parse(const QDomElement &element); 206 void toXml(QXmlStreamWriter *stream) const; 207 /// \endcond 208 209 private: 210 QSharedDataPointer<QXmppVCardOrganizationPrivate> d; 211 }; 212 213 QXMPP_EXPORT bool operator==(const QXmppVCardOrganization &, const QXmppVCardOrganization &); 214 QXMPP_EXPORT bool operator!=(const QXmppVCardOrganization &, const QXmppVCardOrganization &); 215 216 /// \brief Represents the XMPP vCard. 217 /// 218 /// The functions names are self explanatory. 219 /// Look at QXmppVCardManager and \xep{0054}: vcard-temp for more details. 220 /// 221 /// There are many field of XMPP vCard which are not present in 222 /// this class. File a issue for the same. We will add the requested 223 /// field to this class. 224 /// 225 226 class QXMPP_EXPORT QXmppVCardIq : public QXmppIq 227 { 228 public: 229 QXmppVCardIq(const QString &bareJid = QString()); 230 QXmppVCardIq(const QXmppVCardIq &other); 231 ~QXmppVCardIq() override; 232 233 QXmppVCardIq &operator=(const QXmppVCardIq &other); 234 235 QDate birthday() const; 236 void setBirthday(const QDate &birthday); 237 238 QString description() const; 239 void setDescription(const QString &description); 240 241 QString email() const; 242 void setEmail(const QString &); 243 244 QString firstName() const; 245 void setFirstName(const QString &); 246 247 QString fullName() const; 248 void setFullName(const QString &); 249 250 QString lastName() const; 251 void setLastName(const QString &); 252 253 QString middleName() const; 254 void setMiddleName(const QString &); 255 256 QString nickName() const; 257 void setNickName(const QString &); 258 259 QByteArray photo() const; 260 void setPhoto(const QByteArray &); 261 262 QString photoType() const; 263 void setPhotoType(const QString &type); 264 265 QString url() const; 266 void setUrl(const QString &); 267 268 QList<QXmppVCardAddress> addresses() const; 269 void setAddresses(const QList<QXmppVCardAddress> &addresses); 270 271 QList<QXmppVCardEmail> emails() const; 272 void setEmails(const QList<QXmppVCardEmail> &emails); 273 274 QList<QXmppVCardPhone> phones() const; 275 void setPhones(const QList<QXmppVCardPhone> &phones); 276 277 QXmppVCardOrganization organization() const; 278 void setOrganization(const QXmppVCardOrganization &); 279 280 /// \cond 281 static bool isVCard(const QDomElement &element); 282 /// \endcond 283 284 protected: 285 /// \cond 286 void parseElementFromChild(const QDomElement &) override; 287 void toXmlElementFromChild(QXmlStreamWriter *writer) const override; 288 /// \endcond 289 290 private: 291 QSharedDataPointer<QXmppVCardIqPrivate> d; 292 }; 293 294 QXMPP_EXPORT bool operator==(const QXmppVCardIq &, const QXmppVCardIq &); 295 QXMPP_EXPORT bool operator!=(const QXmppVCardIq &, const QXmppVCardIq &); 296 297 #endif // QXMPPVCARDIQ_H 298