diff options
| -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);  }  | 
