OSDN Git Service

obexd: Fix emitting Type property changed signals for messages
authorChristian Fetzer <christian.fetzer@bmw-carit.de>
Tue, 24 Sep 2013 11:27:08 +0000 (13:27 +0200)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 2 Oct 2013 12:27:22 +0000 (15:27 +0300)
In order to determine if the message Type property has changed,
the stored type needs to be compared with the parsed type and not with
the raw value received from the MSE.

This fixes the issue that the property changed signal for the Type
property is emitted for every message on every ListMessage call.

obexd/client/map.c

index e1f95f1..3feac90 100644 (file)
@@ -923,21 +923,22 @@ static void parse_recipient_address(struct map_msg *msg, const char *value)
 
 static void parse_type(struct map_msg *msg, const char *value)
 {
-       if (g_strcmp0(msg->type, value) == 0)
-               return;
-
-       g_free(msg->type);
+       const char *type = NULL;
 
        if (strcasecmp(value, "SMS_GSM") == 0)
-               msg->type = g_strdup("sms-gsm");
+               type = "sms-gsm";
        else if (strcasecmp(value, "SMS_CDMA") == 0)
-               msg->type = g_strdup("sms-cdma");
+               type = "sms-cdma";
        else if (strcasecmp(value, "EMAIL") == 0)
-               msg->type = g_strdup("email");
+               type = "email";
        else if (strcasecmp(value, "MMS") == 0)
-               msg->type = g_strdup("mms");
-       else
-               msg->type = NULL;
+               type = "mms";
+
+       if (g_strcmp0(msg->type, type) == 0)
+               return;
+
+       g_free(msg->type);
+       msg->type = g_strdup(type);
 
        g_dbus_emit_property_changed(conn, msg->path,
                                                MAP_MSG_INTERFACE, "Type");