sms: allow sublassing the part deletion procedure

This commit is contained in:
Aleksander Morgado
2012-02-07 20:54:47 +01:00
parent 9ca03ba9f2
commit 61a8452893
3 changed files with 66 additions and 22 deletions

View File

@@ -87,13 +87,13 @@ mm_sms_list_delete_sms_finish (MMSmsList *self,
} }
static void static void
delete_parts_ready (MMSms *sms, delete_ready (MMSms *sms,
GAsyncResult *res, GAsyncResult *res,
GSimpleAsyncResult *simple) GSimpleAsyncResult *simple)
{ {
GError *error = NULL; 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 */ /* We report the error, but we really get the SMS removed */
g_simple_async_result_take_error (simple, error); g_simple_async_result_take_error (simple, error);
else else
@@ -150,8 +150,8 @@ mm_sms_list_delete_sms (MMSmsList *self,
sms = l->data; sms = l->data;
self->priv->list = g_list_delete_link (self->priv->list, l); self->priv->list = g_list_delete_link (self->priv->list, l);
mm_sms_delete_parts (sms, mm_sms_delete (sms,
(GAsyncReadyCallback)delete_parts_ready, (GAsyncReadyCallback)delete_ready,
result); result);
/* We do remove here our last reference to the SMS object. The /* We do remove here our last reference to the SMS object. The

View File

@@ -186,8 +186,8 @@ sms_delete_parts_context_complete_and_free (SmsDeletePartsContext *ctx)
g_free (ctx); g_free (ctx);
} }
gboolean static gboolean
mm_sms_delete_parts_finish (MMSms *self, sms_delete_finish (MMSms *self,
GAsyncResult *res, GAsyncResult *res,
GError **error) GError **error)
{ {
@@ -254,8 +254,8 @@ delete_next_part (SmsDeletePartsContext *ctx)
g_free (cmd); g_free (cmd);
} }
void static void
mm_sms_delete_parts (MMSms *self, sms_delete (MMSms *self,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
{ {
@@ -265,7 +265,7 @@ mm_sms_delete_parts (MMSms *self,
ctx->result = g_simple_async_result_new (G_OBJECT (self), ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback, callback,
user_data, user_data,
mm_sms_delete_parts); sms_delete);
ctx->self = g_object_ref (self); ctx->self = g_object_ref (self);
ctx->modem = g_object_ref (self->priv->modem); 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 static gboolean
assemble_sms (MMSms *self, assemble_sms (MMSms *self,
GError **error) GError **error)
@@ -606,6 +638,9 @@ mm_sms_class_init (MMSmsClass *klass)
object_class->finalize = finalize; object_class->finalize = finalize;
object_class->dispose = dispose; object_class->dispose = dispose;
klass->delete = sms_delete;
klass->delete_finish = sms_delete_finish;
properties[PROP_CONNECTION] = properties[PROP_CONNECTION] =
g_param_spec_object (MM_SMS_CONNECTION, g_param_spec_object (MM_SMS_CONNECTION,
"Connection", "Connection",

View File

@@ -51,6 +51,14 @@ struct _MMSms {
struct _MMSmsClass { struct _MMSmsClass {
MmGdbusSmsSkeletonClass parent; 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); GType mm_sms_get_type (void);
@@ -81,10 +89,11 @@ guint mm_sms_get_multipart_reference (MMSms *self);
gboolean mm_sms_multipart_is_complete (MMSms *self); gboolean mm_sms_multipart_is_complete (MMSms *self);
gboolean mm_sms_multipart_is_assembled (MMSms *self); gboolean mm_sms_multipart_is_assembled (MMSms *self);
void mm_sms_delete_parts (MMSms *self,
void mm_sms_delete (MMSms *self,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data); gpointer user_data);
gboolean mm_sms_delete_parts_finish (MMSms *self, gboolean mm_sms_delete_finish (MMSms *self,
GAsyncResult *res, GAsyncResult *res,
GError **error); GError **error);