Tue, 21 Feb 2012 21:18:50 +0000
Add support for the Relationship Status profile attribute.
--- a/libpurple/protocols/mxit/actions.c Sat Feb 18 23:28:43 2012 +0000 +++ b/libpurple/protocols/mxit/actions.c Tue Feb 21 21:18:50 2012 +0000 @@ -48,6 +48,7 @@ const char* name = NULL; const char* bday = NULL; const char* err = NULL; + GList* entry = NULL; purple_debug_info( MXIT_PLUGIN_ID, "mxit_profile_cb\n" ); @@ -173,6 +174,14 @@ g_string_append( attributes, attrib ); acount++; + /* relationship status */ + field = purple_request_fields_get_field( fields, "relationship" ); + entry = g_list_first( purple_request_field_list_get_selected( field ) ); + profile->relationship = atoi( purple_request_field_list_get_data( field, entry->data ) ); + g_snprintf( attrib, sizeof( attrib ), "\01%s\01%i\01%i", CP_PROFILE_RELATIONSHIP, CP_PROFILE_TYPE_SHORT, profile->relationship ); + g_string_append( attributes, attrib ); + acount++; + /* update flags */ field = purple_request_fields_get_field( fields, "searchable" ); if ( purple_request_field_bool_get_value( field ) ) /* is searchable -> clear not-searchable flag */ @@ -260,6 +269,22 @@ field = purple_request_field_string_new( "whereami", _( "Where I Live" ), profile->whereami, FALSE); purple_request_field_group_add_field( public_group, field ); + /* relationship status */ + field = purple_request_field_list_new( "relationship", _( "Relationship Status" ) ); + purple_request_field_list_set_multi_select( field, FALSE ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_UNKNOWN ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_UNKNOWN ) ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_DONTSAY ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_DONTSAY ) ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_SINGLE ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_SINGLE ) ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_INVOLVED ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_INVOLVED ) ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_ENGAGED ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_ENGAGED ) ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_MARRIED ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_MARRIED ) ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_COMPLICATED ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_COMPLICATED ) ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_WIDOWED ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_WIDOWED ) ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_SEPARATED ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_SEPARATED ) ); + purple_request_field_list_add_icon( field, mxit_relationship_to_name( MXIT_RELATIONSHIP_DIVORCED ), NULL, g_strdup_printf( "%i", MXIT_RELATIONSHIP_DIVORCED ) ); + purple_request_field_list_add_selected( field, mxit_relationship_to_name( profile->relationship ) ); + purple_request_field_group_add_field( public_group, field ); + purple_request_fields_add_group( fields, public_group ); }
--- a/libpurple/protocols/mxit/mxit.c Sat Feb 18 23:28:43 2012 +0000 +++ b/libpurple/protocols/mxit/mxit.c Tue Feb 21 21:18:50 2012 +0000 @@ -565,7 +565,7 @@ struct MXitSession* session = (struct MXitSession*) gc->proto_data; const char* profilelist[] = { CP_PROFILE_BIRTHDATE, CP_PROFILE_GENDER, CP_PROFILE_FULLNAME, CP_PROFILE_FIRSTNAME, CP_PROFILE_LASTNAME, CP_PROFILE_REGCOUNTRY, CP_PROFILE_LASTSEEN, - CP_PROFILE_STATUS, CP_PROFILE_AVATAR, CP_PROFILE_WHEREAMI, CP_PROFILE_ABOUTME }; + CP_PROFILE_STATUS, CP_PROFILE_AVATAR, CP_PROFILE_WHEREAMI, CP_PROFILE_ABOUTME, CP_PROFILE_RELATIONSHIP }; purple_debug_info( MXIT_PLUGIN_ID, "mxit_get_info: '%s'\n", who );
--- a/libpurple/protocols/mxit/profile.c Sat Feb 18 23:28:43 2012 +0000 +++ b/libpurple/protocols/mxit/profile.c Tue Feb 21 21:18:50 2012 +0000 @@ -35,6 +35,40 @@ /*------------------------------------------------------------------------ + * Return the MXit Relationship status as a string. + * + * @param id The Relationship status value (see profile.h) + * @return The relationship status as a text string. + */ +const char* mxit_relationship_to_name( short id ) +{ + switch ( id ) { + case MXIT_RELATIONSHIP_UNKNOWN : + return _( "Unknown" ); + case MXIT_RELATIONSHIP_DONTSAY : + return _( "Don't want to say" ); + case MXIT_RELATIONSHIP_SINGLE : + return _( "Single" ); + case MXIT_RELATIONSHIP_INVOLVED : + return _( "In a relationship" ); + case MXIT_RELATIONSHIP_ENGAGED : + return _( "Engaged" ); + case MXIT_RELATIONSHIP_MARRIED : + return _( "Married" ); + case MXIT_RELATIONSHIP_COMPLICATED : + return _( "It's complicated" ); + case MXIT_RELATIONSHIP_WIDOWED : + return _( "Widowed" ); + case MXIT_RELATIONSHIP_SEPARATED : + return _( "Separated" ); + case MXIT_RELATIONSHIP_DIVORCED : + return _( "Divorced" ); + default : + return ""; + } +} + +/*------------------------------------------------------------------------ * Returns true if it is a valid date. * * @param bday Date-of-Birth string (YYYY-MM-DD) @@ -193,6 +227,8 @@ if ( strlen( profile->whereami ) > 0 ) purple_notify_user_info_add_pair( info, _( "Where I Live" ), profile->whereami ); + purple_notify_user_info_add_pair_plaintext( info, _( "Relationship Status" ), mxit_relationship_to_name( profile->relationship ) ); + purple_notify_user_info_add_section_break( info ); if ( contact ) {
--- a/libpurple/protocols/mxit/profile.h Sat Feb 18 23:28:43 2012 +0000 +++ b/libpurple/protocols/mxit/profile.h Tue Feb 21 21:18:50 2012 +0000 @@ -29,6 +29,18 @@ #include <glib.h> +/* MXit relationship status types */ +#define MXIT_RELATIONSHIP_UNKNOWN 0 +#define MXIT_RELATIONSHIP_DONTSAY 1 +#define MXIT_RELATIONSHIP_SINGLE 2 +#define MXIT_RELATIONSHIP_INVOLVED 3 +#define MXIT_RELATIONSHIP_ENGAGED 4 +#define MXIT_RELATIONSHIP_MARRIED 5 +#define MXIT_RELATIONSHIP_COMPLICATED 6 +#define MXIT_RELATIONSHIP_WIDOWED 7 +#define MXIT_RELATIONSHIP_SEPARATED 8 +#define MXIT_RELATIONSHIP_DIVORCED 9 + struct MXitProfile { /* required */ char loginname[64]; /* name user uses to log into MXit with (aka 'mxitid') */ @@ -47,6 +59,7 @@ char regcountry[3]; /* user's registered country code */ char whereami[51]; /* where am I / where I live */ char aboutme[513]; /* about me */ + int relationship; /* relationship status */ int flags; /* user's profile flags */ gint64 lastonline; /* user's last-online timestamp */ @@ -56,6 +69,7 @@ struct MXitSession; void mxit_show_profile( struct MXitSession* session, const char* username, struct MXitProfile* profile ); void mxit_show_search_results( struct MXitSession* session, int searchType, int maxResults, GList* entries ); +const char* mxit_relationship_to_name( short id ); gboolean validateDate( const char* bday );
--- a/libpurple/protocols/mxit/protocol.c Sat Feb 18 23:28:43 2012 +0000 +++ b/libpurple/protocols/mxit/protocol.c Tue Feb 21 21:18:50 2012 +0000 @@ -1450,7 +1450,7 @@ const char* statusmsg; const char* profilelist[] = { CP_PROFILE_BIRTHDATE, CP_PROFILE_GENDER, CP_PROFILE_HIDENUMBER, CP_PROFILE_FULLNAME, CP_PROFILE_TITLE, CP_PROFILE_FIRSTNAME, CP_PROFILE_LASTNAME, CP_PROFILE_EMAIL, - CP_PROFILE_MOBILENR, CP_PROFILE_WHEREAMI, CP_PROFILE_ABOUTME, CP_PROFILE_FLAGS }; + CP_PROFILE_MOBILENR, CP_PROFILE_WHEREAMI, CP_PROFILE_ABOUTME, CP_PROFILE_RELATIONSHIP, CP_PROFILE_FLAGS }; purple_account_set_int( session->acc, MXIT_CONFIG_STATE, MXIT_STATE_LOGIN ); @@ -1866,6 +1866,10 @@ /* about me */ g_strlcpy( profile->aboutme, fvalue, sizeof( profile->aboutme ) ); } + else if ( strcmp( CP_PROFILE_RELATIONSHIP, fname ) == 0) { + /* relatinship status */ + profile->relationship = strtol( fvalue, NULL, 10 ); + } else { /* invalid profile attribute */ purple_debug_error( MXIT_PLUGIN_ID, "Invalid profile attribute received '%s' \n", fname );
--- a/libpurple/protocols/mxit/protocol.h Sat Feb 18 23:28:43 2012 +0000 +++ b/libpurple/protocols/mxit/protocol.h Tue Feb 21 21:18:50 2012 +0000 @@ -195,9 +195,11 @@ #define CP_PROFILE_LASTSEEN "lastseen" /* Last-Online timestamp */ #define CP_PROFILE_WHEREAMI "whereami" /* Where am I / Where I live */ #define CP_PROFILE_ABOUTME "aboutme" /* About me */ +#define CP_PROFILE_RELATIONSHIP "relationship" /* Relationship Status */ /* extended profile field types */ #define CP_PROFILE_TYPE_BOOL 0x02 /* boolean (0 or 1) */ +#define CP_PROFILE_TYPE_SHORT 0x04 /* short (16-bit) */ #define CP_PROFILE_TYPE_INT 0x05 /* integer (32-bit) */ #define CP_PROFILE_TYPE_LONG 0x06 /* long (64-bit) */ #define CP_PROFILE_TYPE_UTF8 0x0A /* UTF8 string */