summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-11 15:10:49 +0200
committerTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-18 09:53:45 +0200
commitac58539082c8fa438e2ef9148d51c5618fde64bd (patch)
treeffb62d3211be880939aae9df718397d05a226920
parent726001d0d64457905c645bb9ade8aecbca756a0c (diff)
downloadtelepathy-salut-ac58539082c8fa438e2ef9148d51c5618fde64bd.tar.gz
Add a ActivityProperties.GetActivity method for retrieving an activity's room handle from its id.
-rw-r--r--extensions/OLPC_Activity_Properties.xml20
-rw-r--r--src/salut-connection.c33
-rw-r--r--src/salut-olpc-activity-manager.c20
-rw-r--r--src/salut-olpc-activity-manager.h3
4 files changed, 76 insertions, 0 deletions
diff --git a/extensions/OLPC_Activity_Properties.xml b/extensions/OLPC_Activity_Properties.xml
index 9f1d3d04..30300e51 100644
--- a/extensions/OLPC_Activity_Properties.xml
+++ b/extensions/OLPC_Activity_Properties.xml
@@ -61,6 +61,26 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA</p>
</tp:possible-errors>
</method>
+ <method name="GetActivity">
+ <arg direction="in" name="activity_id" type="s">
+ <tp:docstring>
+ An activity id
+ </tp:docstring>
+ </arg>
+ <arg direction="out" name="room" type="u">
+ <tp:docstring>
+ A room handle
+ </tp:docstring>
+ </arg>
+ <tp:docstring>
+ Returns the handle of the room associated with this activity
+ </tp:docstring>
+ <tp:possible-errors>
+ <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
+ <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
+ </tp:possible-errors>
+ </method>
+
<signal name="ActivityPropertiesChanged">
<arg name="room" type="u">
<tp:docstring>
diff --git a/src/salut-connection.c b/src/salut-connection.c
index e99b0f02..d402ab5a 100644
--- a/src/salut-connection.c
+++ b/src/salut-connection.c
@@ -3039,6 +3039,38 @@ salut_connection_olpc_observe_invitation (SalutConnection *self,
}
static void
+salut_connection_act_get_activity (SalutSvcOLPCActivityProperties *iface,
+ const gchar *activity_id,
+ DBusGMethodInvocation *context)
+{
+ SalutConnection *self = SALUT_CONNECTION (iface);
+ SalutConnectionPrivate *priv = SALUT_CONNECTION_GET_PRIVATE (self);
+ TpBaseConnection *base = (TpBaseConnection *) self;
+ GError *error = NULL;
+ SalutOlpcActivity *activity;
+
+ TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
+
+ activity = salut_olpc_activity_manager_get_activity_by_id (
+ priv->olpc_activity_manager, activity_id);
+ if (activity == NULL)
+ {
+ g_set_error (&error, TP_ERRORS, TP_ERROR_NOT_AVAILABLE,
+ "Activity unknown: %s", activity_id);
+ goto error;
+ }
+
+ salut_svc_olpc_activity_properties_return_from_get_activity (context,
+ activity->room);
+
+ return;
+
+error:
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+}
+
+static void
salut_connection_olpc_activity_properties_iface_init (gpointer g_iface,
gpointer iface_data)
{
@@ -3048,6 +3080,7 @@ salut_connection_olpc_activity_properties_iface_init (gpointer g_iface,
(klass, salut_connection_act_##x)
IMPLEMENT(set_properties);
IMPLEMENT(get_properties);
+ IMPLEMENT(get_activity);
#undef IMPLEMENT
}
#endif
diff --git a/src/salut-olpc-activity-manager.c b/src/salut-olpc-activity-manager.c
index 4f07ac93..c56888da 100644
--- a/src/salut-olpc-activity-manager.c
+++ b/src/salut-olpc-activity-manager.c
@@ -228,6 +228,26 @@ salut_olpc_activity_manager_get_activity_by_room (SalutOlpcActivityManager *self
}
SalutOlpcActivity *
+salut_olpc_activity_manager_get_activity_by_id (SalutOlpcActivityManager *self,
+ const gchar *activity_id)
+{
+ SalutOlpcActivityManagerPrivate *priv =
+ SALUT_OLPC_ACTIVITY_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ gpointer key, value;
+
+ g_hash_table_iter_init (&iter, priv->activities_by_room);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ {
+ SalutOlpcActivity *activity = value;
+ if (strcmp (activity->id, activity_id) == 0)
+ return activity;
+ }
+
+ return NULL;
+}
+
+SalutOlpcActivity *
salut_olpc_activity_manager_ensure_activity_by_room (
SalutOlpcActivityManager *self,
TpHandle room)
diff --git a/src/salut-olpc-activity-manager.h b/src/salut-olpc-activity-manager.h
index ee181680..23113edf 100644
--- a/src/salut-olpc-activity-manager.h
+++ b/src/salut-olpc-activity-manager.h
@@ -72,6 +72,9 @@ gboolean salut_olpc_activity_manager_start (SalutOlpcActivityManager *mgr,
SalutOlpcActivity * salut_olpc_activity_manager_get_activity_by_room (
SalutOlpcActivityManager *mgr, TpHandle room);
+SalutOlpcActivity * salut_olpc_activity_manager_get_activity_by_id (
+ SalutOlpcActivityManager *mgr, const gchar *activity_id);
+
SalutOlpcActivity * salut_olpc_activity_manager_ensure_activity_by_room (
SalutOlpcActivityManager *mgr, TpHandle room);