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)