diff options
Diffstat (limited to 'facebook/facebook-api.c')
-rw-r--r-- | facebook/facebook-api.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/facebook/facebook-api.c b/facebook/facebook-api.c index dc22bea..4344cf8 100644 --- a/facebook/facebook-api.c +++ b/facebook/facebook-api.c @@ -60,7 +60,7 @@ struct _FbApiPrivate GQueue *msgs; gboolean invisible; guint unread; - + FbId lastmid; }; struct _FbApiData @@ -1439,6 +1439,8 @@ fb_api_cb_publish_ms(FbApi *api, GByteArray *pload) values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE, + "$.deltaNewMessage.messageMetadata.offlineThreadingId"); + fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE, "$.deltaNewMessage.messageMetadata.actorFbId"); fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE, "$.deltaNewMessage.messageMetadata" @@ -1457,6 +1459,20 @@ fb_api_cb_publish_ms(FbApi *api, GByteArray *pload) fb_json_values_set_array(values, TRUE, "$.deltas"); while (fb_json_values_update(values, &err)) { + id = fb_json_values_next_int(values, 0); + + /* Ignore everything but new messages */ + if (id == 0) { + continue; + } + + /* Ignore sequential duplicates */ + if (id == priv->lastmid) { + fb_util_debug_info("Ignoring duplicate %" FB_ID_FORMAT, id); + continue; + } + + priv->lastmid = id; fb_api_message_reset(&msg, FALSE); msg.uid = fb_json_values_next_int(values, 0); oid = fb_json_values_next_int(values, 0); @@ -1471,10 +1487,6 @@ fb_api_cb_publish_ms(FbApi *api, GByteArray *pload) } } - if (msg.uid == 0) { - continue; - } - body = fb_json_values_next_str(values, NULL); if (body != NULL) { |