File indexing completed on 2024-04-14 03:51:24

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 void CalendarUrl::setParams(const ParameterMap &params)
0111 {
0112     d->mParamMap = params;
0113 }
0114 
0115 ParameterMap CalendarUrl::params() const
0116 {
0117     return d->mParamMap;
0118 }
0119 
0120 bool CalendarUrl::isValid() const
0121 {
0122     return (d->type != Unknown) && (d->url.isValid());
0123 }
0124 
0125 void CalendarUrl::setType(CalendarUrl::CalendarType type)
0126 {
0127     d->type = type;
0128 }
0129 
0130 CalendarUrl::CalendarType CalendarUrl::type() const
0131 {
0132     return d->type;
0133 }
0134 
0135 void CalendarUrl::setUrl(const QUrl &url)
0136 {
0137     d->url = url;
0138 }
0139 
0140 QUrl CalendarUrl::url() const
0141 {
0142     return d->url;
0143 }
0144 
0145 QDataStream &KContacts::operator<<(QDataStream &s, const CalendarUrl &calUrl)
0146 {
0147     return s << calUrl.d->mParamMap << static_cast<uint>(calUrl.d->type) << calUrl.d->url;
0148 }
0149 
0150 QDataStream &KContacts::operator>>(QDataStream &s, CalendarUrl &calUrl)
0151 {
0152     uint type;
0153     s >> calUrl.d->mParamMap >> type >> calUrl.d->url;
0154     calUrl.d->type = static_cast<CalendarUrl::CalendarType>(type);
0155     return s;
0156 }