aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--introspection/org.freedesktop.ModemManager1.Modem.Messaging.xml7
-rw-r--r--libmm-glib/mm-modem-messaging.c50
-rw-r--r--src/mm-iface-modem-messaging.c13
-rw-r--r--src/mm-sms-list.c3
4 files changed, 37 insertions, 36 deletions
diff --git a/introspection/org.freedesktop.ModemManager1.Modem.Messaging.xml b/introspection/org.freedesktop.ModemManager1.Modem.Messaging.xml
index 8923e2c2..514a745f 100644
--- a/introspection/org.freedesktop.ModemManager1.Modem.Messaging.xml
+++ b/introspection/org.freedesktop.ModemManager1.Modem.Messaging.xml
@@ -96,6 +96,13 @@
</signal>
<!--
+ Messages:
+
+ The list of SMS object paths.
+ -->
+ <property name="Messages" type="ao" access="read" />
+
+ <!--
SupportedStorages:
A list of <link linkend="MMSmsStorage">MMSmsStorage</link> values,
diff --git a/libmm-glib/mm-modem-messaging.c b/libmm-glib/mm-modem-messaging.c
index e81c6bdb..fdf14978 100644
--- a/libmm-glib/mm-modem-messaging.c
+++ b/libmm-glib/mm-modem-messaging.c
@@ -236,7 +236,7 @@ sms_object_list_free (GList *list)
static void
list_sms_context_complete_and_free (ListSmsContext *ctx)
{
- g_simple_async_result_complete (ctx->result);
+ g_simple_async_result_complete_in_idle (ctx->result);
g_strfreev (ctx->sms_paths);
sms_object_list_free (ctx->sms_objects);
@@ -331,32 +331,6 @@ create_next_sms (ListSmsContext *ctx)
NULL);
}
-static void
-list_ready (MMModemMessaging *self,
- GAsyncResult *res,
- ListSmsContext *ctx)
-{
- GError *error = NULL;
-
- mm_gdbus_modem_messaging_call_list_finish (MM_GDBUS_MODEM_MESSAGING (self), &ctx->sms_paths, res, &error);
- if (error) {
- g_simple_async_result_take_error (ctx->result, error);
- list_sms_context_complete_and_free (ctx);
- return;
- }
-
- /* If no SMS, just end here. */
- if (!ctx->sms_paths || !ctx->sms_paths[0]) {
- g_simple_async_result_set_op_res_gpointer (ctx->result, NULL, NULL);
- list_sms_context_complete_and_free (ctx);
- return;
- }
-
- /* Got list of paths. If at least one found, start creating objects for each */
- ctx->i = 0;
- create_next_sms (ctx);
-}
-
/**
* mm_modem_messaging_list:
* @self: A #MMModemMessaging.
@@ -390,10 +364,18 @@ mm_modem_messaging_list (MMModemMessaging *self,
if (cancellable)
ctx->cancellable = g_object_ref (cancellable);
- mm_gdbus_modem_messaging_call_list (MM_GDBUS_MODEM_MESSAGING (self),
- cancellable,
- (GAsyncReadyCallback)list_ready,
- ctx);
+ ctx->sms_paths = mm_gdbus_modem_messaging_dup_messages (MM_GDBUS_MODEM_MESSAGING (self));
+
+ /* If no SMS, just end here. */
+ if (!ctx->sms_paths || !ctx->sms_paths[0]) {
+ g_simple_async_result_set_op_res_gpointer (ctx->result, NULL, NULL);
+ list_sms_context_complete_and_free (ctx);
+ return;
+ }
+
+ /* Got list of paths. If at least one found, start creating objects for each */
+ ctx->i = 0;
+ create_next_sms (ctx);
}
/**
@@ -420,11 +402,7 @@ mm_modem_messaging_list_sync (MMModemMessaging *self,
g_return_val_if_fail (MM_IS_MODEM_MESSAGING (self), NULL);
- if (!mm_gdbus_modem_messaging_call_list_sync (MM_GDBUS_MODEM_MESSAGING (self),
- &sms_paths,
- cancellable,
- error))
- return NULL;
+ sms_paths = mm_gdbus_modem_messaging_dup_messages (MM_GDBUS_MODEM_MESSAGING (self));
/* Only non-empty lists are returned */
if (!sms_paths)
diff --git a/src/mm-iface-modem-messaging.c b/src/mm-iface-modem-messaging.c
index 874397e5..11018624 100644
--- a/src/mm-iface-modem-messaging.c
+++ b/src/mm-iface-modem-messaging.c
@@ -490,6 +490,17 @@ mm_iface_modem_messaging_is_storage_supported_for_receiving (MMIfaceModemMessagi
/*****************************************************************************/
static void
+update_message_list (MmGdbusModemMessaging *skeleton,
+ MMSmsList *list)
+{
+ gchar **paths;
+
+ paths = mm_sms_list_get_paths (list);
+ mm_gdbus_modem_messaging_set_messages (skeleton, (const gchar *const *)paths);
+ g_strfreev (paths);
+}
+
+static void
sms_added (MMSmsList *list,
const gchar *sms_path,
gboolean received,
@@ -498,6 +509,7 @@ sms_added (MMSmsList *list,
mm_dbg ("Added %s SMS at '%s'",
received ? "received" : "local",
sms_path);
+ update_message_list (skeleton, list);
mm_gdbus_modem_messaging_emit_added (skeleton, sms_path, received);
}
@@ -507,6 +519,7 @@ sms_deleted (MMSmsList *list,
MmGdbusModemMessaging *skeleton)
{
mm_dbg ("Deleted SMS at '%s'", sms_path);
+ update_message_list (skeleton, list);
mm_gdbus_modem_messaging_emit_deleted (skeleton, sms_path);
}
diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c
index e6f9da3e..79fb64c1 100644
--- a/src/mm-sms-list.c
+++ b/src/mm-sms-list.c
@@ -225,6 +225,9 @@ mm_sms_list_add_sms (MMSmsList *self,
MMSms *sms)
{
self->priv->list = g_list_prepend (self->priv->list, g_object_ref (sms));
+ g_signal_emit (self, signals[SIGNAL_ADDED], 0,
+ mm_sms_get_path (sms),
+ FALSE);
}
/*****************************************************************************/