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
|
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,9 +150,9 @@ 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
|
||||||
* async method will keep its own while the operation is ongoing. */
|
* async method will keep its own while the operation is ongoing. */
|
||||||
|
53
src/mm-sms.c
53
src/mm-sms.c
@@ -186,10 +186,10 @@ 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)
|
||||||
{
|
{
|
||||||
return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), 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);
|
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)
|
||||||
{
|
{
|
||||||
SmsDeletePartsContext *ctx;
|
SmsDeletePartsContext *ctx;
|
||||||
|
|
||||||
@@ -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",
|
||||||
|
21
src/mm-sms.h
21
src/mm-sms.h
@@ -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,11 +89,12 @@ 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,
|
|
||||||
GAsyncReadyCallback callback,
|
void mm_sms_delete (MMSms *self,
|
||||||
gpointer user_data);
|
GAsyncReadyCallback callback,
|
||||||
gboolean mm_sms_delete_parts_finish (MMSms *self,
|
gpointer user_data);
|
||||||
GAsyncResult *res,
|
gboolean mm_sms_delete_finish (MMSms *self,
|
||||||
GError **error);
|
GAsyncResult *res,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
#endif /* MM_SMS_H */
|
#endif /* MM_SMS_H */
|
||||||
|
Reference in New Issue
Block a user