diff options
author | Tomeu Vizoso <tomeu.vizoso@collabora.co.uk> | 2010-08-11 15:15:46 +0200 |
---|---|---|
committer | Tomeu Vizoso <tomeu.vizoso@collabora.co.uk> | 2010-08-18 09:53:45 +0200 |
commit | c4942f37f1462f067eb7b65d87ba6d7510c3cf6d (patch) | |
tree | 27a74af0368d484035b084b1511d5c85ebb7edc2 | |
parent | ac58539082c8fa438e2ef9148d51c5618fde64bd (diff) |
Add a BuddyInfo.AddActivity method so activities can advertise themselves without having to track all the other shared activities.
Exposes salut_self_add_olpc_activity in salut-self.h
-rw-r--r-- | extensions/OLPC_Buddy_Info.xml | 20 | ||||
-rw-r--r-- | src/salut-connection.c | 24 | ||||
-rw-r--r-- | src/salut-self.c | 17 | ||||
-rw-r--r-- | src/salut-self.h | 3 |
4 files changed, 54 insertions, 10 deletions
diff --git a/extensions/OLPC_Buddy_Info.xml b/extensions/OLPC_Buddy_Info.xml index 0953ced7..cd93fc63 100644 --- a/extensions/OLPC_Buddy_Info.xml +++ b/extensions/OLPC_Buddy_Info.xml @@ -95,6 +95,26 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA</p> </tp:possible-errors> </method> + <method name="AddActivity"> + <arg direction="in" name="id" type="s"> + <tp:docstring> + An activity id + </tp:docstring> + </arg> + <arg direction="in" name="handle" type="u"> + <tp:docstring> + A room handle + </tp:docstring> + </arg> + <tp:docstring> + Advertise an activity associated to a muc room + </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> + <method name="GetActivities"> <arg direction="in" name="contact" type="u"> <tp:docstring> diff --git a/src/salut-connection.c b/src/salut-connection.c index d402ab5a..2fc1b11c 100644 --- a/src/salut-connection.c +++ b/src/salut-connection.c @@ -2676,6 +2676,29 @@ finally: } static void +salut_connection_olpc_add_activity (SalutSvcOLPCBuddyInfo *iface, + const gchar *id, + TpHandle handle, + DBusGMethodInvocation *context) +{ + SalutConnection *self = SALUT_CONNECTION (iface); + SalutConnectionPrivate *priv = SALUT_CONNECTION_GET_PRIVATE (self); + TpBaseConnection *base = (TpBaseConnection *) self; + GError *error = NULL; + + TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); + + if (!salut_self_add_olpc_activity (priv->self, id, handle, &error)) + { + dbus_g_method_return_error (context, error); + } + else + { + salut_svc_olpc_buddy_info_return_from_set_activities (context); + } +} + +static void salut_connection_olpc_buddy_info_iface_init (gpointer g_iface, gpointer iface_data) { @@ -2686,6 +2709,7 @@ salut_connection_olpc_buddy_info_iface_init (gpointer g_iface, IMPLEMENT(set_properties); IMPLEMENT(get_properties); IMPLEMENT(set_activities); + IMPLEMENT(add_activity); IMPLEMENT(get_activities); IMPLEMENT(set_current_activity); IMPLEMENT(get_current_activity); diff --git a/src/salut-self.c b/src/salut-self.c index 9ace42a9..b6e6b508 100644 --- a/src/salut-self.c +++ b/src/salut-self.c @@ -629,21 +629,21 @@ salut_self_set_avatar (SalutSelf *self, guint8 *data, #ifdef ENABLE_OLPC -static SalutOlpcActivity * +gboolean salut_self_add_olpc_activity (SalutSelf *self, const gchar *activity_id, TpHandle room, GError **error) { SalutSelfPrivate *priv = SALUT_SELF_GET_PRIVATE (self); SalutOlpcActivity *activity; - g_return_val_if_fail (activity_id != NULL, NULL); - g_return_val_if_fail (room != 0, NULL); + g_return_val_if_fail (activity_id != NULL, FALSE); + g_return_val_if_fail (room != 0, FALSE); if (strchr (activity_id, ':') != NULL) { g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT, "Activity IDs may not contain ':'"); - return NULL; + return FALSE; } activity = salut_olpc_activity_manager_ensure_activity_by_room ( @@ -652,7 +652,7 @@ salut_self_add_olpc_activity (SalutSelf *self, const gchar *activity_id, if (!salut_olpc_activity_joined (activity, error)) { g_object_unref (activity); - return NULL; + return FALSE; } salut_olpc_activity_update (activity, room, activity_id, NULL, NULL, NULL, @@ -661,7 +661,7 @@ salut_self_add_olpc_activity (SalutSelf *self, const gchar *activity_id, g_hash_table_insert (priv->olpc_activities, GUINT_TO_POINTER (room), activity); - return activity; + return TRUE; } struct _set_olpc_activities_ctx @@ -691,10 +691,7 @@ _set_olpc_activities_add (gpointer key, gpointer value, gpointer user_data) if (activity == NULL) { /* add the activity service if it's not in data->olpc_activities */ - activity = salut_self_add_olpc_activity (data->self, id, room, - data->error); - - if (activity == NULL) + if (!salut_self_add_olpc_activity (data->self, id, room, data->error)) return; } else diff --git a/src/salut-self.h b/src/salut-self.h index b1bd012c..f6221bf1 100644 --- a/src/salut-self.h +++ b/src/salut-self.h @@ -135,6 +135,9 @@ gboolean salut_self_set_olpc_activity_properties (SalutSelf *self, gboolean salut_self_set_olpc_activities (SalutSelf *self, GHashTable *act_id_to_room, GError **error); +gboolean salut_self_add_olpc_activity (SalutSelf *self, + const gchar *activity_id, TpHandle room, GError **error); + gboolean salut_self_set_olpc_current_activity (SalutSelf *self, const gchar *id, TpHandle room, GError **error); |