diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-02-07 20:54:47 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:15:00 +0100 |
commit | 61a84528932fcbae61f3fb2275d89595634de0dd (patch) | |
tree | e6306967ccca9370d5644ef5593789ee5acecf54 /src | |
parent | 9ca03ba9f2cffea4470162ef310ea1bc0830e553 (diff) |
sms: allow sublassing the part deletion procedure
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-sms-list.c | 14 | ||||
-rw-r--r-- | src/mm-sms.c | 53 | ||||
-rw-r--r-- | src/mm-sms.h | 21 |
3 files changed, 66 insertions, 22 deletions
diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c index 7cdc8cf7..7cd1d130 100644 --- a/src/mm-sms-list.c +++ b/src/mm-sms-list.c @@ -87,13 +87,13 @@ mm_sms_list_delete_sms_finish (MMSmsList *self, } static void -delete_parts_ready (MMSms *sms, - GAsyncResult *res, - GSimpleAsyncResult *simple) +delete_ready (MMSms *sms, + GAsyncResult *res, + GSimpleAsyncResult *simple) { GError *error = NULL; - if (!mm_sms_delete_parts_finish (sms, res, &error)) + if (!mm_sms_delete_finish (sms, res, &error)) /* We report the error, but we really get the SMS removed */ g_simple_async_result_take_error (simple, error); else @@ -150,9 +150,9 @@ mm_sms_list_delete_sms (MMSmsList *self, sms = l->data; self->priv->list = g_list_delete_link (self->priv->list, l); - mm_sms_delete_parts (sms, - (GAsyncReadyCallback)delete_parts_ready, - result); + mm_sms_delete (sms, + (GAsyncReadyCallback)delete_ready, + result); /* We do remove here our last reference to the SMS object. The * async method will keep its own while the operation is ongoing. */ diff --git a/src/mm-sms.c b/src/mm-sms.c index aa0bf289..29733e80 100644 --- a/src/mm-sms.c +++ b/src/mm-sms.c @@ -186,10 +186,10 @@ sms_delete_parts_context_complete_and_free (SmsDeletePartsContext *ctx) g_free (ctx); } -gboolean -mm_sms_delete_parts_finish (MMSms *self, - GAsyncResult *res, - GError **error) +static gboolean +sms_delete_finish (MMSms *self, + GAsyncResult *res, + GError **error) { return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error); } @@ -254,10 +254,10 @@ delete_next_part (SmsDeletePartsContext *ctx) g_free (cmd); } -void -mm_sms_delete_parts (MMSms *self, - GAsyncReadyCallback callback, - gpointer user_data) +static void +sms_delete (MMSms *self, + GAsyncReadyCallback callback, + gpointer user_data) { SmsDeletePartsContext *ctx; @@ -265,7 +265,7 @@ mm_sms_delete_parts (MMSms *self, ctx->result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, - mm_sms_delete_parts); + sms_delete); ctx->self = g_object_ref (self); ctx->modem = g_object_ref (self->priv->modem); @@ -278,6 +278,38 @@ mm_sms_delete_parts (MMSms *self, /*****************************************************************************/ +gboolean +mm_sms_delete_finish (MMSms *self, + GAsyncResult *res, + GError **error) +{ + if (MM_SMS_GET_CLASS (self)->delete_finish) + return MM_SMS_GET_CLASS (self)->delete_finish (self, res, error); + + return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error); +} + +void +mm_sms_delete (MMSms *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + if (MM_SMS_GET_CLASS (self)->delete && + MM_SMS_GET_CLASS (self)->delete_finish) { + MM_SMS_GET_CLASS (self)->delete (self, callback, user_data); + return; + } + + g_simple_async_report_error_in_idle (G_OBJECT (self), + callback, + user_data, + MM_CORE_ERROR, + MM_CORE_ERROR_UNSUPPORTED, + "Deleting SMS is not supported by this modem"); +} + +/*****************************************************************************/ + static gboolean assemble_sms (MMSms *self, GError **error) @@ -606,6 +638,9 @@ mm_sms_class_init (MMSmsClass *klass) object_class->finalize = finalize; object_class->dispose = dispose; + klass->delete = sms_delete; + klass->delete_finish = sms_delete_finish; + properties[PROP_CONNECTION] = g_param_spec_object (MM_SMS_CONNECTION, "Connection", diff --git a/src/mm-sms.h b/src/mm-sms.h index ee452f45..aefb5ddb 100644 --- a/src/mm-sms.h +++ b/src/mm-sms.h @@ -51,6 +51,14 @@ struct _MMSms { struct _MMSmsClass { MmGdbusSmsSkeletonClass parent; + + /* Delete the SMS */ + void (* delete) (MMSms *self, + GAsyncReadyCallback callback, + gpointer user_data); + gboolean (* delete_finish) (MMSms *self, + GAsyncResult *res, + GError **error); }; GType mm_sms_get_type (void); @@ -81,11 +89,12 @@ guint mm_sms_get_multipart_reference (MMSms *self); gboolean mm_sms_multipart_is_complete (MMSms *self); gboolean mm_sms_multipart_is_assembled (MMSms *self); -void mm_sms_delete_parts (MMSms *self, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean mm_sms_delete_parts_finish (MMSms *self, - GAsyncResult *res, - GError **error); + +void mm_sms_delete (MMSms *self, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean mm_sms_delete_finish (MMSms *self, + GAsyncResult *res, + GError **error); #endif /* MM_SMS_H */ |