diff options
author | Matt Ranostay <matt.ranostay@konsulko.com> | 2020-03-18 20:58:46 -0700 |
---|---|---|
committer | Matt Ranostay <matt.ranostay@konsulko.com> | 2020-03-21 04:14:56 +0000 |
commit | 502078129e931d96092bff369b5104f0ce4455ef (patch) | |
tree | 19a7d59c2efce24b4e3b44541357f17151555af8 | |
parent | 4f710ea562dec11e5d5eda3c61c4e234a3fc2456 (diff) |
bluetooth-map: prevent double message eventsicefish_9.0.4icefish_9.0.3icefish_9.0.2icefish_9.0.1icefish/9.0.4icefish/9.0.3icefish/9.0.2icefish/9.0.19.0.49.0.39.0.29.0.1icefish
Some messaging applications create notifications when opened
even if already been sent out. So we keep a hash map of already
sent notifications. This likely needs a better solution in the
future.
Bug-AGL: SPEC-3267
Change-Id: I1daba04f99819bd7f83bff428131cced0d6d97e6
Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
-rw-r--r-- | binding/bluetooth-map-api.c | 11 | ||||
-rw-r--r-- | binding/bluetooth-map-common.h | 3 |
2 files changed, 14 insertions, 0 deletions
diff --git a/binding/bluetooth-map-api.c b/binding/bluetooth-map-api.c index 7874181..b0a97d7 100644 --- a/binding/bluetooth-map-api.c +++ b/binding/bluetooth-map-api.c @@ -654,7 +654,17 @@ static void bluez_map_signal_callback( if (!map_notification_check(var)) return; + /* Some messaging applications send out + * notifications on startup, even if already + * sent + */ + if (g_hash_table_contains(ns->already_notified, path)) + return; + map_request_message(ns, path); + + g_hash_table_insert(ns->already_notified, g_strdup(path), NULL); + continue; } @@ -790,6 +800,7 @@ static struct map_state *map_init(GMainLoop *loop) } ns->xfer_queue = g_hash_table_new(g_str_hash, g_str_equal); + ns->already_notified = g_hash_table_new(g_str_hash, g_str_equal); ns->message_sub = g_dbus_connection_signal_subscribe( ns->conn, BLUEZ_OBEX_SERVICE, diff --git a/binding/bluetooth-map-common.h b/binding/bluetooth-map-common.h index 6e93b9f..bcaa88d 100644 --- a/binding/bluetooth-map-common.h +++ b/binding/bluetooth-map-common.h @@ -55,6 +55,9 @@ struct map_state { /* xfer queue table */ GHashTable *xfer_queue; + + /* message notify blacklist */ + GHashTable *already_notified; }; enum xfer_types { |