diff options
-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 { |