diff options
author | Tomeu Vizoso <tomeu.vizoso@collabora.co.uk> | 2010-08-11 15:10:49 +0200 |
---|---|---|
committer | Tomeu Vizoso <tomeu.vizoso@collabora.co.uk> | 2010-08-18 09:53:45 +0200 |
commit | ac58539082c8fa438e2ef9148d51c5618fde64bd (patch) | |
tree | ffb62d3211be880939aae9df718397d05a226920 | |
parent | 726001d0d64457905c645bb9ade8aecbca756a0c (diff) | |
download | telepathy-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.xml | 20 | ||||
-rw-r--r-- | src/salut-connection.c | 33 | ||||
-rw-r--r-- | src/salut-olpc-activity-manager.c | 20 | ||||
-rw-r--r-- | src/salut-olpc-activity-manager.h | 3 |
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); |