summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2014-02-25 14:56:57 +0100
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2014-02-25 14:56:57 +0100
commitc3beedcc25d4db5eb8d70581ddf6a06eb05bb951 (patch)
tree866575feb0b4437365f19f74fbd20618de4339dc
parentbc7cdedbf761fc78ab176f77c8e31376527cc9fe (diff)
downloadtelepathy-glib-c3beedcc25d4db5eb8d70581ddf6a06eb05bb951.tar.gz
account-channel-request: factor out going_to_request()
-rw-r--r--telepathy-glib/account-channel-request.c77
1 files changed, 32 insertions, 45 deletions
diff --git a/telepathy-glib/account-channel-request.c b/telepathy-glib/account-channel-request.c
index b2908c5af..fe9954d67 100644
--- a/telepathy-glib/account-channel-request.c
+++ b/telepathy-glib/account-channel-request.c
@@ -1000,34 +1000,49 @@ delegated_channels_cb (TpBaseClient *client,
self->priv->delegated_channel_data);
}
-static void
-request_and_handle_channel_async (TpAccountChannelRequest *self,
+static gboolean
+going_to_request (TpAccountChannelRequest *self,
+ ActionType action_type,
+ gboolean ensure,
GCancellable *cancellable,
GAsyncReadyCallback callback,
- gpointer user_data,
- gboolean ensure)
+ gpointer user_data)
{
- GError *error = NULL;
- TpChannelDispatcher *cd;
-
- g_return_if_fail (!self->priv->requested);
+ g_return_val_if_fail (!self->priv->requested, FALSE);
self->priv->requested = TRUE;
- self->priv->action_type = ACTION_TYPE_HANDLE;
+ self->priv->action_type = action_type;
if (g_cancellable_is_cancelled (cancellable))
{
g_simple_async_report_error_in_idle (G_OBJECT (self), callback,
user_data, G_IO_ERROR, G_IO_ERROR_CANCELLED,
"Operation has been cancelled");
-
- return;
+ return FALSE;
}
if (cancellable != NULL)
self->priv->cancellable = g_object_ref (cancellable);
+
self->priv->ensure = ensure;
+ return TRUE;
+}
+
+static void
+request_and_handle_channel_async (TpAccountChannelRequest *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data,
+ gboolean ensure)
+{
+ GError *error = NULL;
+ TpChannelDispatcher *cd;
+
+ if (!going_to_request (self, ACTION_TYPE_HANDLE, ensure, cancellable,
+ callback, user_data))
+ return;
+
/* Create a temp handler */
self->priv->handler = tp_simple_handler_new_with_factory (
tp_proxy_get_factory (self->priv->account), TRUE, FALSE,
@@ -1293,23 +1308,9 @@ request_channel_async (TpAccountChannelRequest *self,
{
TpChannelDispatcher *cd;
- g_return_if_fail (!self->priv->requested);
- self->priv->requested = TRUE;
-
- self->priv->action_type = ACTION_TYPE_FORGET;
-
- if (g_cancellable_is_cancelled (cancellable))
- {
- g_simple_async_report_error_in_idle (G_OBJECT (self), callback,
- user_data, G_IO_ERROR, G_IO_ERROR_CANCELLED,
- "Operation has been cancelled");
-
- return;
- }
-
- if (cancellable != NULL)
- self->priv->cancellable = g_object_ref (cancellable);
- self->priv->ensure = ensure;
+ if (!going_to_request (self, ACTION_TYPE_FORGET, ensure, cancellable,
+ callback, user_data))
+ return;
cd = tp_channel_dispatcher_new (self->priv->dbus);
@@ -1560,23 +1561,9 @@ request_and_observe_channel_async (TpAccountChannelRequest *self,
{
TpChannelDispatcher *cd;
- g_return_if_fail (!self->priv->requested);
- self->priv->requested = TRUE;
-
- self->priv->action_type = ACTION_TYPE_OBSERVE;
-
- if (g_cancellable_is_cancelled (cancellable))
- {
- g_simple_async_report_error_in_idle (G_OBJECT (self), callback,
- user_data, G_IO_ERROR, G_IO_ERROR_CANCELLED,
- "Operation has been cancelled");
-
- return;
- }
-
- if (cancellable != NULL)
- self->priv->cancellable = g_object_ref (cancellable);
- self->priv->ensure = ensure;
+ if (!going_to_request (self, ACTION_TYPE_OBSERVE, ensure, cancellable,
+ callback, user_data))
+ return;
cd = tp_channel_dispatcher_new (self->priv->dbus);