---
src/service.c | 48 +++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 45 insertions(+), 3 deletions(-)
diff --git a/src/service.c b/src/service.c
index 44184cb..ba23b4a 100644
--- a/src/service.c
+++ b/src/service.c
@@ -218,6 +218,40 @@ static void emit_msg_status_changed(const char *path, const char
*new_status)
g_dbus_send_message(connection, signal);
}
+static void emit_msg_delivery_changed(const char *path, const char *rec,
+ const char *status)
+{
+ DBusMessage *signal;
+ DBusMessageIter iter;
+ DBusMessageIter variant;
+ const char *type = "delivery_report";
+
+ signal = dbus_message_new_signal(path, MMS_MESSAGE_INTERFACE,
+ "ReportChanged");
+ if (signal == NULL)
+ return;
+
+ dbus_message_iter_init_append(signal, &iter);
+
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &type);
+
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_STRING_AS_STRING, &variant);
+
+ dbus_message_iter_append_basic(&variant, DBUS_TYPE_STRING, &rec);
+
+ dbus_message_iter_close_container(&iter, &variant);
+
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_STRING_AS_STRING, &variant);
+
+ dbus_message_iter_append_basic(&variant, DBUS_TYPE_STRING, &status);
+
+ dbus_message_iter_close_container(&iter, &variant);
+
+ g_dbus_send_message(connection, signal);
+}
+
static DBusMessage *msg_mark_read(DBusConnection *conn,
DBusMessage *msg, void *user_data)
{
@@ -269,6 +303,10 @@ static const GDBusMethodTable message_methods[] = {
static const GDBusSignalTable message_signals[] = {
{ GDBUS_SIGNAL("PropertyChanged",
GDBUS_ARGS({ "name", "s" }, { "value", "v" }))
},
+ { GDBUS_SIGNAL("ReportChanged",
+ GDBUS_ARGS({ "name", "s" },
+ { "rec", "v" },
+ { "status", "v" })) },
{ }
};
@@ -1369,6 +1407,7 @@ static void process_delivery_ind_notification(struct mms_service
*service,
char uuid[MMS_META_UUID_LEN + 1];
char *path;
char *to;
+ const char *new_status;
if (get_meta_by_msgid(service, di_msg->di.msgid, uuid) == FALSE)
goto bail;
@@ -1381,15 +1420,18 @@ static void process_delivery_ind_notification(struct mms_service
*service,
mms_address_to_string(to);
- g_key_file_set_string(meta, "delivery_status", to,
- delivery_status[di_msg->di.dr_status - 127]);
+ new_status = delivery_status[di_msg->di.dr_status - 127];
- g_free(to);
+ g_key_file_set_string(meta, "delivery_status", to, new_status);
mms_store_meta_close(service->identity, uuid, meta, TRUE);
path = g_strdup_printf("%s/%s/%s", MMS_PATH, service->identity, uuid);
+ emit_msg_delivery_changed(path, to, new_status);
+
+ g_free(to);
+
g_free(path);
bail:
--
1.7.9.5