aboutsummaryrefslogtreecommitdiffstats
path: root/facebook
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2016-03-20 15:44:26 +0100
committerMarius Halden <marius.h@lden.org>2016-03-20 15:44:26 +0100
commit5c86e6c5f8f7d711447e381a890fcfaac23e247f (patch)
tree042b5df64fb6252d07ea684b8c1c1d5c833abf47 /facebook
parent7d89720036ccd116e607f63d5a55eb989e3ff3e9 (diff)
downloadbitlbee-facebook-patched.tar.gz
bitlbee-facebook-patched.tar.bz2
bitlbee-facebook-patched.tar.xz
Better tracking of last messagepatched
Diffstat (limited to 'facebook')
-rw-r--r--facebook/facebook.c21
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);
}