File indexing completed on 2024-05-05 16:06:31

0001 /*
0002     This file is part of the KContacts framework.
0003     SPDX-FileCopyrightText: 2002 Tobias Koenig <tokoe@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "vcardconverter.h"
0009 #include "vcardtool_p.h"
0010 
0011 using namespace KContacts;
0012 
0013 VCardConverter::VCardConverter()
0014     : d(nullptr)
0015 {
0016 }
0017 
0018 VCardConverter::~VCardConverter()
0019 {
0020 }
0021 
0022 QByteArray VCardConverter::exportVCard(const Addressee &addr, Version version) const
0023 {
0024     Addressee::List list;
0025     list.append(addr);
0026 
0027     return exportVCards(list, version);
0028 }
0029 
0030 QByteArray VCardConverter::exportVCards(const Addressee::List &list, Version version) const
0031 {
0032     VCardTool tool;
0033     QByteArray returnValue;
0034     switch (version) {
0035     case v2_1:
0036         returnValue = tool.exportVCards(list, VCard::v2_1);
0037         break;
0038     case v3_0:
0039         returnValue = tool.exportVCards(list, VCard::v3_0);
0040         break;
0041     case v4_0:
0042         returnValue = tool.exportVCards(list, VCard::v4_0);
0043         break;
0044     }
0045 
0046     return returnValue;
0047 }
0048 
0049 QByteArray VCardConverter::createVCard(const Addressee &addr, Version version) const
0050 {
0051     Addressee::List list;
0052     list.append(addr);
0053 
0054     return createVCards(list, version);
0055 }
0056 
0057 QByteArray VCardConverter::createVCards(const Addressee::List &list, Version version) const
0058 {
0059     VCardTool tool;
0060     QByteArray returnValue;
0061     switch (version) {
0062     case v2_1:
0063         returnValue = tool.createVCards(list, VCard::v2_1);
0064         break;
0065     case v3_0:
0066         returnValue = tool.createVCards(list, VCard::v3_0);
0067         break;
0068     case v4_0:
0069         returnValue = tool.createVCards(list, VCard::v4_0);
0070         break;
0071     }
0072 
0073     return returnValue;
0074 }
0075 
0076 Addressee VCardConverter::parseVCard(const QByteArray &vcard) const
0077 {
0078     Addressee::List list = parseVCards(vcard);
0079 
0080     return list.isEmpty() ? Addressee() : list[0];
0081 }
0082 
0083 Addressee::List VCardConverter::parseVCards(const QByteArray &vcard) const
0084 {
0085     VCardTool tool;
0086 
0087     return tool.parseVCards(vcard);
0088 }
0089 
0090 /* Helper functions */
0091 
0092 QString KContacts::dateToVCardString(const QDateTime &dateTime)
0093 {
0094     return dateTime.toString(QStringLiteral("yyyyMMddThhmmssZ"));
0095 }
0096 
0097 QString KContacts::dateToVCardString(QDate date)
0098 {
0099     return date.toString(QStringLiteral("yyyyMMdd"));
0100 }
0101 
0102 QDateTime KContacts::VCardStringToDate(const QString &dateString)
0103 {
0104     QDate date;
0105     QTime time;
0106     QString d(dateString);
0107 
0108     d = d.remove(QLatin1Char('-')).remove(QLatin1Char(':'));
0109 
0110     if (d.length() >= 8) {
0111 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0112         const QStringView strView(d);
0113         date = QDate(strView.mid(0, 4).toUInt(), strView.mid(4, 2).toUInt(), strView.mid(6, 2).toUInt());
0114 #else
0115         date = QDate(d.midRef(0, 4).toUInt(), d.midRef(4, 2).toUInt(), d.midRef(6, 2).toUInt());
0116 #endif
0117     }
0118 
0119     if (d.length() > 9 && d[8].toUpper() == QLatin1Char('T')) {
0120 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0121         const QStringView strView(d);
0122         time = QTime(strView.mid(9, 2).toUInt(), strView.mid(11, 2).toUInt(), strView.mid(13, 2).toUInt());
0123 #else
0124         time = QTime(d.midRef(9, 2).toUInt(), d.midRef(11, 2).toUInt(), d.midRef(13, 2).toUInt());
0125 #endif
0126     }
0127 
0128     return QDateTime(date, time);
0129 }
0130 
0131 void KContacts::adaptIMAttributes(QByteArray &data)
0132 {
0133     data.replace("X-messaging/aim-All", ("X-AIM"));
0134     data.replace("X-messaging/icq-All", ("X-ICQ"));
0135     data.replace("X-messaging/xmpp-All", ("X-JABBER"));
0136     data.replace("X-messaging/msn-All", ("X-MSN"));
0137     data.replace("X-messaging/yahoo-All", ("X-YAHOO"));
0138     data.replace("X-messaging/gadu-All", ("X-GADUGADU"));
0139     data.replace("X-messaging/skype-All", ("X-SKYPE"));
0140     data.replace("X-messaging/groupwise-All", ("X-GROUPWISE"));
0141     data.replace("X-messaging/sms-All", ("X-SMS"));
0142     data.replace("X-messaging/meanwhile-All", ("X-MEANWHILE"));
0143     data.replace("X-messaging/irc-All", ("X-IRC"));
0144     data.replace("X-messaging/googletalk-All", ("X-GTALK"));
0145 }