| 426 * @param username The contact which presence to update |
426 * @param username The contact which presence to update |
| 427 * @param presence The new presence state for the contact |
427 * @param presence The new presence state for the contact |
| 428 * @param mood The new mood for the contact |
428 * @param mood The new mood for the contact |
| 429 * @param customMood The custom mood identifier |
429 * @param customMood The custom mood identifier |
| 430 * @param statusMsg This is the contact's status message |
430 * @param statusMsg This is the contact's status message |
| 431 * @param avatarId This is the contact's avatar id |
431 */ |
| 432 */ |
432 void mxit_update_buddy_presence( struct MXitSession* session, const char* username, short presence, short mood, const char* customMood, const char* statusMsg ) |
| 433 void mxit_update_buddy_presence( struct MXitSession* session, const char* username, short presence, short mood, const char* customMood, const char* statusMsg, const char* avatarId ) |
|
| 434 { |
433 { |
| 435 PurpleBuddy* buddy = NULL; |
434 PurpleBuddy* buddy = NULL; |
| 436 struct contact* contact = NULL; |
435 struct contact* contact = NULL; |
| 437 |
436 |
| 438 purple_debug_info( MXIT_PLUGIN_ID, "mxit_update_buddy_presence: user='%s' presence=%i mood=%i customMood='%s' statusMsg='%s' avatar='%s'\n", |
437 purple_debug_info( MXIT_PLUGIN_ID, "mxit_update_buddy_presence: user='%s' presence=%i mood=%i customMood='%s' statusMsg='%s'\n", |
| 439 username, presence, mood, customMood, statusMsg, avatarId ); |
438 username, presence, mood, customMood, statusMsg ); |
| 440 |
439 |
| 441 if ( ( presence < MXIT_PRESENCE_OFFLINE ) || ( presence > MXIT_PRESENCE_DND ) ) { |
440 if ( ( presence < MXIT_PRESENCE_OFFLINE ) || ( presence > MXIT_PRESENCE_DND ) ) { |
| 442 purple_debug_info( MXIT_PLUGIN_ID, "mxit_update_buddy_presence: invalid presence state %i\n", presence ); |
441 purple_debug_info( MXIT_PLUGIN_ID, "mxit_update_buddy_presence: invalid presence state %i\n", presence ); |
| 443 return; /* ignore packet */ |
442 return; /* ignore packet */ |
| 444 } |
443 } |
| 470 contact->statusMsg = NULL; |
469 contact->statusMsg = NULL; |
| 471 } |
470 } |
| 472 if ( statusMsg[0] != '\0' ) |
471 if ( statusMsg[0] != '\0' ) |
| 473 contact->statusMsg = g_markup_escape_text( statusMsg, -1 ); |
472 contact->statusMsg = g_markup_escape_text( statusMsg, -1 ); |
| 474 |
473 |
| 475 /* update avatarId */ |
|
| 476 if ( ( contact->avatarId ) && ( g_ascii_strcasecmp( contact->avatarId, avatarId ) == 0 ) ) { |
|
| 477 /* avatar has not changed - do nothing */ |
|
| 478 } |
|
| 479 else if ( avatarId[0] != '\0' ) { /* avatar has changed */ |
|
| 480 if ( contact->avatarId ) |
|
| 481 g_free( contact->avatarId ); |
|
| 482 contact->avatarId = g_strdup( avatarId ); |
|
| 483 |
|
| 484 /* Send request to download new avatar image */ |
|
| 485 mxit_get_avatar( session, username, avatarId ); |
|
| 486 } |
|
| 487 else /* clear current avatar */ |
|
| 488 purple_buddy_icons_set_for_user( session->acc, username, NULL, 0, NULL ); |
|
| 489 |
|
| 490 /* update the buddy's status (reference: "libpurple/prpl.h") */ |
474 /* update the buddy's status (reference: "libpurple/prpl.h") */ |
| 491 if ( contact->statusMsg ) |
475 if ( contact->statusMsg ) |
| 492 purple_prpl_got_user_status( session->acc, username, mxit_statuses[contact->presence].id, "message", contact->statusMsg, NULL ); |
476 purple_prpl_got_user_status( session->acc, username, mxit_statuses[contact->presence].id, "message", contact->statusMsg, NULL ); |
| 493 else |
477 else |
| 494 purple_prpl_got_user_status( session->acc, username, mxit_statuses[contact->presence].id, NULL ); |
478 purple_prpl_got_user_status( session->acc, username, mxit_statuses[contact->presence].id, NULL ); |
| 496 /* update the buddy's mood */ |
480 /* update the buddy's mood */ |
| 497 if ( contact->mood == MXIT_MOOD_NONE ) |
481 if ( contact->mood == MXIT_MOOD_NONE ) |
| 498 purple_prpl_got_user_status_deactive( session->acc, username, "mood" ); |
482 purple_prpl_got_user_status_deactive( session->acc, username, "mood" ); |
| 499 else |
483 else |
| 500 purple_prpl_got_user_status( session->acc, username, "mood", PURPLE_MOOD_NAME, mxit_moods[contact->mood-1].mood, NULL ); |
484 purple_prpl_got_user_status( session->acc, username, "mood", PURPLE_MOOD_NAME, mxit_moods[contact->mood-1].mood, NULL ); |
| |
485 } |
| |
486 |
| |
487 |
| |
488 /*------------------------------------------------------------------------ |
| |
489 * Update the buddy's avatar. |
| |
490 * Either a presence update packet was received from the MXit server, or a profile response. |
| |
491 * |
| |
492 * @param session The MXit session object |
| |
493 * @param username The contact which presence to update |
| |
494 * @param avatarId This is the contact's avatar id |
| |
495 */ |
| |
496 void mxit_update_buddy_avatar( struct MXitSession* session, const char* username, const char* avatarId ) |
| |
497 { |
| |
498 PurpleBuddy* buddy = NULL; |
| |
499 struct contact* contact = NULL; |
| |
500 |
| |
501 purple_debug_info( MXIT_PLUGIN_ID, "mxit_update_buddy_avatar: user='%s' avatar='%s'\n", username, avatarId ); |
| |
502 |
| |
503 /* find the buddy information for this contact (reference: "libpurple/blist.h") */ |
| |
504 buddy = purple_find_buddy( session->acc, username ); |
| |
505 if ( !buddy ) { |
| |
506 purple_debug_warning( MXIT_PLUGIN_ID, "mxit_update_buddy_presence: unable to find the buddy '%s'\n", username ); |
| |
507 return; |
| |
508 } |
| |
509 |
| |
510 contact = purple_buddy_get_protocol_data( buddy ); |
| |
511 if ( !contact ) |
| |
512 return; |
| |
513 |
| |
514 if ( ( contact->avatarId ) && ( g_ascii_strcasecmp( contact->avatarId, avatarId ) == 0 ) ) { |
| |
515 /* avatar has not changed - do nothing */ |
| |
516 } |
| |
517 else if ( avatarId[0] != '\0' ) { /* avatar has changed */ |
| |
518 if ( contact->avatarId ) |
| |
519 g_free( contact->avatarId ); |
| |
520 contact->avatarId = g_strdup( avatarId ); |
| |
521 |
| |
522 /* Send request to download new avatar image */ |
| |
523 mxit_get_avatar( session, username, avatarId ); |
| |
524 } |
| |
525 else /* clear current avatar */ |
| |
526 purple_buddy_icons_set_for_user( session->acc, username, NULL, 0, NULL ); |
| 501 } |
527 } |
| 502 |
528 |
| 503 |
529 |
| 504 /*------------------------------------------------------------------------ |
530 /*------------------------------------------------------------------------ |
| 505 * update the blist cached by libPurple. We need to do this to keep |
531 * update the blist cached by libPurple. We need to do this to keep |