aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--facebook/facebook.c75
1 files changed, 17 insertions, 58 deletions
diff --git a/facebook/facebook.c b/facebook/facebook.c
index d3e9422..dd624b6 100644
--- a/facebook/facebook.c
+++ b/facebook/facebook.c
@@ -26,13 +26,10 @@
#define OPT_SELFMESSAGE 0
#endif
-typedef struct {
- struct {
- gint new_buddy : 1,
- unread_msg : 1;
- } flags;
- FbApiMessage last_message;
-} FbBuddyData;
+typedef enum {
+ FB_PTRBIT_NEW_BUDDY,
+ FB_PTRBIT_UNREAD_MSG
+} FbPtrBit;
static void
fb_cb_api_messages(FbApi *api, GSList *msgs, gpointer data);
@@ -76,7 +73,7 @@ fb_groupchat_new(struct im_connection *ic, FbId tid, const gchar *name)
}
gc = imcb_chat_new(ic, stid);
- gc->data = g_new0(FbBuddyData, 1);
+ gc->data = GINT_TO_POINTER(FALSE);
fb_data_add_groupchat(fata, gc);
@@ -209,7 +206,6 @@ fb_cb_api_contacts(FbApi *api, GSList *users, gboolean complete, gpointer data)
FbApiUser *user;
FbData *fata = data;
FbId muid;
- FbBuddyData *fbd;
gchar uid[FB_ID_STRMAX];
gint sync;
GSList *l;
@@ -236,8 +232,7 @@ fb_cb_api_contacts(FbApi *api, GSList *users, gboolean complete, gpointer data)
imcb_rename_buddy(ic, uid, user->name);
bu = imcb_buddy_by_handle(ic, uid);
- fbd = bu->data;
- fbd->flags.new_buddy = TRUE;
+ FB_UTIL_PTRBIT_SET(bu->data, FB_PTRBIT_NEW_BUDDY, TRUE);
}
if (!complete) {
@@ -254,9 +249,8 @@ fb_cb_api_contacts(FbApi *api, GSList *users, gboolean complete, gpointer data)
continue;
}
- fbd = bu->data;
- if (fbd->flags.new_buddy) {
- fbd->flags.new_buddy = FALSE;
+ if (FB_UTIL_PTRBIT_GET(bu->data, FB_PTRBIT_NEW_BUDDY)) {
+ FB_UTIL_PTRBIT_SET(bu->data, FB_PTRBIT_NEW_BUDDY, FALSE);
} else {
imcb_remove_buddy(ic, bu->handle, NULL);
}
@@ -367,7 +361,6 @@ fb_cb_api_messages(FbApi *api, GSList *msgs, gpointer data)
bee_user_t *bu;
FbApiMessage *msg;
FbData *fata = data;
- FbBuddyData *fbd;
gboolean mark;
gboolean selfmess;
gchar *str;
@@ -423,24 +416,13 @@ fb_cb_api_messages(FbApi *api, GSList *msgs, gpointer data)
}
if (msg->tid == 0) {
- fbd = bu->data;
if (mark) {
fb_api_read(api, msg->uid, FALSE);
} else {
- fbd->flags.unread_msg = TRUE;
- }
-
- if (msg->tstamp <= fbd->last_message.tstamp ||
- (msg->tstamp == fbd->last_message.tstamp &&
- g_strcmp0(msg->text, fbd->last_message.text) == 0))
- {
- continue;
+ FB_UTIL_PTRBIT_SET(bu->data, FB_PTRBIT_UNREAD_MSG, TRUE);
}
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;
}
@@ -456,25 +438,13 @@ fb_cb_api_messages(FbApi *api, GSList *msgs, gpointer data)
}
if (gc != NULL) {
- fbd = gc->data;
if (mark) {
fb_api_read(api, msg->tid, TRUE);
} else {
- fbd->flags.unread_msg = TRUE;
- }
-
- if (msg->tstamp < fbd->last_message.tstamp ||
- (msg->tstamp == fbd->last_message.tstamp &&
- msg->uid == fbd->last_message.uid &&
- g_strcmp0(msg->text, fbd->last_message.text) == 0))
- {
- continue;
+ gc->data = GINT_TO_POINTER(TRUE);
}
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);
}
}
}
@@ -800,19 +770,17 @@ fb_buddy_msg(struct im_connection *ic, char *to, char *message, int flags)
FbApi *api;
FbData *fata = ic->proto_data;
FbId uid;
- FbBuddyData *fbd;
api = fb_data_get_api(fata);
uid = FB_ID_FROM_STR(to);
bu = bee_user_by_handle(ic->bee, ic, to);
- fbd = bu->data;
if (set_getbool(&acct->set, "mark_read_reply") &&
- (bu == NULL) &&
- fbd->flags.unread_msg)
+ (bu != NULL) &&
+ FB_UTIL_PTRBIT_GET(bu->data, FB_PTRBIT_UNREAD_MSG))
{
fb_api_read(api, uid, FALSE);
- fbd->flags.unread_msg = FALSE;
+ FB_UTIL_PTRBIT_SET(bu->data, FB_PTRBIT_UNREAD_MSG, FALSE);
}
fb_api_message(api, uid, FALSE, message);
@@ -895,10 +863,6 @@ 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);
imcb_chat_free(gc);
@@ -911,18 +875,16 @@ fb_chat_msg(struct groupchat *gc, char *message, int flags)
FbApi *api;
FbData *fata = gc->ic->proto_data;
FbId tid;
- FbBuddyData *fbd;
api = fb_data_get_api(fata);
tid = FB_ID_FROM_STR(gc->title);
fb_api_message(api, tid, TRUE, message);
- fbd = gc->data;
if (set_getbool(&acct->set, "mark_read_reply") &&
- fbd->flags.unread_msg)
+ GPOINTER_TO_INT(gc->data))
{
fb_api_read(api, tid, TRUE);
- fbd->flags.unread_msg = FALSE;
+ gc->data = GINT_TO_POINTER(TRUE);
}
}
@@ -963,16 +925,13 @@ fb_away_states(struct im_connection *ic)
static void
fb_buddy_data_add(struct bee_user *bu)
{
- bu->data = g_new0(FbBuddyData, 1);
+ bu->data = GINT_TO_POINTER(0);
}
static void
fb_buddy_data_free(struct bee_user *bu)
{
- FbBuddyData *fbd = bu->data;
-
- g_free(fbd->last_message.text);
- g_free(bu->data);
+ bu->data = NULL;
}
static account_t *