diff options
author | Flexo <nick@nivan.net> | 2016-03-31 22:04:33 +0000 |
---|---|---|
committer | Flexo <nick@nivan.net> | 2016-03-31 22:25:49 +0000 |
commit | 0d581bd04e3a42d20437886d72a13c698f0ddf6a (patch) | |
tree | d14d4a53c5f0c1a5ff051724729e09447715f92c | |
parent | 9cf63aca0ffdc0cf708c3d17ee3ae9f92fa7cbf8 (diff) |
Receive mute/unmute notifications from the stream.
-rw-r--r-- | protocols/twitter/twitter_lib.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/protocols/twitter/twitter_lib.c b/protocols/twitter/twitter_lib.c index 6b38bd7c..c60f159a 100644 --- a/protocols/twitter/twitter_lib.c +++ b/protocols/twitter/twitter_lib.c @@ -953,7 +953,7 @@ static void twitter_status_show(struct im_connection *ic, struct twitter_xml_sta } /* Check this is not a tweet that should be muted */ - uid_str = g_strdup_printf("%" PRIu64, status->user->uid); + uid_str = g_strdup_printf("%" G_GINT64_FORMAT, status->user->uid); if (g_slist_find_custom(td->mutes_ids, uid_str, (GCompareFunc)strcmp)) { g_free(uid_str); return; @@ -1121,6 +1121,8 @@ static gboolean twitter_stream_handle_event(struct im_connection *ic, json_value json_value *source = json_o_get(o, "source"); json_value *target = json_o_get(o, "target"); const char *type = json_o_str(o, "event"); + struct twitter_xml_user *us = NULL; + struct twitter_xml_user *ut = NULL; if (!type || !source || source->type != json_object || !target || target->type != json_object) { @@ -1128,15 +1130,33 @@ static gboolean twitter_stream_handle_event(struct im_connection *ic, json_value } if (strcmp(type, "follow") == 0) { - struct twitter_xml_user *us = twitter_xt_get_user(source); - struct twitter_xml_user *ut = twitter_xt_get_user(target); + us = twitter_xt_get_user(source); + ut = twitter_xt_get_user(target); if (g_strcasecmp(us->screen_name, td->user) == 0) { twitter_add_buddy(ic, ut->screen_name, ut->name); } - txu_free(us); - txu_free(ut); + } else if (strcmp(type, "mute") == 0) { + GSList *ids = td->mutes_ids; + ut = twitter_xt_get_user(target); + ids = g_slist_prepend(ids, + g_strdup_printf("%" G_GINT64_FORMAT, ut->uid)); + + td->mutes_ids = ids; + } else if (strcmp(type, "unmute") == 0) { + GSList *found; + char *uid_str; + ut = twitter_xt_get_user(target); + uid_str = g_strdup_printf("%" G_GINT64_FORMAT, ut->uid); + if ((found = g_slist_find_custom(td->mutes_ids, uid_str, + (GCompareFunc)strcmp))) { + td->mutes_ids = g_slist_remove(td->mutes_ids, found); + } + g_free(uid_str); } + txu_free(us); + txu_free(ut); + return TRUE; } |