aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/twitter/twitter_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/twitter/twitter_lib.c')
-rw-r--r--protocols/twitter/twitter_lib.c40
1 files changed, 29 insertions, 11 deletions
diff --git a/protocols/twitter/twitter_lib.c b/protocols/twitter/twitter_lib.c
index 44f0182d..c04e83ca 100644
--- a/protocols/twitter/twitter_lib.c
+++ b/protocols/twitter/twitter_lib.c
@@ -898,35 +898,51 @@ static char *twitter_msg_add_id(struct im_connection *ic,
}
}
- td->log_id = (td->log_id + 1) % td->log_length;
- td->log[td->log_id].id = txs->id;
- td->log[td->log_id].bu = bee_user_by_handle(ic->bee, ic, txs->user->screen_name);
+ if (txs->from_filter) {
+ td->filter_log_id = (td->filter_log_id + 1) % td->log_length;
+ td->filter_log[td->filter_log_id].id = txs->id;
+ td->filter_log[td->filter_log_id].bu = bee_user_by_handle(ic->bee, ic, txs->user->screen_name);
+ } else {
+ td->log_id = (td->log_id + 1) % td->log_length;
+ td->log[td->log_id].id = txs->id;
+ td->log[td->log_id].bu = bee_user_by_handle(ic->bee, ic, txs->user->screen_name);
+ }
/* This is all getting hairy. :-( If we RT'ed something ourselves,
remember OUR id instead so undo will work. In other cases, the
original tweet's id should be remembered for deduplicating. */
if (g_strcasecmp(txs->user->screen_name, td->user) == 0) {
- td->log[td->log_id].id = txs->rt_id;
- /* More useful than NULL. */
- td->log[td->log_id].bu = &twitter_log_local_user;
+ if (txs->from_filter) {
+ td->filter_log[td->filter_log_id].id = txs->rt_id;
+ /* More useful than NULL. */
+ td->filter_log[td->filter_log_id].bu = &twitter_log_local_user;
+ } else {
+ td->log[td->log_id].id = txs->rt_id;
+ /* More useful than NULL. */
+ td->log[td->log_id].bu = &twitter_log_local_user;
+ }
}
if (set_getbool(&ic->acc->set, "show_ids")) {
if (reply_to != -1) {
if (td->long_ids) {
return g_strdup_printf("\002[\002%04x->%04x\002]\002 %s%s",
- td->log_id, reply_to, prefix, txs->text);
+ txs->from_filter ? td->filter_log_id : td->log_id,
+ reply_to, prefix, txs->text);
} else {
return g_strdup_printf("\002[\002%02x->%02x\002]\002 %s%s",
- td->log_id, reply_to, prefix, txs->text);
+ txs->from_filter ? td->filter_log_id : td->log_id,
+ reply_to, prefix, txs->text);
}
} else {
if (td->long_ids) {
return g_strdup_printf("\002[\002%04x\002]\002 %s%s",
- td->log_id, prefix, txs->text);
+ txs->from_filter ? td->filter_log_id : td->log_id,
+ prefix, txs->text);
} else {
return g_strdup_printf("\002[\002%02x\002]\002 %s%s",
- td->log_id, prefix, txs->text);
+ txs->from_filter ? td->filter_log_id : td->log_id,
+ prefix, txs->text);
}
}
} else {
@@ -1205,10 +1221,12 @@ static gboolean twitter_stream_handle_object(struct im_connection *ic, json_valu
static gboolean twitter_stream_handle_status(struct im_connection *ic, struct twitter_xml_status *txs)
{
struct twitter_data *td = ic->proto_data;
+ struct twitter_log_data *tl;
int i;
+ tl = txs->from_filter ? td->filter_log : td->log;
for (i = 0; i < td->log_length; i++) {
- if (td->log[i].id == txs->id) {
+ if (tl[i].id == txs->id) {
/* Got a duplicate (RT, probably). Drop it. */
return TRUE;
}