[telepathy-qt4/master] Use a private implementation for Channel::GroupMemberChangeDetails
Olli Salli
"XXX CHANGETHISINVALIDADDRESSTOSOMETHINGSENSIBLEWHENWORKINGONANEWREPOXXX" at dhansak.collabora.co.uk
Tue Jun 30 11:51:41 PDT 2009
---
TelepathyQt4/channel.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++++
TelepathyQt4/channel.h | 41 +++++++++++++++++++-----------------
2 files changed, 73 insertions(+), 19 deletions(-)
diff --git a/TelepathyQt4/channel.cpp b/TelepathyQt4/channel.cpp
index a85ab70..7c83e57 100644
--- a/TelepathyQt4/channel.cpp
+++ b/TelepathyQt4/channel.cpp
@@ -38,6 +38,7 @@
#include <QHash>
#include <QQueue>
+#include <QSharedData>
#include <QTimer>
/**
@@ -1541,6 +1542,56 @@ Contacts Channel::groupRemotePendingContacts() const
return mPriv->groupRemotePendingContacts.values().toSet();
}
+struct Channel::GroupMemberChangeDetails::Private : public QSharedData
+{
+ ContactPtr actor;
+ QVariantMap details;
+
+ Private(const ContactPtr &actor, const QVariantMap &details)
+ : actor(actor), details(details) {}
+};
+
+Channel::GroupMemberChangeDetails::GroupMemberChangeDetails()
+{
+}
+
+Channel::GroupMemberChangeDetails::GroupMemberChangeDetails(const GroupMemberChangeDetails &other)
+ : mPriv(other.mPriv)
+{
+}
+
+Channel::GroupMemberChangeDetails::~GroupMemberChangeDetails()
+{
+}
+
+Channel::GroupMemberChangeDetails &Channel::GroupMemberChangeDetails::operator=(
+ const GroupMemberChangeDetails &other)
+{
+ this->mPriv = other.mPriv;
+ return *this;
+}
+
+bool Channel::GroupMemberChangeDetails::hasActor() const
+{
+ return isValid() && !mPriv->actor.isNull();
+}
+
+ContactPtr Channel::GroupMemberChangeDetails::actor() const
+{
+ return isValid() ? mPriv->actor : ContactPtr();
+}
+
+QVariantMap Channel::GroupMemberChangeDetails::allDetails() const
+{
+ return isValid() ? mPriv->details : QVariantMap();
+}
+
+Channel::GroupMemberChangeDetails::GroupMemberChangeDetails(const ContactPtr &actor,
+ const QVariantMap &details)
+ : mPriv(new Private(actor, details))
+{
+}
+
/**
* Return information of a local pending contact change. If
* no information is available, an object for which
diff --git a/TelepathyQt4/channel.h b/TelepathyQt4/channel.h
index 4dd7d4f..7eca198 100644
--- a/TelepathyQt4/channel.h
+++ b/TelepathyQt4/channel.h
@@ -39,6 +39,7 @@
#include <TelepathyQt4/SharedPtr>
#include <QSet>
+#include <QSharedDataPointer>
#include <QVariantMap>
namespace Tp
@@ -102,37 +103,39 @@ public:
class GroupMemberChangeDetails
{
public:
- GroupMemberChangeDetails()
- : mIsValid(false) {}
+ GroupMemberChangeDetails();
+ GroupMemberChangeDetails(const GroupMemberChangeDetails &other);
+ ~GroupMemberChangeDetails();
- bool isValid() const { return mIsValid; }
+ GroupMemberChangeDetails &operator=(const GroupMemberChangeDetails &other);
- bool hasActor() const { return !mActor.isNull(); }
- ContactPtr actor() const { return mActor; }
+ bool isValid() const { return mPriv.constData() != 0; }
- bool hasReason() const { return mDetails.contains("change-reason"); }
- uint reason() const { return qdbus_cast<uint>(mDetails.value("change-reason")); }
+ bool hasActor() const;
+ ContactPtr actor() const;
- bool hasMessage() const { return mDetails.contains("message"); }
- QString message () const { return qdbus_cast<QString>(mDetails.value("message")); }
+ bool hasReason() const { return allDetails().contains("change-reason"); }
+ uint reason() const { return qdbus_cast<uint>(allDetails().value("change-reason")); }
- bool hasError() const { return mDetails.contains("error"); }
- QString error() const { return qdbus_cast<QString>(mDetails.value("error")); }
+ bool hasMessage() const { return allDetails().contains("message"); }
+ QString message () const { return qdbus_cast<QString>(allDetails().value("message")); }
- bool hasDebugMessage() const { return mDetails.contains("debug-message"); }
- QString debugMessage() const { return qdbus_cast<QString>(mDetails.value("debug-message")); }
+ bool hasError() const { return allDetails().contains("error"); }
+ QString error() const { return qdbus_cast<QString>(allDetails().value("error")); }
- QVariantMap allDetails() const { return mDetails; }
+ bool hasDebugMessage() const { return allDetails().contains("debug-message"); }
+ QString debugMessage() const { return qdbus_cast<QString>(allDetails().value("debug-message")); }
+
+ QVariantMap allDetails() const;
private:
friend class Channel;
- GroupMemberChangeDetails(const ContactPtr &actor, const QVariantMap &details)
- : mActor(actor), mDetails(details), mIsValid(true) {}
+ GroupMemberChangeDetails(const ContactPtr &actor, const QVariantMap &details);
- ContactPtr mActor;
- QVariantMap mDetails;
- bool mIsValid;
+ struct Private;
+ friend struct Private;
+ QSharedDataPointer<Private> mPriv;
};
GroupMemberChangeDetails groupLocalPendingContactChangeInfo(const ContactPtr &contact) const;
--
1.5.6.5
More information about the telepathy-commits
mailing list