mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-23 18:32:51 +00:00
507 lines
11 KiB
C++
507 lines
11 KiB
C++
/*
|
|
This file is part of libkabc.
|
|
Copyright (c) 2008 Tobias Koenig <tokoe@kde.org>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "contactgroup.h"
|
|
|
|
#include <QtCore/QMap>
|
|
#include <QtCore/QSharedData>
|
|
#include <QtCore/QString>
|
|
#include <QtCore/QUuid>
|
|
|
|
using namespace KABC;
|
|
|
|
class ContactGroup::ContactReference::ContactReferencePrivate : public QSharedData
|
|
{
|
|
public:
|
|
ContactReferencePrivate()
|
|
: QSharedData()
|
|
{
|
|
}
|
|
|
|
ContactReferencePrivate( const ContactReferencePrivate &other )
|
|
: QSharedData( other )
|
|
{
|
|
mUid = other.mUid;
|
|
mPreferredEmail = other.mPreferredEmail;
|
|
mCustoms = other.mCustoms;
|
|
}
|
|
|
|
QString mUid;
|
|
QString mGid;
|
|
QString mPreferredEmail;
|
|
QMap<QString, QString> mCustoms;
|
|
};
|
|
|
|
ContactGroup::ContactReference::ContactReference()
|
|
: d( new ContactReferencePrivate )
|
|
{
|
|
}
|
|
|
|
ContactGroup::ContactReference::ContactReference( const ContactReference &other )
|
|
: d( other.d )
|
|
{
|
|
}
|
|
|
|
ContactGroup::ContactReference::ContactReference( const QString &uid )
|
|
: d( new ContactReferencePrivate )
|
|
{
|
|
d->mUid = uid;
|
|
}
|
|
|
|
ContactGroup::ContactReference::~ContactReference()
|
|
{
|
|
}
|
|
|
|
void ContactGroup::ContactReference::setUid( const QString &uid )
|
|
{
|
|
d->mUid = uid;
|
|
}
|
|
|
|
QString ContactGroup::ContactReference::uid() const
|
|
{
|
|
return d->mUid;
|
|
}
|
|
|
|
void ContactGroup::ContactReference::setGid( const QString &gid )
|
|
{
|
|
d->mGid = gid;
|
|
}
|
|
|
|
QString ContactGroup::ContactReference::gid() const
|
|
{
|
|
return d->mGid;
|
|
}
|
|
|
|
void ContactGroup::ContactReference::setPreferredEmail( const QString &email )
|
|
{
|
|
d->mPreferredEmail = email;
|
|
}
|
|
|
|
QString ContactGroup::ContactReference::preferredEmail() const
|
|
{
|
|
return d->mPreferredEmail;
|
|
}
|
|
|
|
void ContactGroup::ContactReference::insertCustom( const QString &key, const QString &value )
|
|
{
|
|
d->mCustoms.insert( key, value );
|
|
}
|
|
|
|
void ContactGroup::ContactReference::removeCustom( const QString &key )
|
|
{
|
|
d->mCustoms.remove( key );
|
|
}
|
|
|
|
QString ContactGroup::ContactReference::custom( const QString &key ) const
|
|
{
|
|
return d->mCustoms.value( key );
|
|
}
|
|
|
|
ContactGroup::ContactReference &ContactGroup::ContactReference::operator=(
|
|
const ContactGroup::ContactReference &other )
|
|
{
|
|
if ( this != &other ) {
|
|
d = other.d;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
bool ContactGroup::ContactReference::operator==( const ContactReference &other ) const
|
|
{
|
|
return d->mUid == other.d->mUid &&
|
|
d->mPreferredEmail == other.d->mPreferredEmail &&
|
|
d->mCustoms == other.d->mCustoms;
|
|
}
|
|
|
|
class ContactGroup::ContactGroupReference::ContactGroupReferencePrivate : public QSharedData
|
|
{
|
|
public:
|
|
ContactGroupReferencePrivate()
|
|
: QSharedData()
|
|
{
|
|
}
|
|
|
|
ContactGroupReferencePrivate( const ContactGroupReferencePrivate &other )
|
|
: QSharedData( other )
|
|
{
|
|
mUid = other.mUid;
|
|
mCustoms = other.mCustoms;
|
|
}
|
|
|
|
QString mUid;
|
|
QMap<QString, QString> mCustoms;
|
|
};
|
|
|
|
ContactGroup::ContactGroupReference::ContactGroupReference()
|
|
: d( new ContactGroupReferencePrivate )
|
|
{
|
|
}
|
|
|
|
ContactGroup::ContactGroupReference::ContactGroupReference( const ContactGroupReference &other )
|
|
: d( other.d )
|
|
{
|
|
}
|
|
|
|
ContactGroup::ContactGroupReference::ContactGroupReference( const QString &uid )
|
|
: d( new ContactGroupReferencePrivate )
|
|
{
|
|
d->mUid = uid;
|
|
}
|
|
|
|
ContactGroup::ContactGroupReference::~ContactGroupReference()
|
|
{
|
|
}
|
|
|
|
void ContactGroup::ContactGroupReference::setUid( const QString &uid )
|
|
{
|
|
d->mUid = uid;
|
|
}
|
|
|
|
QString ContactGroup::ContactGroupReference::uid() const
|
|
{
|
|
return d->mUid;
|
|
}
|
|
|
|
void ContactGroup::ContactGroupReference::insertCustom( const QString &key, const QString &value )
|
|
{
|
|
d->mCustoms.insert( key, value );
|
|
}
|
|
|
|
void ContactGroup::ContactGroupReference::removeCustom( const QString &key )
|
|
{
|
|
d->mCustoms.remove( key );
|
|
}
|
|
|
|
QString ContactGroup::ContactGroupReference::custom( const QString &key ) const
|
|
{
|
|
return d->mCustoms.value( key );
|
|
}
|
|
|
|
ContactGroup::ContactGroupReference &ContactGroup::ContactGroupReference::operator=(
|
|
const ContactGroup::ContactGroupReference &other )
|
|
{
|
|
if ( this != &other ) {
|
|
d = other.d;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
bool ContactGroup::ContactGroupReference::operator==( const ContactGroupReference &other ) const
|
|
{
|
|
return d->mUid == other.d->mUid &&
|
|
d->mCustoms == other.d->mCustoms;
|
|
}
|
|
|
|
class ContactGroup::Data::DataPrivate : public QSharedData
|
|
{
|
|
public:
|
|
DataPrivate()
|
|
: QSharedData()
|
|
{
|
|
}
|
|
|
|
DataPrivate( const DataPrivate &other )
|
|
: QSharedData( other )
|
|
{
|
|
mName = other.mName;
|
|
mEmail = other.mEmail;
|
|
mCustoms = other.mCustoms;
|
|
}
|
|
|
|
QString mName;
|
|
QString mEmail;
|
|
QMap<QString, QString> mCustoms;
|
|
};
|
|
|
|
ContactGroup::Data::Data()
|
|
: d( new DataPrivate )
|
|
{
|
|
}
|
|
|
|
ContactGroup::Data::Data( const Data &other )
|
|
: d( other.d )
|
|
{
|
|
}
|
|
|
|
ContactGroup::Data::Data( const QString &name, const QString &email )
|
|
: d( new DataPrivate )
|
|
{
|
|
d->mName = name;
|
|
d->mEmail = email;
|
|
}
|
|
|
|
ContactGroup::Data::~Data()
|
|
{
|
|
}
|
|
|
|
void ContactGroup::Data::setName( const QString &name )
|
|
{
|
|
d->mName = name;
|
|
}
|
|
|
|
QString ContactGroup::Data::name() const
|
|
{
|
|
return d->mName;
|
|
}
|
|
|
|
void ContactGroup::Data::setEmail( const QString &email )
|
|
{
|
|
d->mEmail = email;
|
|
}
|
|
|
|
QString ContactGroup::Data::email() const
|
|
{
|
|
return d->mEmail;
|
|
}
|
|
|
|
void ContactGroup::Data::insertCustom( const QString &key, const QString &value )
|
|
{
|
|
d->mCustoms.insert( key, value );
|
|
}
|
|
|
|
void ContactGroup::Data::removeCustom( const QString &key )
|
|
{
|
|
d->mCustoms.remove( key );
|
|
}
|
|
|
|
QString ContactGroup::Data::custom( const QString &key ) const
|
|
{
|
|
return d->mCustoms.value( key );
|
|
}
|
|
|
|
ContactGroup::Data &ContactGroup::Data::operator=( const ContactGroup::Data &other )
|
|
{
|
|
if ( this != &other ) {
|
|
d = other.d;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
bool ContactGroup::Data::operator==( const Data &other ) const
|
|
{
|
|
return d->mName == other.d->mName &&
|
|
d->mEmail == other.d->mEmail &&
|
|
d->mCustoms == other.d->mCustoms;
|
|
}
|
|
|
|
class ContactGroup::Private : public QSharedData
|
|
{
|
|
public:
|
|
Private()
|
|
: QSharedData(),
|
|
mIdentifier( QUuid::createUuid().toString().mid(1, 36) )//We avoid the curly braces so the string is RFC4122 compliant and can be used as urn
|
|
{
|
|
}
|
|
|
|
Private( const Private &other )
|
|
: QSharedData( other )
|
|
{
|
|
mIdentifier = other.mIdentifier;
|
|
mName = other.mName;
|
|
mContactReferences = other.mContactReferences;
|
|
mContactGroupReferences = other.mContactGroupReferences;
|
|
mDataObjects = other.mDataObjects;
|
|
}
|
|
|
|
QString mIdentifier;
|
|
QString mName;
|
|
ContactGroup::ContactReference::List mContactReferences;
|
|
ContactGroup::ContactGroupReference::List mContactGroupReferences;
|
|
ContactGroup::Data::List mDataObjects;
|
|
};
|
|
|
|
ContactGroup::ContactGroup()
|
|
: d( new Private )
|
|
{
|
|
}
|
|
|
|
ContactGroup::ContactGroup( const ContactGroup &other )
|
|
: d( other.d )
|
|
{
|
|
}
|
|
|
|
ContactGroup::ContactGroup( const QString &name )
|
|
: d( new Private )
|
|
{
|
|
d->mName = name;
|
|
}
|
|
|
|
ContactGroup::~ContactGroup()
|
|
{
|
|
}
|
|
|
|
void ContactGroup::setName( const QString &name )
|
|
{
|
|
d->mName = name;
|
|
}
|
|
|
|
QString ContactGroup::name() const
|
|
{
|
|
return d->mName;
|
|
}
|
|
|
|
void ContactGroup::setId( const QString &id )
|
|
{
|
|
d->mIdentifier = id;
|
|
}
|
|
|
|
QString ContactGroup::id() const
|
|
{
|
|
return d->mIdentifier;
|
|
}
|
|
|
|
unsigned int ContactGroup::count() const
|
|
{
|
|
return d->mContactReferences.count() + d->mDataObjects.count();
|
|
}
|
|
|
|
unsigned int ContactGroup::contactReferenceCount() const
|
|
{
|
|
return d->mContactReferences.count();
|
|
}
|
|
|
|
unsigned int ContactGroup::contactGroupReferenceCount() const
|
|
{
|
|
return d->mContactGroupReferences.count();
|
|
}
|
|
|
|
unsigned int ContactGroup::dataCount() const
|
|
{
|
|
return d->mDataObjects.count();
|
|
}
|
|
|
|
ContactGroup::ContactReference &ContactGroup::contactReference( unsigned int index )
|
|
{
|
|
Q_ASSERT_X( index < (unsigned int)d->mContactReferences.count(),
|
|
"contactReference()", "index out of range" );
|
|
|
|
return d->mContactReferences[ index ];
|
|
}
|
|
|
|
const ContactGroup::ContactReference &ContactGroup::contactReference( unsigned int index ) const
|
|
{
|
|
Q_ASSERT_X( index < (unsigned int)d->mContactReferences.count(),
|
|
"contactReference()", "index out of range" );
|
|
|
|
return d->mContactReferences[ index ];
|
|
}
|
|
|
|
ContactGroup::ContactGroupReference &ContactGroup::contactGroupReference( unsigned int index )
|
|
{
|
|
Q_ASSERT_X( index < (unsigned int)d->mContactGroupReferences.count(),
|
|
"contactGroupReference()", "index out of range" );
|
|
|
|
return d->mContactGroupReferences[ index ];
|
|
}
|
|
|
|
const ContactGroup::ContactGroupReference &ContactGroup::contactGroupReference(
|
|
unsigned int index ) const
|
|
{
|
|
Q_ASSERT_X( index < (unsigned int)d->mContactGroupReferences.count(),
|
|
"contactGroupReference()", "index out of range" );
|
|
|
|
return d->mContactGroupReferences[ index ];
|
|
}
|
|
|
|
ContactGroup::Data &ContactGroup::data( unsigned int index )
|
|
{
|
|
Q_ASSERT_X( index < (unsigned int)d->mDataObjects.count(), "data()", "index out of range" );
|
|
|
|
return d->mDataObjects[ index ];
|
|
}
|
|
|
|
const ContactGroup::Data &ContactGroup::data( unsigned int index ) const
|
|
{
|
|
Q_ASSERT_X( index < (unsigned int)d->mDataObjects.count(), "data()", "index out of range" );
|
|
|
|
return d->mDataObjects[ index ];
|
|
}
|
|
|
|
void ContactGroup::append( const ContactReference &reference )
|
|
{
|
|
d->mContactReferences.append( reference );
|
|
}
|
|
|
|
void ContactGroup::append( const ContactGroupReference &reference )
|
|
{
|
|
d->mContactGroupReferences.append( reference );
|
|
}
|
|
|
|
void ContactGroup::append( const Data &data )
|
|
{
|
|
d->mDataObjects.append( data );
|
|
}
|
|
|
|
void ContactGroup::remove( const ContactReference &reference )
|
|
{
|
|
d->mContactReferences.removeOne( reference );
|
|
}
|
|
|
|
void ContactGroup::remove( const ContactGroupReference &reference )
|
|
{
|
|
d->mContactGroupReferences.removeOne( reference );
|
|
}
|
|
|
|
void ContactGroup::remove( const Data &data )
|
|
{
|
|
d->mDataObjects.removeOne( data );
|
|
}
|
|
|
|
void ContactGroup::removeAllContactReferences()
|
|
{
|
|
d->mContactReferences.clear();
|
|
}
|
|
|
|
void ContactGroup::removeAllContactGroupReferences()
|
|
{
|
|
d->mContactGroupReferences.clear();
|
|
}
|
|
|
|
void ContactGroup::removeAllContactData()
|
|
{
|
|
d->mDataObjects.clear();
|
|
}
|
|
|
|
ContactGroup &ContactGroup::operator=( const ContactGroup &other )
|
|
{
|
|
if ( this != &other ) {
|
|
d = other.d;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
bool ContactGroup::operator==( const ContactGroup &other ) const
|
|
{
|
|
return d->mIdentifier == other.d->mIdentifier &&
|
|
d->mName == other.d->mName &&
|
|
d->mContactReferences == other.d->mContactReferences &&
|
|
d->mContactGroupReferences == other.d->mContactGroupReferences &&
|
|
d->mDataObjects == other.d->mDataObjects;
|
|
}
|
|
|
|
QString ContactGroup::mimeType()
|
|
{
|
|
return QLatin1String( "application/x-vnd.kde.contactgroup" );
|
|
}
|