sms: allow sublassing the part deletion procedure
This commit is contained in:
@@ -87,13 +87,13 @@ mm_sms_list_delete_sms_finish (MMSmsList *self,
|
||||
}
|
||||
|
||||
static void
|
||||
delete_parts_ready (MMSms *sms,
|
||||
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,8 +150,8 @@ 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,
|
||||
mm_sms_delete (sms,
|
||||
(GAsyncReadyCallback)delete_ready,
|
||||
result);
|
||||
|
||||
/* We do remove here our last reference to the SMS object. The
|
||||
|
45
src/mm-sms.c
45
src/mm-sms.c
@@ -186,8 +186,8 @@ sms_delete_parts_context_complete_and_free (SmsDeletePartsContext *ctx)
|
||||
g_free (ctx);
|
||||
}
|
||||
|
||||
gboolean
|
||||
mm_sms_delete_parts_finish (MMSms *self,
|
||||
static gboolean
|
||||
sms_delete_finish (MMSms *self,
|
||||
GAsyncResult *res,
|
||||
GError **error)
|
||||
{
|
||||
@@ -254,8 +254,8 @@ delete_next_part (SmsDeletePartsContext *ctx)
|
||||
g_free (cmd);
|
||||
}
|
||||
|
||||
void
|
||||
mm_sms_delete_parts (MMSms *self,
|
||||
static void
|
||||
sms_delete (MMSms *self,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
@@ -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",
|
||||
|
13
src/mm-sms.h
13
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,10 +89,11 @@ 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,
|
||||
|
||||
void mm_sms_delete (MMSms *self,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
gboolean mm_sms_delete_parts_finish (MMSms *self,
|
||||
gboolean mm_sms_delete_finish (MMSms *self,
|
||||
GAsyncResult *res,
|
||||
GError **error);
|
||||
|
||||
|
Reference in New Issue
Block a user