Changeset 991c75f for protocols/twitter/twitter_lib.c
- Timestamp:
- 2016-04-16T17:21:33Z (9 years ago)
- Branches:
- master
- Children:
- a244877
- Parents:
- c9603a3 (diff), 166a571 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/twitter/twitter_lib.c
rc9603a3 r991c75f 240 240 241 241 static void twitter_http_get_friends_ids(struct http_request *req); 242 static void twitter_http_get_mutes_ids(struct http_request *req); 243 static void twitter_http_get_noretweets_ids(struct http_request *req); 242 244 243 245 /** … … 252 254 args[1] = g_strdup_printf("%" G_GINT64_FORMAT, next_cursor); 253 255 twitter_http(ic, TWITTER_FRIENDS_IDS_URL, twitter_http_get_friends_ids, ic, 0, args, 2); 256 257 g_free(args[1]); 258 } 259 260 /** 261 * Get the muted users ids. 262 */ 263 void twitter_get_mutes_ids(struct im_connection *ic, gint64 next_cursor) 264 { 265 char *args[2]; 266 267 args[0] = "cursor"; 268 args[1] = g_strdup_printf("%" G_GINT64_FORMAT, next_cursor); 269 twitter_http(ic, TWITTER_MUTES_IDS_URL, twitter_http_get_mutes_ids, ic, 0, args, 2); 270 271 g_free(args[1]); 272 } 273 274 /** 275 * Get the ids for users from whom we should ignore retweets. 276 */ 277 void twitter_get_noretweets_ids(struct im_connection *ic, gint64 next_cursor) 278 { 279 char *args[2]; 280 281 args[0] = "cursor"; 282 args[1] = g_strdup_printf("%" G_GINT64_FORMAT, next_cursor); 283 twitter_http(ic, TWITTER_NORETWEETS_IDS_URL, twitter_http_get_noretweets_ids, ic, 0, args, 2); 254 284 255 285 g_free(args[1]); … … 332 362 twitter_get_users_lookup(ic); 333 363 } 364 365 txl->list = NULL; 366 txl_free(txl); 367 } 368 369 /** 370 * Callback for getting the mutes ids. 371 */ 372 static void twitter_http_get_mutes_ids(struct http_request *req) 373 { 374 struct im_connection *ic = req->data; 375 json_value *parsed; 376 struct twitter_xml_list *txl; 377 struct twitter_data *td; 378 379 // Check if the connection is stil active 380 if (!g_slist_find(twitter_connections, ic)) { 381 return; 382 } 383 384 td = ic->proto_data; 385 386 // Parse the data. 387 if (!(parsed = twitter_parse_response(ic, req))) { 388 return; 389 } 390 391 txl = g_new0(struct twitter_xml_list, 1); 392 txl->list = td->mutes_ids; 393 394 /* mute ids API response is similar enough to friends response 395 to reuse this method */ 396 twitter_xt_get_friends_id_list(parsed, txl); 397 json_value_free(parsed); 398 399 td->mutes_ids = txl->list; 400 if (txl->next_cursor) { 401 /* Recurse while there are still more pages */ 402 twitter_get_mutes_ids(ic, txl->next_cursor); 403 } 404 405 txl->list = NULL; 406 txl_free(txl); 407 } 408 409 /** 410 * Callback for getting the no-retweets ids. 411 */ 412 static void twitter_http_get_noretweets_ids(struct http_request *req) 413 { 414 struct im_connection *ic = req->data; 415 json_value *parsed; 416 struct twitter_xml_list *txl; 417 struct twitter_data *td; 418 419 // Check if the connection is stil active 420 if (!g_slist_find(twitter_connections, ic)) { 421 return; 422 } 423 424 td = ic->proto_data; 425 426 // Parse the data. 427 if (!(parsed = twitter_parse_response(ic, req))) { 428 return; 429 } 430 431 txl = g_new0(struct twitter_xml_list, 1); 432 txl->list = td->noretweets_ids; 433 434 // Process the retweet ids 435 txl->type = TXL_ID; 436 if (parsed->type == json_array) { 437 unsigned int i; 438 for (i = 0; i < parsed->u.array.length; i++) { 439 json_value *c = parsed->u.array.values[i]; 440 if (c->type != json_integer) { 441 continue; 442 } 443 txl->list = g_slist_prepend(txl->list, 444 g_strdup_printf("%"PRIu64, c->u.integer)); 445 } 446 } 447 448 json_value_free(parsed); 449 td->noretweets_ids = txl->list; 334 450 335 451 txl->list = NULL; … … 831 947 struct twitter_data *td = ic->proto_data; 832 948 char *last_id_str; 949 char *uid_str; 833 950 834 951 if (status->user == NULL || status->text == NULL) { 952 return; 953 } 954 955 /* Check this is not a tweet that should be muted */ 956 uid_str = g_strdup_printf("%" PRIu64, status->user->uid); 957 if (getenv("BITLBEE_DEBUG")) { 958 GSList *item; 959 fprintf(stderr, "Checking mutes; this uid=%s\n", uid_str); 960 for (item = td->mutes_ids; item != NULL; item = item->next) { 961 fprintf(stderr, " id: %s\n", (char *)item->data); 962 } 963 } 964 if (g_slist_find_custom(td->mutes_ids, uid_str, (GCompareFunc)strcmp)) { 965 g_free(uid_str); 966 return; 967 } 968 if (status->id != status->rt_id && g_slist_find_custom(td->noretweets_ids, uid_str, (GCompareFunc)strcmp)) { 969 g_free(uid_str); 835 970 return; 836 971 } … … 857 992 set_setstr(&ic->acc->set, "_last_tweet", last_id_str); 858 993 g_free(last_id_str); 994 g_free(uid_str); 859 995 } 860 996 … … 993 1129 json_value *target = json_o_get(o, "target"); 994 1130 const char *type = json_o_str(o, "event"); 1131 struct twitter_xml_user *us = NULL; 1132 struct twitter_xml_user *ut = NULL; 995 1133 996 1134 if (!type || !source || source->type != json_object … … 1000 1138 1001 1139 if (strcmp(type, "follow") == 0) { 1002 struct twitter_xml_user *us = twitter_xt_get_user(source);1003 struct twitter_xml_user *ut = twitter_xt_get_user(target);1140 us = twitter_xt_get_user(source); 1141 ut = twitter_xt_get_user(target); 1004 1142 if (g_strcasecmp(us->screen_name, td->user) == 0) { 1005 1143 twitter_add_buddy(ic, ut->screen_name, ut->name); 1006 1144 } 1007 txu_free(us); 1008 txu_free(ut); 1009 } 1145 } else if (strcmp(type, "mute") == 0) { 1146 GSList *found; 1147 char *uid_str; 1148 ut = twitter_xt_get_user(target); 1149 uid_str = g_strdup_printf("%" PRIu64, ut->uid); 1150 if (!(found = g_slist_find_custom(td->mutes_ids, uid_str, 1151 (GCompareFunc)strcmp))) { 1152 td->mutes_ids = g_slist_prepend(td->mutes_ids, uid_str); 1153 } 1154 twitter_log(ic, "Muted user %s", ut->screen_name); 1155 if (getenv("BITLBEE_DEBUG")) { 1156 fprintf(stderr, "New mute: %s %"PRIu64"\n", 1157 ut->screen_name, ut->uid); 1158 } 1159 } else if (strcmp(type, "unmute") == 0) { 1160 GSList *found; 1161 char *uid_str; 1162 ut = twitter_xt_get_user(target); 1163 uid_str = g_strdup_printf("%" PRIu64, ut->uid); 1164 if ((found = g_slist_find_custom(td->mutes_ids, uid_str, 1165 (GCompareFunc)strcmp))) { 1166 td->mutes_ids = g_slist_remove(td->mutes_ids, found); 1167 } 1168 g_free(uid_str); 1169 twitter_log(ic, "Unmuted user %s", ut->screen_name); 1170 if (getenv("BITLBEE_DEBUG")) { 1171 fprintf(stderr, "New unmute: %s %"PRIu64"\n", 1172 ut->screen_name, ut->uid); 1173 } 1174 } 1175 1176 txu_free(us); 1177 txu_free(ut); 1010 1178 1011 1179 return TRUE; … … 1524 1692 } 1525 1693 1694 /** 1695 * Mute or unmute a user 1696 */ 1697 void twitter_mute_create_destroy(struct im_connection *ic, char *who, int create) 1698 { 1699 char *args[2]; 1700 1701 args[0] = "screen_name"; 1702 args[1] = who; 1703 twitter_http(ic, create ? TWITTER_MUTES_CREATE_URL : TWITTER_MUTES_DESTROY_URL, 1704 twitter_http_post, ic, 1, args, 2); 1705 } 1706 1526 1707 void twitter_status_destroy(struct im_connection *ic, guint64 id) 1527 1708 {
Note: See TracChangeset
for help on using the changeset viewer.