diff options
Diffstat (limited to 'facebook/facebook.c')
-rw-r--r-- | facebook/facebook.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/facebook/facebook.c b/facebook/facebook.c index 32c022e..38ea7a0 100644 --- a/facebook/facebook.c +++ b/facebook/facebook.c @@ -38,6 +38,11 @@ typedef enum { FB_PTRBIT_UNREAD_MSG } FbPtrBit; +/** + * FbBuddyData + * + * Structure used in bu->data and gc->data + */ typedef struct { gint flags; FbApiMessage last_message; @@ -444,12 +449,16 @@ fb_cb_api_messages(FbApi *api, GSList *msgs, gpointer data) } fbd = bu->data; - if (msg->tstamp <= fbd->last_message.tstamp) { + if (msg->tstamp <= fbd->last_message.tstamp || + (msg->tstamp == fbd->last_message.tstamp && + g_strcmp0(msg->text, fbd->last_message.text) == 0)) { continue; } imcb_buddy_msg(ic, uid, (gchar *) msg->text, flags, tstamp); + g_free(fbd->last_message.text); fbd->last_message = *msg; + fbd->last_message.text = g_strdup(msg->text); continue; } @@ -474,12 +483,15 @@ fb_cb_api_messages(FbApi *api, GSList *msgs, gpointer data) if (msg->tstamp < fbd->last_message.tstamp || (msg->tstamp == fbd->last_message.tstamp && - msg->uid == fbd->last_message.uid)) { + msg->uid == fbd->last_message.uid && + g_strcmp0(msg->text, fbd->last_message.text) == 0)) { continue; } imcb_chat_msg(gc, uid, (gchar *) msg->text, flags, tstamp); + g_free(fbd->last_message.text); fbd->last_message = *msg; + fbd->last_message.text = g_strdup(msg->text); } } } @@ -901,7 +913,9 @@ static void fb_chat_leave(struct groupchat *gc) { FbData *fata = gc->ic->proto_data; + FbBuddyData *fbd = gc->data; + g_free(fbd->last_message.text); g_free(gc->data); fb_data_remove_groupchat(fata, gc); @@ -972,6 +986,9 @@ fb_buddy_data_add(struct bee_user *bu) static void fb_buddy_data_free(struct bee_user *bu) { + FbBuddyData *fbd = bu->data; + + g_free(fbd->last_message.text); g_free(bu->data); } |