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

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 "sound.h"
0009 
0010 #include <QDataStream>
0011 #include <QSharedData>
0012 
0013 using namespace KContacts;
0014 
0015 class Q_DECL_HIDDEN Sound::Private : public QSharedData
0016 {
0017 public:
0018     Private()
0019         : mIntern(false)
0020     {
0021     }
0022 
0023     Private(const Private &other)
0024         : QSharedData(other)
0025     {
0026         mUrl = other.mUrl;
0027         mData = other.mData;
0028         mIntern = other.mIntern;
0029     }
0030 
0031     QString mUrl;
0032     QByteArray mData;
0033 
0034     bool mIntern;
0035 };
0036 
0037 Sound::Sound()
0038     : d(new Private)
0039 {
0040 }
0041 
0042 Sound::Sound(const QString &url)
0043     : d(new Private)
0044 {
0045     d->mUrl = url;
0046 }
0047 
0048 Sound::Sound(const QByteArray &data)
0049     : d(new Private)
0050 {
0051     d->mIntern = true;
0052     d->mData = data;
0053 }
0054 
0055 Sound::Sound(const Sound &other)
0056     : d(other.d)
0057 {
0058 }
0059 
0060 Sound::~Sound()
0061 {
0062 }
0063 
0064 Sound &Sound::operator=(const Sound &other)
0065 {
0066     if (this != &other) {
0067         d = other.d;
0068     }
0069 
0070     return *this;
0071 }
0072 
0073 bool Sound::operator==(const Sound &other) const
0074 {
0075     if (d->mIntern != other.d->mIntern) {
0076         return false;
0077     }
0078 
0079     if (d->mIntern) {
0080         if (d->mData != other.d->mData) {
0081             return false;
0082         }
0083     } else {
0084         if (d->mUrl != other.d->mUrl) {
0085             return false;
0086         }
0087     }
0088 
0089     return true;
0090 }
0091 
0092 bool Sound::operator!=(const Sound &other) const
0093 {
0094     return !(other == *this);
0095 }
0096 
0097 void Sound::setUrl(const QString &url)
0098 {
0099     d->mIntern = false;
0100     d->mUrl = url;
0101 }
0102 
0103 void Sound::setData(const QByteArray &data)
0104 {
0105     d->mIntern = true;
0106     d->mData = data;
0107 }
0108 
0109 bool Sound::isIntern() const
0110 {
0111     return d->mIntern;
0112 }
0113 
0114 bool Sound::isEmpty() const
0115 {
0116     return (d->mIntern && d->mData.isEmpty()) || (!d->mIntern && d->mUrl.isEmpty());
0117 }
0118 
0119 QString Sound::url() const
0120 {
0121     return d->mUrl;
0122 }
0123 
0124 QByteArray Sound::data() const
0125 {
0126     return d->mData;
0127 }
0128 
0129 QString Sound::toString() const
0130 {
0131     QString str = QLatin1String("Sound {\n");
0132     str += QStringLiteral("  IsIntern: %1\n").arg(d->mIntern ? QStringLiteral("true") : QStringLiteral("false"));
0133     if (d->mIntern) {
0134         str += QStringLiteral("  Data: %1\n").arg(QString::fromLatin1(d->mData.toBase64()));
0135     } else {
0136         str += QStringLiteral("  Url: %1\n").arg(d->mUrl);
0137     }
0138     str += QLatin1String("}\n");
0139 
0140     return str;
0141 }
0142 
0143 QDataStream &KContacts::operator<<(QDataStream &s, const Sound &sound)
0144 {
0145     return s << sound.d->mIntern << sound.d->mUrl << sound.d->mData;
0146 }
0147 
0148 QDataStream &KContacts::operator>>(QDataStream &s, Sound &sound)
0149 {
0150     s >> sound.d->mIntern >> sound.d->mUrl >> sound.d->mData;
0151 
0152     return s;
0153 }