aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-02-07 20:54:47 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:15:00 +0100
commit61a84528932fcbae61f3fb2275d89595634de0dd (patch)
treee6306967ccca9370d5644ef5593789ee5acecf54 /src
parent9ca03ba9f2cffea4470162ef310ea1bc0830e553 (diff)
sms: allow sublassing the part deletion procedure
Diffstat (limited to 'src')
-rw-r--r--src/mm-sms-list.c14
-rw-r--r--src/mm-sms.c53
-rw-r--r--src/mm-sms.h21
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 */