Changes in protocols/twitter/twitter_lib.c [c43146d:fedc8f1]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/twitter/twitter_lib.c
rc43146d rfedc8f1 460 460 #endif 461 461 462 static void expand_entities(char **text, const json_value *node);462 static char* expand_entities(char* text, const json_value *entities); 463 463 464 464 /** … … 473 473 { 474 474 struct twitter_xml_status *txs; 475 const json_value *rt = NULL ;475 const json_value *rt = NULL, *entities = NULL; 476 476 477 477 if (node->type != json_object) { … … 501 501 } else if (strcmp("in_reply_to_status_id", k) == 0 && v->type == json_integer) { 502 502 txs->reply_to = v->u.integer; 503 } else if (strcmp("entities", k) == 0 && v->type == json_object) { 504 entities = v; 503 505 } 504 506 } … … 514 516 txs_free(rtxs); 515 517 } 516 } else {517 expand_entities(&txs->text, node);518 } else if (entities) { 519 txs->text = expand_entities(txs->text, entities); 518 520 } 519 521 … … 532 534 { 533 535 struct twitter_xml_status *txs; 536 const json_value *entities = NULL; 534 537 535 538 if (node->type != json_object) { … … 558 561 } 559 562 560 expand_entities(&txs->text, node); 563 if (entities) { 564 txs->text = expand_entities(txs->text, entities); 565 } 561 566 562 567 if (txs->text && txs->user && txs->id) { … … 568 573 } 569 574 570 static void expand_entities(char **text, const json_value *node) 571 { 572 json_value *entities, *quoted; 573 char *quote_url = NULL, *quote_text = NULL; 574 575 if (!((entities = json_o_get(node, "entities")) && entities->type == json_object)) 576 return; 577 if ((quoted = json_o_get(node, "quoted_status")) && quoted->type == json_object) { 578 /* New "retweets with comments" feature. Note that this info 579 * seems to be included in the streaming API only! Grab the 580 * full message and try to insert it when we run into the 581 * Tweet entity. */ 582 struct twitter_xml_status *txs = twitter_xt_get_status(quoted); 583 quote_text = g_strdup_printf("@%s: %s", txs->user->screen_name, txs->text); 584 quote_url = g_strdup_printf("%s/status/%" G_GUINT64_FORMAT, txs->user->screen_name, txs->id); 585 txs_free(txs); 586 } else { 587 quoted = NULL; 588 } 589 575 static char* expand_entities(char* text, const json_value *entities) 576 { 590 577 JSON_O_FOREACH(entities, k, v) { 591 578 int i; … … 599 586 600 587 for (i = 0; i < v->u.array.length; i++) { 601 const char *format = "%s%s <%s>%s";602 603 588 if (v->u.array.values[i]->type != json_object) { 604 589 continue; … … 607 592 const char *kort = json_o_str(v->u.array.values[i], "url"); 608 593 const char *disp = json_o_str(v->u.array.values[i], "display_url"); 609 const char *full = json_o_str(v->u.array.values[i], "expanded_url");610 594 char *pos, *new; 611 595 612 if (!kort || !disp || !(pos = strstr( *text, kort))) {596 if (!kort || !disp || !(pos = strstr(text, kort))) { 613 597 continue; 614 598 } 615 if (quote_url && strstr(full, quote_url)) {616 format = "%s<%s> [%s]%s";617 disp = quote_text;618 }619 599 620 600 *pos = '\0'; 621 new = g_strdup_printf( format, *text, kort,601 new = g_strdup_printf("%s%s <%s>%s", text, kort, 622 602 disp, pos + strlen(kort)); 623 603 624 g_free( *text);625 *text = new;626 } 627 } 628 g_free(quote_text); 629 g_free(quote_url);604 g_free(text); 605 text = new; 606 } 607 } 608 609 return text; 630 610 } 631 611 … … 701 681 if (g_strcasecmp(txs->user->screen_name, td->user) == 0) { 702 682 td->log[td->log_id].id = txs->rt_id; 703 /* More useful than NULL. */704 td->log[td->log_id].bu = &twitter_log_local_user;705 683 } 706 684
Note: See TracChangeset
for help on using the changeset viewer.