summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-11 15:15:46 +0200
committerTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-18 09:53:45 +0200
commitc4942f37f1462f067eb7b65d87ba6d7510c3cf6d (patch)
tree27a74af0368d484035b084b1511d5c85ebb7edc2
parentac58539082c8fa438e2ef9148d51c5618fde64bd (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.xml20
-rw-r--r--src/salut-connection.c24
-rw-r--r--src/salut-self.c17
-rw-r--r--src/salut-self.h3
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);