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
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. */

View File

@@ -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",

View File

@@ -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 */