File indexing completed on 2025-01-19 03:39:53
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 }