Mercurial > pidgin-twitter
comparison twitter_api.c @ 335:34ecd09ce4f8
properly set msgid to the posted message.
| author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
|---|---|
| date | Tue, 13 Oct 2009 14:07:55 +0900 |
| parents | dff611cb9f7b |
| children | 2e37e715e4a6 |
comparison
equal
deleted
inserted
replaced
| 334:2dec3eb6e770 | 335:34ecd09ce4f8 |
|---|---|
| 139 xmlFree(str); | 139 xmlFree(str); |
| 140 } | 140 } |
| 141 else if(!xmlStrcmp(nptr->name, (xmlChar *)"id")) { | 141 else if(!xmlStrcmp(nptr->name, (xmlChar *)"id")) { |
| 142 gchar *str = (gchar *)xmlNodeGetContent(nptr); | 142 gchar *str = (gchar *)xmlNodeGetContent(nptr); |
| 143 st->id = atoll(str); | 143 st->id = atoll(str); |
| 144 twitter_debug("id=%llud\n", (long long unsigned int)st->id); | 144 twitter_debug("id=%llu\n", (long long unsigned int)st->id); |
| 145 xmlFree(str); | 145 xmlFree(str); |
| 146 } | 146 } |
| 147 else if(!xmlStrcmp(nptr->name, (xmlChar *)"text")) { | 147 else if(!xmlStrcmp(nptr->name, (xmlChar *)"text")) { |
| 148 gchar *str = (gchar *)xmlNodeGetContent(nptr); | 148 gchar *str = (gchar *)xmlNodeGetContent(nptr); |
| 149 st->text = g_strdup(str); | 149 st->text = g_strdup(str); |
| 366 } | 366 } |
| 367 | 367 |
| 368 if (error_message) { | 368 if (error_message) { |
| 369 /* connection failed or something */ | 369 /* connection failed or something */ |
| 370 msg = g_strdup_printf("Local error: %s", error_message); | 370 msg = g_strdup_printf("Local error: %s", error_message); |
| 371 } else { | 371 } |
| 372 else { | |
| 372 int code = -1; | 373 int code = -1; |
| 373 | 374 |
| 374 if ((strncmp(url_text, "HTTP/1.0", strlen("HTTP/1.0")) == 0 | 375 if ((strncmp(url_text, "HTTP/1.0", strlen("HTTP/1.0")) == 0 |
| 375 || strncmp(url_text, "HTTP/1.1", strlen("HTTP/1.1")) == 0)) { | 376 || strncmp(url_text, "HTTP/1.1", strlen("HTTP/1.1")) == 0)) { |
| 376 | 377 |
| 388 | 389 |
| 389 code = atoi(p1); | 390 code = atoi(p1); |
| 390 | 391 |
| 391 if (code == 200) { | 392 if (code == 200) { |
| 392 error = 0; | 393 error = 0; |
| 393 } else { | 394 } |
| 395 else { | |
| 394 switch (code) { | 396 switch (code) { |
| 395 case 400: | 397 case 400: |
| 396 msg = g_strdup("Invalid request. Too many updates?"); | 398 msg = g_strdup("Invalid request. Too many updates?"); |
| 397 break; | 399 break; |
| 398 case 401: | 400 case 401: |
| 422 } | 424 } |
| 423 } | 425 } |
| 424 } | 426 } |
| 425 | 427 |
| 426 if (!error) { | 428 if (!error) { |
| 427 purple_conv_im_write(conv->u.im, | |
| 428 purple_account_get_username(tm->account), | |
| 429 tm->status, PURPLE_MESSAGE_SEND, tm->time); | |
| 430 | |
| 431 /* cache message ID that posted via API */ | 429 /* cache message ID that posted via API */ |
| 432 gchar *start = NULL; | 430 gchar *start = NULL; |
| 433 xmlDocPtr doc; | 431 xmlDocPtr doc; |
| 434 xmlNode *nptr; | 432 xmlNode *nptr; |
| 433 status_t *st; | |
| 434 gchar *m; | |
| 435 | 435 |
| 436 start = strstr(url_text, "<?xml"); | 436 start = strstr(url_text, "<?xml"); |
| 437 | 437 |
| 438 if(!start) | 438 if(!start) |
| 439 goto fin; | 439 goto fin; |
| 440 | 440 |
| 441 doc = xmlRecoverMemory(start, len - (start - url_text)); | 441 doc = xmlRecoverMemory(start, len - (start - url_text)); |
| 442 if(doc == NULL) | 442 if(doc == NULL) |
| 443 return; | 443 return; |
| 444 | |
| 444 | 445 |
| 445 /* enqueue posted message to postedlist */ | 446 /* enqueue posted message to postedlist */ |
| 446 for(nptr = doc->children; nptr != NULL; nptr = nptr->next) { | 447 for(nptr = doc->children; nptr != NULL; nptr = nptr->next) { |
| 447 if(nptr->type == XML_ELEMENT_NODE && | 448 if(nptr->type == XML_ELEMENT_NODE && |
| 448 !xmlStrcmp(nptr->name, (xmlChar *)"status")) { | 449 !xmlStrcmp(nptr->name, (xmlChar *)"status")) { |
| 449 status_t *st = g_new0(status_t, 1); | 450 st = g_new0(status_t, 1); |
| 450 postedlist = g_list_prepend(postedlist, st); | 451 postedlist = g_list_prepend(postedlist, st); |
| 451 parse_status(nptr, st); | 452 parse_status(nptr, st); |
| 452 } | 453 } |
| 453 } | 454 } |
| 454 | 455 |
| 455 xmlFreeDoc(doc); | 456 xmlFreeDoc(doc); |
| 456 xmlCleanupParser(); | 457 xmlCleanupParser(); |
| 457 | 458 |
| 458 } else { | 459 m = g_strdup_printf("%s ptmsgid=%llu", |
| 460 tm->status, | |
| 461 (long long unsigned int)st->id); | |
| 462 | |
| 463 purple_conv_im_write(conv->u.im, | |
| 464 purple_account_get_username(tm->account), | |
| 465 m, | |
| 466 PURPLE_MESSAGE_SEND, | |
| 467 tm->time); | |
| 468 g_free(m); | |
| 469 | |
| 470 } | |
| 471 else { | |
| 459 gchar *m; | 472 gchar *m; |
| 460 m = g_strdup_printf("%s<BR>%s", | 473 m = g_strdup_printf("%s<BR>%s", |
| 461 msg, tm->status); | 474 msg, tm->status); |
| 462 /* FIXME: too strong. it should be more smart */ | 475 /* FIXME: too strong. it should be more smart */ |
| 463 purple_conv_im_write(conv->u.im, | 476 purple_conv_im_write(conv->u.im, |
| 464 purple_account_get_username(tm->account), | 477 purple_account_get_username(tm->account), |
| 465 m, PURPLE_MESSAGE_ERROR, time(NULL)); | 478 m, |
| 479 PURPLE_MESSAGE_ERROR, | |
| 480 time(NULL)); | |
| 466 g_free(m); | 481 g_free(m); |
| 467 } | 482 } |
| 468 | 483 |
| 469 fin: | 484 fin: |
| 470 if (msg) | 485 if (msg) |
