File indexing completed on 2024-04-21 14:54:32

0001 /*
0002     This file is part of the KContacts framework.
0003     SPDX-FileCopyrightText: 2015-2019 Laurent Montel <montel@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "calendarurl.h"
0009 #include "parametermap_p.h"
0010 
0011 #include <QDataStream>
0012 #include <QStringList>
0013 #include <QUrl>
0014 
0015 using namespace KContacts;
0016 
0017 class Q_DECL_HIDDEN CalendarUrl::Private : public QSharedData
0018 {
0019 public:
0020     Private()
0021     {
0022     }
0023 
0024     Private(const Private &other)
0025         : QSharedData(other)
0026     {
0027         mParamMap = other.mParamMap;
0028         type = other.type;
0029         url = other.url;
0030     }
0031 
0032     static QString typeToString(CalendarUrl::CalendarType type);
0033 
0034     ParameterMap mParamMap;
0035     QUrl url;
0036     CalendarUrl::CalendarType type;
0037 };
0038 
0039 QString CalendarUrl::Private::typeToString(CalendarUrl::CalendarType type)
0040 {
0041     QString ret;
0042     switch (type) {
0043     case Unknown:
0044     case EndCalendarType:
0045         ret = QStringLiteral("Unknown");
0046         break;
0047     case FBUrl:
0048         ret = QStringLiteral("FreeBusy");
0049         break;
0050     case CALUri:
0051         ret = QStringLiteral("CalUri");
0052         break;
0053     case CALADRUri:
0054         ret = QStringLiteral("Caladruri");
0055         break;
0056     }
0057     return ret;
0058 }
0059 
0060 CalendarUrl::CalendarUrl()
0061     : d(new Private)
0062 {
0063     d->type = Unknown;
0064 }
0065 
0066 CalendarUrl::CalendarUrl(CalendarUrl::CalendarType type)
0067     : d(new Private)
0068 {
0069     d->type = type;
0070 }
0071 
0072 CalendarUrl::CalendarUrl(const CalendarUrl &other)
0073     : d(other.d)
0074 {
0075 }
0076 
0077 CalendarUrl::~CalendarUrl()
0078 {
0079 }
0080 
0081 bool CalendarUrl::operator==(const CalendarUrl &other) const
0082 {
0083     return (d->mParamMap == other.d->mParamMap) && (d->type == other.type()) && (d->url == other.url());
0084 }
0085 
0086 bool CalendarUrl::operator!=(const CalendarUrl &other) const
0087 {
0088     return !(other == *this);
0089 }
0090 
0091 CalendarUrl &CalendarUrl::operator=(const CalendarUrl &other)
0092 {
0093     if (this != &other) {
0094         d = other.d;
0095     }
0096 
0097     return *this;
0098 }
0099 
0100 QString CalendarUrl::toString() const
0101 {
0102     QString str = QLatin1String("CalendarUrl {\n");
0103     str += QStringLiteral("    url: %1\n").arg(d->url.toString());
0104     str += QStringLiteral("    type: %1\n").arg(CalendarUrl::Private::typeToString(d->type));
0105     str += d->mParamMap.toString();
0106     str += QLatin1String("}\n");
0107     return str;
0108 }
0109 
0110 #if KCONTACTS_BUILD_DEPRECATED_SINCE(5, 88)
0111 void CalendarUrl::setParameters(const QMap<QString, QStringList> &params)
0112 {
0113     d->mParamMap = ParameterMap::fromQMap(params);
0114 }
0115 #endif
0116 
0117 #if KCONTACTS_BUILD_DEPRECATED_SINCE(5, 88)
0118 QMap<QString, QStringList> CalendarUrl::parameters() const
0119 {
0120     return d->mParamMap.toQMap();
0121 }
0122 #endif
0123 
0124 void CalendarUrl::setParams(const ParameterMap &params)
0125 {
0126     d->mParamMap = params;
0127 }
0128 
0129 ParameterMap CalendarUrl::params() const
0130 {
0131     return d->mParamMap;
0132 }
0133 
0134 bool CalendarUrl::isValid() const
0135 {
0136     return (d->type != Unknown) && (d->url.isValid());
0137 }
0138 
0139 void CalendarUrl::setType(CalendarUrl::CalendarType type)
0140 {
0141     d->type = type;
0142 }
0143 
0144 CalendarUrl::CalendarType CalendarUrl::type() const
0145 {
0146     return d->type;
0147 }
0148 
0149 void CalendarUrl::setUrl(const QUrl &url)
0150 {
0151     d->url = url;
0152 }
0153 
0154 QUrl CalendarUrl::url() const
0155 {
0156     return d->url;
0157 }
0158 
0159 QDataStream &KContacts::operator<<(QDataStream &s, const CalendarUrl &calUrl)
0160 {
0161     return s << calUrl.d->mParamMap << static_cast<uint>(calUrl.d->type) << calUrl.d->url;
0162 }
0163 
0164 QDataStream &KContacts::operator>>(QDataStream &s, CalendarUrl &calUrl)
0165 {
0166     uint type;
0167     s >> calUrl.d->mParamMap >> type >> calUrl.d->url;
0168     calUrl.d->type = static_cast<CalendarUrl::CalendarType>(type);
0169     return s;
0170 }