[telepathy-qt4/master] Channel: Added method to map a GroupMembersChangedDetails change-reason to a Telepathy error.

Andre Moreira Magalhaes (andrunko) andre.magalhaes at collabora.co.uk
Fri Jul 24 10:55:30 PDT 2009


---
 TelepathyQt4/channel.cpp |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/TelepathyQt4/channel.cpp b/TelepathyQt4/channel.cpp
index 93cbc88..dd45042 100644
--- a/TelepathyQt4/channel.cpp
+++ b/TelepathyQt4/channel.cpp
@@ -95,6 +95,9 @@ struct Channel::Private
     bool fakeGroupInterfaceIfNeeded();
     void setReady();
 
+    QString groupMemberChangeDetailsTelepathyError(
+            const GroupMemberChangeDetails &details);
+
     struct GroupMembersChangedInfo;
 
     // Public object
@@ -934,6 +937,41 @@ void Channel::Private::setReady()
     readinessHelper->setIntrospectCompleted(FeatureCore, true);
 }
 
+QString Channel::Private::groupMemberChangeDetailsTelepathyError(
+        const GroupMemberChangeDetails &details)
+{
+    QString error;
+    uint reason = details.reason();
+    switch (reason) {
+        case ChannelGroupChangeReasonOffline:
+            error = TELEPATHY_ERROR_OFFLINE;
+            break;
+        case ChannelGroupChangeReasonKicked:
+            error = TELEPATHY_ERROR_CHANNEL_KICKED;
+            break;
+        case ChannelGroupChangeReasonBanned:
+            error = TELEPATHY_ERROR_CHANNEL_BANNED;
+            break;
+        case ChannelGroupChangeReasonBusy:
+            error = TELEPATHY_ERROR_BUSY;
+            break;
+        case ChannelGroupChangeReasonNoAnswer:
+            error = TELEPATHY_ERROR_NO_ANSWER;
+            break;
+        case ChannelGroupChangeReasonPermissionDenied:
+            error = TELEPATHY_ERROR_PERMISSION_DENIED;
+            break;
+        default:
+            // let's use the actor handle and selfHandle here instead of the
+            // contacts, as the contacts may not be ready.
+            error = ((qdbus_cast<uint>(details.allDetails().value("actor")) == groupSelfHandle) ?
+                     TELEPATHY_ERROR_CANCELLED : TELEPATHY_ERROR_TERMINATED);
+            break;
+    }
+
+    return error;
+}
+
 /**
  * \class Channel
  * \ingroup clientchannel
-- 
1.5.6.5




More information about the telepathy-commits mailing list