# HG changeset patch # User Elliott Sales de Andrade # Date 1274479038 0 # Node ID 92767d9eac2e21acc03536d29d0094e593dacffb # Parent ee423c6c71b6ac7f888ad32602e937646da5db2c# Parent c940e427e48690396f3cd977905f4fd41e6be6d7 merge of '4f95778269e5a6f5dc65dc999e28f67e5604b35a' and 'fb76a1cdbe11d4297b67af0a12356362323f60c5' diff -r ee423c6c71b6 -r 92767d9eac2e ChangeLog --- a/ChangeLog Fri May 21 07:45:11 2010 +0000 +++ b/ChangeLog Fri May 21 21:57:18 2010 +0000 @@ -20,6 +20,10 @@ * Support for direct connections, enabling faster file transfers, smiley and buddy icon loading. (Gábor Szuromi) + XMPP: + * Allow connecting to servers that advertise EXTERNAL (broken in + 2.7.0) + version 2.7.0 (05/12/2010): General: * Changed GTK+ minimum version requirement to 2.10.0. diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/jabber/auth_cyrus.c --- a/libpurple/protocols/jabber/auth_cyrus.c Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/jabber/auth_cyrus.c Fri May 21 21:57:18 2010 +0000 @@ -270,7 +270,7 @@ */ js->auth_mech = NULL; jabber_auth_start_old(js); - return JABBER_SASL_STATE_CONTINUE; + return JABBER_SASL_STATE_CONTINUE; } break; @@ -408,7 +408,8 @@ { char *mech_name = xmlnode_get_data(mechnode); - if (!mech_name || !*mech_name) { + if (!mech_name || !*mech_name || + g_str_equal(mech_name, "EXTERNAL")) { g_free(mech_name); continue; } @@ -550,7 +551,7 @@ return jabber_auth_start_cyrus(js, reply, error); - } else if ((js->auth_fail_count == 1) && + } else if ((js->auth_fail_count == 1) && (js->current_mech && g_str_equal(js->current_mech, "GSSAPI"))) { /* If we tried GSSAPI first, it failed, and it was the only method we had to try, try jabber:iq:auth * for compatibility with iChat 10.5 Server and other jabberd based servers. diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/jabber/auth_scram.c --- a/libpurple/protocols/jabber/auth_scram.c Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/jabber/auth_scram.c Fri May 21 21:57:18 2010 +0000 @@ -517,13 +517,24 @@ gsize len; enc_in = xmlnode_get_data(packet); - g_return_val_if_fail(enc_in != NULL && *enc_in != '\0', FALSE); + if (data->step != 3 && (!enc_in || *enc_in == '\0')) { + *error = g_strdup(_("Invalid challenge from server")); + g_free(enc_in); + return JABBER_SASL_STATE_FAIL; + } - if (data->step == 3) + if (data->step == 3) { + /* + * If the server took the slow approach (sending the verifier + * as a challenge/response pair), we get here. + */ + g_free(enc_in); return JABBER_SASL_STATE_OK; + } if (data->step != 2) { *error = g_strdup(_("Unexpected response from server")); + g_free(enc_in); return JABBER_SASL_STATE_FAIL; } @@ -532,7 +543,7 @@ if (!dec_in || len != strlen(dec_in)) { /* Danger afoot; SCRAM shouldn't contain NUL bytes */ g_free(dec_in); - *error = g_strdup(_("Invalid challenge from server")); + *error = g_strdup(_("Malicious challenge from server")); return JABBER_SASL_STATE_FAIL; } diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/mxit/actions.c --- a/libpurple/protocols/mxit/actions.c Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/mxit/actions.c Fri May 21 21:57:18 2010 +0000 @@ -225,6 +225,13 @@ group = purple_request_field_group_new( NULL ); purple_request_fields_add_group( fields, group ); + /* mxitId (read-only) */ + if ( session->mxitId ) { + field = purple_request_field_string_new( "mxitid", _( "Your MXitId" ), session->mxitId, FALSE ); + purple_request_field_string_set_editable( field, FALSE ); + purple_request_field_group_add_field( group, field ); + } + /* pin */ field = purple_request_field_string_new( "pin", _( "PIN" ), session->acc->password, FALSE ); purple_request_field_string_set_masked( field, TRUE ); @@ -252,7 +259,7 @@ purple_request_field_group_add_field( group, field ); /* title */ - field = purple_request_field_string_new( "title", _( "Job Title" ), profile->title, FALSE ); + field = purple_request_field_string_new( "title", _( "Title" ), profile->title, FALSE ); purple_request_field_group_add_field( group, field ); /* first name */ @@ -304,11 +311,12 @@ char version[256]; g_snprintf( version, sizeof( version ), "MXit libPurple Plugin v%s\n" - "MXit Client Protocol v%s\n\n" + "MXit Client Protocol v%i.%i\n\n" "Author:\nPieter Loubser\n\n" "Contributors:\nAndrew Victor\n\n" "Testers:\nBraeme Le Roux\n\n", - MXIT_PLUGIN_VERSION, MXIT_CP_RELEASE ); + MXIT_PLUGIN_VERSION, + ( MXIT_CP_PROTO_VESION / 10 ), ( MXIT_CP_PROTO_VESION % 10 ) ); mxit_popup( PURPLE_NOTIFY_MSG_INFO, _( "About" ), version ); } diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/mxit/formcmds.c --- a/libpurple/protocols/mxit/formcmds.c Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/mxit/formcmds.c Fri May 21 21:57:18 2010 +0000 @@ -42,7 +42,7 @@ typedef enum { MXIT_CMD_UNKNOWN = 0, /* Unknown command */ - MXIT_CMD_CLRSCR, /* Clear screen (clrmsgscreen) */ + MXIT_CMD_CLEAR, /* Clear (clear) */ MXIT_CMD_SENDSMS, /* Send SMS (sendsms) */ MXIT_CMD_REPLY, /* Reply (reply) */ MXIT_CMD_PLATREQ, /* Platform Request (platreq) */ @@ -138,8 +138,8 @@ type = g_hash_table_lookup(hash, "type"); if (type == NULL) /* no command provided */ return MXIT_CMD_UNKNOWN; - else if (strcmp(type, "clrmsgscreen") == 0) /* clear the screen */ - return MXIT_CMD_CLRSCR; + else if (strcmp(type, "clear") == 0) /* clear */ + return MXIT_CMD_CLEAR; else if (strcmp(type, "sendsms") == 0) /* send an SMS */ return MXIT_CMD_SENDSMS; else if (strcmp(type, "reply") == 0) /* list of options */ @@ -205,27 +205,38 @@ /*------------------------------------------------------------------------ - * Process a ClearScreen MXit command. + * Process a Clear MXit command. + * [::op=cmd|type=clear|clearmsgscreen=true|auto=true|id=12345:] * - * @param session The MXit session object - * @param from The sender of the message. + * @param session The MXit session object + * @param from The sender of the message. + * @param hash The MXit command map */ -static void command_clearscreen(struct MXitSession* session, const char* from) +static void command_clear(struct MXitSession* session, const char* from, GHashTable* hash) { PurpleConversation *conv; + char* clearmsgscreen; - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, from, session->acc); - if (conv == NULL) { - purple_debug_error(MXIT_PLUGIN_ID, _( "Conversation with '%s' not found\n" ), from); - return; - } + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, from, session->acc); + if (conv == NULL) { + purple_debug_error(MXIT_PLUGIN_ID, _( "Conversation with '%s' not found\n" ), from); + return; + } - purple_conversation_clear_message_history(conv); // TODO: This doesn't actually clear the screen. + clearmsgscreen = g_hash_table_lookup(hash, "clearmsgscreen"); + if ( (clearmsgscreen) && (strcmp(clearmsgscreen, "true") == 0) ) { + /* this is a command to clear the chat screen */ + purple_debug_info(MXIT_PLUGIN_ID, "Clear the screen\n"); + + purple_conversation_clear_message_history(conv); // TODO: This doesn't actually clear the screen. + } } /*------------------------------------------------------------------------ * Process a Reply MXit command. + * [::op=cmd|type=reply|replymsg=back|selmsg=b) Back|id=12345:] + * [::op=cmd|nm=rep|type=reply|replymsg=back|selmsg=b) Back|id=12345:] * * @param mx The received message data object * @param hash The MXit command map @@ -234,10 +245,21 @@ { char* replymsg; char* selmsg; + char* nm; selmsg = g_hash_table_lookup(hash, "selmsg"); /* find the selection message */ replymsg = g_hash_table_lookup(hash, "replymsg"); /* find the reply message */ - if ((selmsg) && (replymsg)) { + nm = g_hash_table_lookup(hash, "nm"); /* name parameter */ + if ((selmsg) && (replymsg) && (nm)) { + gchar* seltext = g_markup_escape_text(purple_url_decode(selmsg), -1); + gchar* replycmd = g_strdup_printf("::type=reply|nm=%s|res=%s|err=0:", nm, replymsg); + + mxit_add_html_link( mx, replycmd, seltext ); + + g_free(seltext); + g_free(replycmd); + } + else if ((selmsg) && (replymsg)) { gchar* seltext = g_markup_escape_text(purple_url_decode(selmsg), -1); mxit_add_html_link( mx, purple_url_decode(replymsg), seltext ); @@ -366,8 +388,8 @@ MXitCommandType type = command_type(hash); switch (type) { - case MXIT_CMD_CLRSCR : - command_clearscreen(mx->session, mx->from); + case MXIT_CMD_CLEAR : + command_clear(mx->session, mx->from, hash); break; case MXIT_CMD_REPLY : command_reply(mx, hash); diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/mxit/mxit.c --- a/libpurple/protocols/mxit/mxit.c Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/mxit/mxit.c Fri May 21 21:57:18 2010 +0000 @@ -92,8 +92,8 @@ 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|" ); + /* 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 ); @@ -352,6 +352,10 @@ if ( contact->subtype != 0 ) purple_notify_user_info_add_pair( info, _( "Subscription" ), mxit_convert_subtype_to_name( contact->subtype ) ); + /* rejection message */ + if ( ( contact->subtype == MXIT_SUBTYPE_REJECTED ) && ( contact->msg != NULL ) ) + purple_notify_user_info_add_pair( info, _( "Rejection Message" ), contact->msg ); + /* hidden number */ if ( contact->flags & MXIT_CFLAG_HIDDEN ) purple_notify_user_info_add_pair( info, _( "Hidden Number" ), _( "Yes" ) ); @@ -491,6 +495,8 @@ g_free( contact->statusMsg ); if ( contact->avatarId ) g_free( contact->avatarId ); + if ( contact->msg ) + g_free( contact->msg ); g_free( contact ); } @@ -552,8 +558,8 @@ static void mxit_get_info( PurpleConnection *gc, const char *who ) { struct MXitSession* session = (struct MXitSession*) gc->proto_data; - 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 }; + const char* profilelist[] = { CP_PROFILE_BIRTHDATE, CP_PROFILE_GENDER, CP_PROFILE_FULLNAME, + CP_PROFILE_FIRSTNAME, CP_PROFILE_LASTNAME, CP_PROFILE_REGCOUNTRY }; purple_debug_info( MXIT_PLUGIN_ID, "mxit_get_info: '%s'\n", who ); diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/mxit/mxit.h --- a/libpurple/protocols/mxit/mxit.h Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/mxit/mxit.h Fri May 21 21:57:18 2010 +0000 @@ -63,7 +63,7 @@ /* Plugin details */ #define MXIT_PLUGIN_ID "prpl-loubserp-mxit" #define MXIT_PLUGIN_NAME "MXit" -#define MXIT_PLUGIN_VERSION "2.3.0" +#define MXIT_PLUGIN_VERSION "2.4.0" #define MXIT_PLUGIN_EMAIL "Pieter Loubser " #define MXIT_PLUGIN_WWW "http://www.mxit.com" #define MXIT_PLUGIN_SUMMARY "MXit Protocol Plugin" @@ -151,6 +151,7 @@ /* personal (profile) */ struct MXitProfile* profile; /* user's profile information */ + char* mxitId; /* the user's MXitId */ /* libpurple */ PurpleAccount* acc; /* pointer to the libpurple internal account struct */ diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/mxit/profile.c --- a/libpurple/protocols/mxit/profile.c Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/mxit/profile.c Fri May 21 21:57:18 2010 +0000 @@ -123,15 +123,14 @@ purple_notify_user_info_add_pair( info, _( "Nick Name" ), profile->nickname ); purple_notify_user_info_add_pair( info, _( "Birthday" ), profile->birthday ); purple_notify_user_info_add_pair( info, _( "Gender" ), profile->male ? _( "Male" ) : _( "Female" ) ); - purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) ); - - purple_notify_user_info_add_section_break( info ); +// purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) ); /* optional information */ - purple_notify_user_info_add_pair( info, _( "Job Title" ), profile->title ); +// purple_notify_user_info_add_pair( info, _( "Title" ), profile->title ); purple_notify_user_info_add_pair( info, _( "First Name" ), profile->firstname ); purple_notify_user_info_add_pair( info, _( "Last Name" ), profile->lastname ); - purple_notify_user_info_add_pair( info, _( "Email" ), profile->email ); +// purple_notify_user_info_add_pair( info, _( "Email" ), profile->email ); + purple_notify_user_info_add_pair( info, _( "Country" ), profile->regcountry ); purple_notify_user_info_add_section_break( info ); @@ -151,6 +150,10 @@ /* subscription type */ purple_notify_user_info_add_pair( info, _( "Subscription" ), mxit_convert_subtype_to_name( contact->subtype ) ); + + /* hidden number */ + purple_notify_user_info_add_pair( info, _( "Hidden Number" ), ( contact->flags & MXIT_CFLAG_HIDDEN ) ? _( "Yes" ) : _( "No" ) ); + } purple_notify_userinfo( session->con, username, info, NULL, NULL ); diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/mxit/profile.h --- a/libpurple/protocols/mxit/profile.h Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/mxit/profile.h Fri May 21 21:57:18 2010 +0000 @@ -43,6 +43,7 @@ char lastname[64]; /* user's last name (aka 'surname') */ char email[64]; /* user's email address */ char mobilenr[21]; /* user's mobile number */ + char regcountry[3]; /* user's registered country code */ gboolean hidden; /* set if the user's msisdn should remain hidden */ }; diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/mxit/protocol.c --- a/libpurple/protocols/mxit/protocol.c Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/mxit/protocol.c Fri May 21 21:57:18 2010 +0000 @@ -672,10 +672,12 @@ /* convert the packet to a byte stream */ datalen = sprintf( data, "ms=%s%c%s%c%i%c" /* "ms"=password\1version\1getContacts\1 */ "%s%c%s%c%i%c" /* capabilities\1dc\1features\1 */ - "%s%c%s", /* dialingcode\1locale */ + "%s%c%s%c" /* dialingcode\1locale\1 */ + "%i%c%i%c%i", /* maxReplyLen\1protocolVer\1lastRosterUpdate */ session->encpwd, CP_FLD_TERM, MXIT_CP_VERSION, CP_FLD_TERM, 1, CP_FLD_TERM, MXIT_CP_CAP, CP_FLD_TERM, session->distcode, CP_FLD_TERM, MXIT_CP_FEATURES, CP_FLD_TERM, - session->dialcode, CP_FLD_TERM, locale + session->dialcode, CP_FLD_TERM, locale, CP_FLD_TERM, + CP_MAX_FILESIZE, CP_FLD_TERM, MXIT_CP_PROTO_VESION, CP_FLD_TERM, 0 ); /* include "custom resource" information */ @@ -1300,6 +1302,10 @@ session->http_sesid = atoi( records[0]->fields[0]->data ); } + /* extract MXitId (from protocol 5.9) */ + if ( records[1]->fcount >= 9 ) + session->mxitId = g_strdup( records[1]->fields[8]->data ); + /* display the current splash-screen */ if ( splash_popup_enabled( session ) ) splash_display( session ); @@ -1513,10 +1519,14 @@ contact->mood = atoi( rec->fields[5]->data ); if ( rec->fcount > 6 ) { - /* added in protocol 5.9.0 - flags & subtype */ + /* added in protocol 5.9 - flags & subtype */ contact->flags = atoi( rec->fields[6]->data ); contact->subtype = rec->fields[7]->data[0]; } + if ( rec->fcount > 8 ) { + /* added in protocol 6.0 - reject message */ + contact->msg = g_strdup( rec->fields[8]->data ); + } /* add the contact to the buddy list */ if ( contact-> type == MXIT_TYPE_MULTIMX ) /* contact is a MultiMX room */ @@ -1582,7 +1592,16 @@ purple_debug_info( MXIT_PLUGIN_ID, "mxit_parse_cmd_extprofile: profile for '%s'\n", mxitId ); - profile = g_new0( struct MXitProfile, 1 ); + if ( records[0]->fields[0]->len == 0 ) { + /* no MXitId provided, so this must be our own profile information */ + if ( session->profile == NULL ) + session->profile = g_new0( struct MXitProfile, 1 ); + profile = session->profile; + } + else { + /* is a buddy's profile */ + profile = g_new0( struct MXitProfile, 1 ); + } /* set the count for attributes */ count = atoi( records[0]->fields[1]->data ); @@ -1647,23 +1666,19 @@ /* mobile number */ g_strlcpy( profile->mobilenr, fvalue, sizeof( profile->mobilenr ) ); } + else if ( strcmp( CP_PROFILE_REGCOUNTRY, fname ) == 0 ) { + /* registered country */ + g_strlcpy( profile->regcountry, fvalue, sizeof( profile->regcountry ) ); + } else { /* invalid profile attribute */ purple_debug_error( MXIT_PLUGIN_ID, "Invalid profile attribute received '%s' \n", fname ); } } - if ( records[0]->fields[0]->len == 0 ) { - /* no MXit id provided, so this must be our own profile information */ - if ( session->profile ) - g_free( session->profile ); - session->profile = profile; - } - else { - /* display other user's profile */ + /* if this is not our profile, just display it */ + if ( profile != session->profile ) { mxit_show_profile( session, mxitId, profile ); - - /* cleanup */ g_free( profile ); } } @@ -2472,6 +2487,8 @@ mxit_free_emoticon_cache( session ); /* free allocated memory */ + if ( session->mxitId ) + g_free( session->mxitId ); g_free( session->encpwd ); session->encpwd = NULL; diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/mxit/protocol.h --- a/libpurple/protocols/mxit/protocol.h Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/mxit/protocol.h Fri May 21 21:57:18 2010 +0000 @@ -85,11 +85,12 @@ /* MXit client version */ #define MXIT_CP_DISTCODE "P" /* client distribution code (magic, do not touch!) */ -#define MXIT_CP_RELEASE "5.9.0" /* client protocol release version supported */ +#define MXIT_CP_RELEASE "5.9.0" /* client version */ #define MXIT_CP_ARCH "Y" /* client architecture series (Y not for Yoda but for PC-client) */ #define MXIT_CLIENT_ID "LP" /* client ID as specified by MXit */ #define MXIT_CP_PLATFORM "PURPLE" /* client platform */ #define MXIT_CP_VERSION MXIT_CP_DISTCODE"-"MXIT_CP_RELEASE"-"MXIT_CP_ARCH"-"MXIT_CP_PLATFORM +#define MXIT_CP_PROTO_VESION 60 /* client protocol version */ /* set operating system name */ #if defined( __APPLE__ ) @@ -188,6 +189,7 @@ #define CP_PROFILE_LASTNAME "lastname" /* Last name (UTF8 String) */ #define CP_PROFILE_EMAIL "email" /* Email address (UTF8 String) */ #define CP_PROFILE_MOBILENR "mobilenumber" /* Mobile Number (UTF8 String) */ +#define CP_PROFILE_REGCOUNTRY "registeredcountry" /* Registered Country Code (UTF8 String) */ /* extended profile field types */ #define CP_PROF_TYPE_BOOL 0x02 /* boolean profile attribute type */ diff -r ee423c6c71b6 -r 92767d9eac2e libpurple/protocols/mxit/roster.h --- a/libpurple/protocols/mxit/roster.h Fri May 21 07:45:11 2010 +0000 +++ b/libpurple/protocols/mxit/roster.h Fri May 21 21:57:18 2010 +0000 @@ -105,7 +105,7 @@ short presence; /* presence state */ short subtype; /* subscription type */ - char* msg; /* invite message */ + char* msg; /* invite/rejection message */ char customMood[16]; /* custom mood */ char* statusMsg; /* status message */ diff -r ee423c6c71b6 -r 92767d9eac2e pidgin/Makefile.am --- a/pidgin/Makefile.am Fri May 21 07:45:11 2010 +0000 +++ b/pidgin/Makefile.am Fri May 21 21:57:18 2010 +0000 @@ -22,6 +22,7 @@ win32/wspell.c \ win32/wspell.h \ win32/nsis/generate_gtk_zip.sh \ + win32/nsis/rpm2zip.sh \ win32/nsis/pixmaps/pidgin-header.bmp \ win32/nsis/pixmaps/pidgin-intro.bmp \ win32/nsis/pixmaps/pidgin-install.ico \ diff -r ee423c6c71b6 -r 92767d9eac2e pidgin/pixmaps/emotes/default/24/Makefile.am --- a/pidgin/pixmaps/emotes/default/24/Makefile.am Fri May 21 07:45:11 2010 +0000 +++ b/pidgin/pixmaps/emotes/default/24/Makefile.am Fri May 21 21:57:18 2010 +0000 @@ -27,6 +27,7 @@ car.png \ cat.png \ chicken.png \ + chilli.png \ cigarette.png \ clap.png \ clock.png \ @@ -109,6 +110,7 @@ moneymouth.png \ monkey.png \ moon.png \ + mrgreen.png \ msn-away.png \ msn-busy.png \ msn_online.png \ diff -r ee423c6c71b6 -r 92767d9eac2e pidgin/pixmaps/emotes/default/24/chilli.png Binary file pidgin/pixmaps/emotes/default/24/chilli.png has changed diff -r ee423c6c71b6 -r 92767d9eac2e pidgin/pixmaps/emotes/default/24/default.theme.in --- a/pidgin/pixmaps/emotes/default/24/default.theme.in Fri May 21 07:45:11 2010 +0000 +++ b/pidgin/pixmaps/emotes/default/24/default.theme.in Fri May 21 21:57:18 2010 +0000 @@ -451,3 +451,41 @@ ! monkey.png :-(|) :(|) 8-|) ! cyclops.png O-) o-) + +# MXit standard emoticons +[MXit] +happy.png :-) :) +sad.png :-( :( +wink.png ;-) ;) +excited.png :-D :D :-> :> +neutral.png :-| :| +shock.png :-O :O +tongue.png :-P :P +embarrassed.png :-$ :$ +glasses-cool.png 8-) +in_love.png (H) +rose.png (F) +### Added in v3.0 +boy.png (m) +girl.png (f) +star.png (*) +chilli.png (c) +kiss.png (x) +lamp.png (i) +pissed-off.png :e :-e +shut-mouth.png :-x :x +thunder.png (z) +coffee.png (U) +mrgreen.png (G) +### Added in v5.0 +sick.png :o( +excruciating.png :-{ :{ +amorous.png :-} :} +eyeroll.png 8-o 8o +crying.png :'( +thinking.png :-? :? +drool.png :-~ :~ +sleeping.png :-z :z +lying.png :L) +glasses-nerdy.png 8-| 8| +pirate.png P-) diff -r ee423c6c71b6 -r 92767d9eac2e pidgin/pixmaps/emotes/default/24/mrgreen.png Binary file pidgin/pixmaps/emotes/default/24/mrgreen.png has changed diff -r ee423c6c71b6 -r 92767d9eac2e pidgin/win32/nsis/generate_gtk_zip.sh --- a/pidgin/win32/nsis/generate_gtk_zip.sh Fri May 21 07:45:11 2010 +0000 +++ b/pidgin/win32/nsis/generate_gtk_zip.sh Fri May 21 21:57:18 2010 +0000 @@ -3,8 +3,8 @@ PIDGIN_BASE=$1 -if [ ! -e $PIDGIN_BASE/ChangeLog.win32 ]; then - echo `basename $0` must must have the pidgin base dir specified as a parameter. +if [ ! -e $PIDGIN_BASE/ChangeLog ]; then + echo $(basename $0) must must have the pidgin base dir specified as a parameter. exit 1 fi @@ -42,12 +42,18 @@ function download_and_extract { URL=${1%%\ *} NAME=${1#*\ } - FILE=`basename $URL` + FILE=$(basename $URL) if [ ! -e $FILE ]; then echo Downloading $NAME - wget $URL + wget $URL || return 1 fi - unzip -q $FILE -d $INSTALL_DIR + EXTENSION=${FILE##*.} + #This is an OpenSuSE build service RPM + if [ $EXTENSION == 'rpm' ]; then + echo "Generating zip from $FILE" + FILE=$(../rpm2zip.sh $FILE) + fi + unzip -q $FILE -d $INSTALL_DIR || exit 1 echo "$NAME" >> $CONTENTS_FILE } @@ -63,9 +69,9 @@ #Blow away translations that we don't have in Pidgin for LOCALE_DIR in $INSTALL_DIR/share/locale/* do - LOCALE=`basename $LOCALE_DIR` + LOCALE=$(basename $LOCALE_DIR) if [ ! -e $PIDGIN_BASE/po/$LOCALE.po ]; then - echo Remove $LOCALE translation as it is missing from Pidgin + echo Removing $LOCALE translation as it is missing from Pidgin rm -r $LOCALE_DIR fi done @@ -73,3 +79,5 @@ #Generate zip file to be included in installer zip -9 -r ../gtk-runtime-$BUNDLE_VERSION.zip Gtk +exit 0 + diff -r ee423c6c71b6 -r 92767d9eac2e pidgin/win32/nsis/nsis_translations.desktop.in --- a/pidgin/win32/nsis/nsis_translations.desktop.in Fri May 21 07:45:11 2010 +0000 +++ b/pidgin/win32/nsis/nsis_translations.desktop.in Fri May 21 21:57:18 2010 +0000 @@ -29,6 +29,8 @@ _PIDGINDESKTOPSHORTCUTDESC=Create a shortcut to Pidgin on the Desktop #Installer Subsection Detailed Description _PIDGINSTARTMENUSHORTCUTDESC=Create a Start Menu entry for Pidgin +#Installer Subsection Detailed Description +_GTKSECTIONDESCRIPTION=A multi-platform GUI toolkit, used by Pidgin #Installer Subsection Text _DEBUGSYMBOLSSECTIONTITLE=Debug Symbols (for reporting crashes) diff -r ee423c6c71b6 -r 92767d9eac2e pidgin/win32/nsis/rpm2zip.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/win32/nsis/rpm2zip.sh Fri May 21 21:57:18 2010 +0000 @@ -0,0 +1,65 @@ +#!/bin/sh + +here=`pwd` +for F in $*; do + case $F in + mingw32-*.noarch.rpm|mingw64-*.noarch.rpm|*/mingw32-*.noarch.rpm|*/mingw64-*.noarch.rpm) + package=`rpm -qp $F 2>/dev/null` + case $package in + mingw32-*|mingw64-*) + case $package in + mingw32-*) + cpu=i686 + bits=32 + ;; + mingw64-*) + cpu=x86_64 + bits=64 + ;; + esac + origname=`rpm -qp --queryformat='%{NAME}' $F 2>/dev/null` + name=$origname + case $name in + *-devel) + name=${name%el} + ;; + esac + shortpackage="$name"_`rpm -qp --queryformat='%{VERSION}-%{RELEASE}'_win${bits} $F 2>/dev/null` + shortpackage=${shortpackage#mingw32-} + shortpackage=${shortpackage#mingw64-} + shortname=$name + shortname=${shortname#mingw32-} + shortname=${shortname#mingw64-} + tmp=`mktemp -d` + #rpm2cpio $F | lzcat | (cd $tmp && cpio --quiet -id) + rpm2cpio $F | (cd $tmp && cpio --quiet -id) + ( + cd $tmp + zipfile="$here/$shortpackage.zip" + rm -f $zipfile + (cd usr/${cpu}-pc-mingw32/sys-root/mingw && zip -q -r -D $zipfile .) + if [ -d usr/share/doc/packages/$origname ] ; then + mv usr/share/doc/packages/$origname usr/share/doc/packages/$shortname + (cd usr && zip -q -r -D $zipfile share/doc/packages/$shortname) + fi + mkdir -p manifest + unzip -l $zipfile >manifest/$shortpackage.mft + zip -q $zipfile manifest/$shortpackage.mft + N=`unzip -l $zipfile | wc -l | sed -e 's/^ *\([0-9]*\).*/\1/'` + Nm1=`expr $N - 1` + unzip -l $zipfile | sed -e "1,3 d" -e "$Nm1,$N d" | awk '{print $4}' | grep -v -E '/$' >manifest/$shortpackage.mft + zip -q $zipfile manifest/$shortpackage.mft + echo $zipfile + ) + rm -rf $tmp + ;; + *) + echo $F is not a mingw32/64 RPM package >&2 + ;; + esac + ;; + *) + echo $F is not a mingw32/64 RPM package >&2 + ;; + esac +done