pidgin.mxit: 9fd6727a: Add support for the standard Mood API.
andrew.victor at mxit.com
andrew.victor at mxit.com
Tue May 11 06:07:03 EDT 2010
-----------------------------------------------------------------
Revision: 9fd6727a9e8f5388546f6fe29fba676b6c796848
Ancestor: d32f936341dd2b4d7114e85b17088a2b3faf380b
Author: andrew.victor at mxit.com
Date: 2010-05-11T10:00:30
Branch: im.pidgin.pidgin.mxit
URL: http://d.pidgin.im/viewmtn/revision/info/9fd6727a9e8f5388546f6fe29fba676b6c796848
Modified files:
libpurple/protocols/mxit/login.c
libpurple/protocols/mxit/mxit.c
libpurple/protocols/mxit/roster.c
libpurple/protocols/mxit/roster.h
ChangeLog:
Add support for the standard Mood API.
-------------- next part --------------
============================================================
--- libpurple/protocols/mxit/login.c 86e2b5cc24641af1b7c1b23966cacf7ecd7fb244
+++ libpurple/protocols/mxit/login.c 40f7e9c92d73fa0432bdc326feaac4ae6519841e
@@ -67,7 +67,7 @@ static struct MXitSession* mxit_create_o
/* configure the connection (reference: "libpurple/connection.h") */
con = purple_account_get_connection( account );
con->proto_data = session;
- con->flags |= PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC | PURPLE_CONNECTION_HTML;
+ con->flags |= PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC | PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_SUPPORT_MOODS;
session->con = con;
/* add account */
============================================================
--- libpurple/protocols/mxit/mxit.c 3a11fef72cf21c0aea6318fdab19556adac30eaf
+++ libpurple/protocols/mxit/mxit.c 142ec3f63138fd3f6d88077230b4ec1d38594d16
@@ -92,6 +92,9 @@ static void* mxit_link_click( const char
goto skip;
con = purple_account_get_connection( account );
+// /* determine if it's a command-response to send */
+// is_command = g_str_has_prefix( parts[4], "::type=reply|" );
+
/* send click message back to MXit */
mxit_send_message( con->proto_data, parts[3], parts[4], FALSE, is_command );
@@ -418,6 +421,26 @@ static void mxit_set_status( PurpleAccou
char* statusmsg1;
char* statusmsg2;
+ /* Handle mood changes */
+ if (purple_status_type_get_primitive(purple_status_get_type(status)) == PURPLE_STATUS_MOOD) {
+ const char* moodid = purple_status_get_attr_string( status, PURPLE_MOOD_NAME );
+ int mood;
+
+ /* convert the purple mood to a mxit mood */
+ mood = mxit_convert_mood( moodid );
+ if ( mood < 0 ) {
+ /* error, mood not found */
+ purple_debug_info( MXIT_PLUGIN_ID, "Mood status NOT found! (id = %s)\n", moodid );
+ return;
+ }
+
+ /* Save the new mood in session */
+ session->mood = mood;
+
+ mxit_send_mood( session, mood );
+ return;
+ }
+
/* get the status id (reference: "libpurple/status.h") */
statusid = purple_status_get_id( status );
@@ -635,7 +658,7 @@ static PurplePluginProtocolInfo proto_in
mxit_get_text_table, /* get_account_text_table */
NULL, /* initiate_media */
NULL, /* get_media_caps */
- NULL, /* get_moods */
+ mxit_get_moods, /* get_moods */
NULL, /* set_public_alias */
NULL /* get_public_alias */
};
============================================================
--- libpurple/protocols/mxit/roster.c 8c795ffe438cf7c334304f92aa58ce668a0fe379
+++ libpurple/protocols/mxit/roster.c b15ba396586bf5ef56ff31581bc6b9bb0d2f097e
@@ -81,6 +81,12 @@ GList* mxit_status_types( PurpleAccount*
statuslist = g_list_append( statuslist, type );
}
+ /* add Mood option */
+ type = purple_status_type_new_with_attrs(PURPLE_STATUS_MOOD, "mood", NULL, FALSE, TRUE, TRUE,
+ PURPLE_MOOD_NAME, _("Mood Name"), purple_value_new( PURPLE_TYPE_STRING ),
+ NULL);
+ statuslist = g_list_append( statuslist, type );
+
return statuslist;
}
@@ -127,7 +133,58 @@ const char* mxit_convert_presence_to_nam
* Moods
*/
+/* moods (reference: libpurple/status.h) */
+static PurpleMood mxit_moods[] = {
+ {"angry", N_("Angry"), NULL},
+ {"excited", N_("Excited"), NULL},
+ {"grumpy", N_("Grumpy"), NULL},
+ {"happy", N_("Happy"), NULL},
+ {"in_love", N_("In love"), NULL},
+ {"invincible", N_("Invincible"), NULL},
+ {"sad", N_("Sad"), NULL},
+ {"hot", N_("Hot"), NULL},
+ {"sick", N_("Sick"), NULL},
+ {"sleepy", N_("Sleepy"), NULL},
+ /* Mark the last record. */
+ { NULL, NULL, NULL }
+};
+
+
/*------------------------------------------------------------------------
+ * Returns the MXit mood code, given the unique mood ID.
+ *
+ * @param id The mood ID
+ * @return The MXit mood code
+ */
+int mxit_convert_mood( const char* id )
+{
+ unsigned int i;
+
+ /* Mood is being unset */
+ if ( id == NULL )
+ return MXIT_MOOD_NONE;
+
+ for ( i = 0; i < ARRAY_SIZE( mxit_moods ) - 1; i++ ) {
+ if ( strcmp( mxit_moods[i].mood, id ) == 0 ) /* mood found! */
+ return i + 1; /* because MXIT_MOOD_NONE is 0 */
+ }
+
+ return -1;
+}
+
+
+/*------------------------------------------------------------------------
+ * Return the list of MXit-supported moods.
+ *
+ * @param account The MXit account object
+ */
+PurpleMood* mxit_get_moods(PurpleAccount *account)
+{
+ return mxit_moods;
+}
+
+
+/*------------------------------------------------------------------------
* Returns the MXit mood as a string, given the MXit mood's ID.
*
* @param id The MXit mood ID (see roster.h)
@@ -259,6 +316,12 @@ static PurpleBuddy* mxit_update_buddy_gr
else
purple_prpl_got_user_status( session->acc, newbuddy->name, mxit_statuses[contact->presence].id, NULL );
+ /* update the buddy's mood */
+ if ( contact->mood == MXIT_MOOD_NONE )
+ purple_prpl_got_user_status_deactive( session->acc, newbuddy->name, "mood" );
+ else
+ purple_prpl_got_user_status( session->acc, newbuddy->name, "mood", PURPLE_MOOD_NAME, mxit_moods[contact->mood-1].mood, NULL );
+
/* update avatar */
if ( contact->avatarId ) {
mxit_get_avatar( session, newbuddy->name, contact->avatarId );
@@ -346,6 +409,12 @@ void mxit_update_contact( struct MXitSes
/* update the buddy's status (reference: "libpurple/prpl.h") */
purple_prpl_got_user_status( session->acc, contact->username, mxit_statuses[contact->presence].id, NULL );
+
+ /* update the buddy's mood */
+ if ( contact->mood == MXIT_MOOD_NONE )
+ purple_prpl_got_user_status_deactive( session->acc, contact->username, "mood" );
+ else
+ purple_prpl_got_user_status( session->acc, contact->username, "mood", PURPLE_MOOD_NAME, mxit_moods[contact->mood-1].mood, NULL );
}
@@ -388,6 +457,10 @@ void mxit_update_buddy_presence( struct
contact->presence = presence;
contact->mood = mood;
+ /* validate mood */
+ if (( contact->mood < MXIT_MOOD_NONE ) || ( contact->mood > MXIT_MOOD_SLEEPY ))
+ contact->mood = MXIT_MOOD_NONE;
+
g_strlcpy( contact->customMood, customMood, sizeof( contact->customMood ) );
// TODO: Download custom mood frame.
@@ -419,6 +492,12 @@ void mxit_update_buddy_presence( struct
purple_prpl_got_user_status( session->acc, username, mxit_statuses[contact->presence].id, "message", contact->statusMsg, NULL );
else
purple_prpl_got_user_status( session->acc, username, mxit_statuses[contact->presence].id, NULL );
+
+ /* update the buddy's mood */
+ if ( contact->mood == MXIT_MOOD_NONE )
+ purple_prpl_got_user_status_deactive( session->acc, username, "mood" );
+ else
+ purple_prpl_got_user_status( session->acc, username, "mood", PURPLE_MOOD_NAME, mxit_moods[contact->mood-1].mood, NULL );
}
============================================================
--- libpurple/protocols/mxit/roster.h 60a27bb0a05f32d392408067eebc8abd83a0db31
+++ libpurple/protocols/mxit/roster.h f8e6b14dc9da0b2d64e2313ac95865b63c4e6648
@@ -119,6 +119,7 @@ const char* mxit_convert_subtype_to_name
const char* mxit_convert_subtype_to_name( short subtype );
/* Moods */
+int mxit_convert_mood( const char* id );
const char* mxit_convert_mood_to_name( short id );
/* MXit Protocol callbacks */
@@ -134,6 +135,7 @@ void mxit_rename_group( PurpleConnection
void mxit_buddy_alias( PurpleConnection* gc, const char* who, const char* alias );
void mxit_buddy_group( PurpleConnection* gc, const char* who, const char* old_group, const char* new_group );
void mxit_rename_group( PurpleConnection* gc, const char* old_name, PurpleGroup* group, GList* moved_buddies );
+PurpleMood* mxit_get_moods(PurpleAccount *account);
#endif /* _MXIT_ROSTER_H_ */
More information about the Commits
mailing list