void addContactUpdate( bbmsp_contact_t* contact, bbmsp_presence_update_types_t updateType ) { bbmsp_result_t result = BBMSP_FAILURE; ContactUpdate update; update.value = NULL; update.property = updateType; result = contact_get_property( contact, &update.ppid, bbmsp_contact_get_ppid, BBMSP_CONTACT_PPID_MAX ); result = bbmsp_contact_get_status( contact, &update.status ); switch (updateType) { case BBMSP_DISPLAY_NAME: result = contact_get_property( contact, &update.value, bbmsp_contact_get_display_name, BBMSP_CONTACT_DISPLAY_NAME_MAX ); break; case BBMSP_DISPLAY_PICTURE: trace( "update display picture" ); char path[PATH_MAX]; saveContactAvatar( contact, path ); trace( "saving file to %s", path ); update.value = strdup( path ); break; case BBMSP_PERSONAL_MESSAGE: result = contact_get_property( contact, &update.value, bbmsp_contact_get_personal_message, BBMSP_CONTACT_PERSONAL_MSG_MAX ); break; case BBMSP_STATUS: result = contact_get_property( contact, &update.value, bbmsp_contact_get_status_message, BBMSP_CONTACT_STATUS_MSG_MAX ); break; } pthread_mutex_lock(&amutex); contact_updates[ update_size ] = update; update_size++; //TODO need to do realloc pthread_mutex_unlock(&amutex); }
std::string BBMBPS::GetContact(bbmsp_contact_t *contact, BBMField field) { MUTEX_LOCK(); std::string value; char buffer[4096]; switch (field) { case BBM_DISPLAY_NAME: { if (bbmsp_contact_get_display_name(contact, buffer, sizeof(buffer)) == BBMSP_SUCCESS) { value = buffer; } break; } case BBM_STATUS: { bbmsp_presence_status_t status; if (bbmsp_contact_get_status(contact, &status) == BBMSP_SUCCESS) { if (status == BBMSP_PRESENCE_STATUS_AVAILABLE) { value = "available"; } else if (status == BBMSP_PRESENCE_STATUS_BUSY) { value = "busy"; } break; } } case BBM_STATUS_MESSAGE: { if (bbmsp_contact_get_status_message(contact, buffer, sizeof(buffer)) == BBMSP_SUCCESS) { value = buffer; } break; } case BBM_PERSONAL_MESSAGE: { if (bbmsp_contact_get_personal_message(contact, buffer, sizeof(buffer)) == BBMSP_SUCCESS) { value = buffer; } break; } case BBM_PPID: { if (bbmsp_contact_get_ppid(contact, buffer, sizeof(buffer)) == BBMSP_SUCCESS) { value = buffer; } break; } case BBM_HANDLE: { if (bbmsp_contact_get_handle(contact, buffer, sizeof(buffer)) == BBMSP_SUCCESS) { value = buffer; } break; } case BBM_APP_VERSION: { if (bbmsp_contact_get_app_version(contact, buffer, sizeof(buffer)) == BBMSP_SUCCESS) { value = buffer; } break; } case BBM_SDK_VERSION: { int val; if (bbmsp_contact_get_platform_version(contact, &val) == BBMSP_SUCCESS) { std::stringstream ss; ss << val; value = ss.str(); } break; } } MUTEX_UNLOCK(); return value; }
/** * Creates a ActionScript net.rim.bbm.BBMContact instance from the supplied native contact. */ FREObject createActionScriptContact( const bbmsp_contact_t* contact ) { FREObject contact_AS = NULL; const int cNumAttributes = 7; FREObject resultAttributes[cNumAttributes]; bbmsp_result_t result; char ppid[BBMSP_CONTACT_PPID_MAX]; result = bbmsp_contact_get_ppid( contact, ppid, BBMSP_CONTACT_PPID_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(ppid) + 1), (uint8_t*)ppid, &resultAttributes[0]); } else { trace( "createActionScriptContact ppid %i", result ); } char displayName[BBMSP_CONTACT_DISPLAY_NAME_MAX]; result = bbmsp_contact_get_display_name( contact, displayName, BBMSP_CONTACT_DISPLAY_NAME_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(displayName) + 1), (uint8_t*)displayName, &resultAttributes[1]); } else { trace( "createActionScriptContact displayName %i", result ); } char personalMessage[BBMSP_CONTACT_PERSONAL_MSG_MAX]; result = bbmsp_contact_get_personal_message( contact, personalMessage, BBMSP_CONTACT_PERSONAL_MSG_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(personalMessage) + 1), (uint8_t*)personalMessage, &resultAttributes[2]); } else { trace( "createActionScriptContact personalMessage %i", result ); } char statusMessage[BBMSP_CONTACT_STATUS_MSG_MAX]; result = bbmsp_contact_get_status_message( contact, statusMessage, BBMSP_CONTACT_STATUS_MSG_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(statusMessage) + 1), (uint8_t*)statusMessage, &resultAttributes[3]); } else { trace( "createActionScriptContact statusMessage %i", result ); } char appVersion[BBMSP_CONTACT_APP_VERSION_MAX]; result = bbmsp_contact_get_app_version( contact, appVersion, BBMSP_CONTACT_APP_VERSION_MAX ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromUTF8((uint32_t)(strlen(appVersion) + 1), (uint8_t*)appVersion, &resultAttributes[4]); } else { trace( "createActionScriptContact appVersion %i", result ); } bbmsp_presence_status_t status; result = bbmsp_contact_get_status( contact, &status ); if( result == BBMSP_SUCCESS ) { FRENewObjectFromInt32( (int32_t)status, &resultAttributes[5]); } else { trace( "createActionScriptContact status %i", result ); } bbmsp_image_t* m_contact_avatar; bbmsp_image_create_empty(&m_contact_avatar); result = bbmsp_contact_get_display_picture( contact, m_contact_avatar ); trace( "%i picture", result ); if( result == BBMSP_SUCCESS ) { char path[PATH_MAX]; getAvatarPath( m_contact_avatar, ppid, path ); FRENewObjectFromUTF8((uint32_t)(strlen(path) + 1), (uint8_t*)path, &resultAttributes[6]); } else { resultAttributes[5] = NULL; } bbmsp_image_destroy( &m_contact_avatar ); FRENewObject((const uint8_t*) "Array", cNumAttributes, resultAttributes, &contact_AS, NULL); return( contact_AS ); }