diff options
author | Marius Halden <marius.h@lden.org> | 2016-03-20 15:44:26 +0100 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2016-03-20 15:44:26 +0100 |
commit | 5c86e6c5f8f7d711447e381a890fcfaac23e247f (patch) | |
tree | 042b5df64fb6252d07ea684b8c1c1d5c833abf47 | |
parent | 7d89720036ccd116e607f63d5a55eb989e3ff3e9 (diff) | |
download | bitlbee-facebook-patched.tar.gz bitlbee-facebook-patched.tar.bz2 bitlbee-facebook-patched.tar.xz |
Better tracking of last messagepatched
-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); } |