# HG changeset patch # User Marcus Lundblad # Date 1265577116 0 # Node ID a0fb6798d87cd9a90b1a141affaad07d67ed4076 # Parent c3b735f8f490b93989f92b4c0a819d694a6297e6 Made it compile again. Changed aim_info.flag to guint64, to avoid loss of precition, I hope this won't break it... Re-introduced a couple of UI callbacks lost in earlier merges diff -r c3b735f8f490 -r a0fb6798d87c libpurple/protocols/gg/gg.c --- a/libpurple/protocols/gg/gg.c Sun Feb 07 19:40:49 2010 +0000 +++ b/libpurple/protocols/gg/gg.c Sun Feb 07 21:11:56 2010 +0000 @@ -2465,7 +2465,8 @@ sizeof(PurplePluginProtocolInfo), /* struct_size */ NULL, /* get_account_text_table */ NULL, /* initiate_media */ - NULL /* can_do_media */ + NULL, /* can_do_media */ + NULL /* get_moods */ }; static PurplePluginInfo info = { diff -r c3b735f8f490 -r a0fb6798d87c libpurple/protocols/jabber/libxmpp.c --- a/libpurple/protocols/jabber/libxmpp.c Sun Feb 07 19:40:49 2010 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Sun Feb 07 21:11:56 2010 +0000 @@ -126,6 +126,7 @@ NULL, /* get_account_text_table */ jabber_initiate_media, /* initiate_media */ jabber_get_media_caps, /* get_media_caps */ + NULL /* get_moods */ }; static gboolean load_plugin(PurplePlugin *plugin) diff -r c3b735f8f490 -r a0fb6798d87c libpurple/protocols/oscar/family_buddy.c --- a/libpurple/protocols/oscar/family_buddy.c Sun Feb 07 19:40:49 2010 +0000 +++ b/libpurple/protocols/oscar/family_buddy.c Sun Feb 07 21:11:56 2010 +0000 @@ -224,13 +224,13 @@ if (snac->subtype == SNAC_SUBTYPE_BUDDY_ONCOMING && userinfo.capabilities & OSCAR_CAPABILITY_XTRAZ) { PurpleAccount *account = purple_connection_get_account(od->gc); - PurpleBuddy *buddy = purple_find_buddy(account, userinfo.sn); + PurpleBuddy *buddy = purple_find_buddy(account, userinfo.bn); if (buddy) { PurplePresence *presence = purple_buddy_get_presence(buddy); if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOOD)) - icq_im_xstatus_request(od, userinfo.sn); + icq_im_xstatus_request(od, userinfo.bn); } } aim_info_free(&userinfo); diff -r c3b735f8f490 -r a0fb6798d87c libpurple/protocols/oscar/family_icbm.c --- a/libpurple/protocols/oscar/family_icbm.c Sun Feb 07 19:40:49 2010 +0000 +++ b/libpurple/protocols/oscar/family_icbm.c Sun Feb 07 21:11:56 2010 +0000 @@ -2675,10 +2675,10 @@ } purple_debug_misc("oscar", "X-Status reply: %s\n", (const char*)xml); account = purple_connection_get_account(od->gc); - buddy = purple_find_buddy(account, sn); + buddy = purple_find_buddy(account, bn); presence = purple_buddy_get_presence(buddy); status = purple_presence_get_active_status(presence); - purple_prpl_got_user_status(account, sn, + purple_prpl_got_user_status(account, bn, purple_status_get_id(status), "message", xml, NULL); } else { purple_debug_misc("oscar", "X-Status: Can't get XML reply string\n"); diff -r c3b735f8f490 -r a0fb6798d87c libpurple/protocols/oscar/family_locate.c --- a/libpurple/protocols/oscar/family_locate.c Sun Feb 07 19:40:49 2010 +0000 +++ b/libpurple/protocols/oscar/family_locate.c Sun Feb 07 21:11:56 2010 +0000 @@ -45,7 +45,7 @@ * But, eh. */ static const struct { - guint32 flag; + guint64 flag; guint8 data[16]; } aim_caps[] = { @@ -928,11 +928,11 @@ mood = aim_receive_custom_icon(od, bs, length); if (mood) - purple_prpl_got_user_status(account, outinfo->sn, "mood", + purple_prpl_got_user_status(account, outinfo->bn, "mood", PURPLE_MOOD_NAME, mood, NULL); else - purple_prpl_got_user_status_deactive(account, outinfo->sn, "mood"); + purple_prpl_got_user_status_deactive(account, outinfo->bn, "mood"); } else if (type == 0x000e) { /* @@ -1093,11 +1093,11 @@ g_free(icqmood); if (mood) - purple_prpl_got_user_status(account, outinfo->sn, "mood", + purple_prpl_got_user_status(account, outinfo->bn, "mood", PURPLE_MOOD_NAME, mood, NULL); else - purple_prpl_got_user_status_deactive(account, outinfo->sn, "mood"); + purple_prpl_got_user_status_deactive(account, outinfo->bn, "mood"); } break; } @@ -1507,11 +1507,11 @@ mood = aim_receive_custom_icon(od, &cbs, tlv->length); if (mood) - purple_prpl_got_user_status(account, userinfo->sn, "mood", + purple_prpl_got_user_status(account, userinfo->bn, "mood", PURPLE_MOOD_NAME, mood, NULL); else - purple_prpl_got_user_status_deactive(account, userinfo->sn, "mood"); + purple_prpl_got_user_status_deactive(account, userinfo->bn, "mood"); } aim_tlvlist_free(tlvlist); diff -r c3b735f8f490 -r a0fb6798d87c libpurple/protocols/oscar/libicq.c --- a/libpurple/protocols/oscar/libicq.c Sun Feb 07 19:40:49 2010 +0000 +++ b/libpurple/protocols/oscar/libicq.c Sun Feb 07 21:11:56 2010 +0000 @@ -108,7 +108,7 @@ sizeof(PurplePluginProtocolInfo), /* struct_size */ icq_get_account_text_table, /* get_account_text_table */ NULL, /* initiate_media */ - NULL /* can_do_media */ + NULL, /* can_do_media */ oscar_get_purple_moods, /* get_moods */ }; diff -r c3b735f8f490 -r a0fb6798d87c libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Sun Feb 07 19:40:49 2010 +0000 +++ b/libpurple/protocols/oscar/oscar.c Sun Feb 07 21:11:56 2010 +0000 @@ -232,7 +232,6 @@ void oscar_set_info(PurpleConnection *gc, const char *info); static void oscar_set_info_and_status(PurpleAccount *account, gboolean setinfo, const char *rawinfo, gboolean setstatus, PurpleStatus *status); static void oscar_set_extendedstatus(PurpleConnection *gc); -static void oscar_format_username(PurpleConnection *gc, const char *nick); static gboolean purple_ssi_rerequestdata(gpointer data); static void oscar_free_name_data(struct name_data *data) { @@ -680,7 +679,7 @@ { GString *str; const gchar *tmp; - guint bit = 1; + guint64 bit = 1; str = g_string_new(""); @@ -801,7 +800,7 @@ else if (state & AIM_ICQ_STATE_DEPRESSION) return g_strdup(_("Depression")); else if (state & AIM_ICQ_STATE_ATHOME) - return g_strdup_(_("At home")); + return g_strdup(_("At home")); else if (state & AIM_ICQ_STATE_ATWORK) return g_strdup(_("At work")); else if (state & AIM_ICQ_STATE_LUNCH) @@ -2730,18 +2729,18 @@ purple_debug_info("oscar", "Sending X-Status Reply\n"); if(args->info.rtfmsg.msgtype == 26) - icq_relay_xstatus(od, userinfo->sn, args->cookie); + icq_relay_xstatus(od, userinfo->bn, args->cookie); if(args->info.rtfmsg.msgtype == 1) { if(rtfmsg) { - serv_got_im(gc, userinfo->sn, rtfmsg, flags, + serv_got_im(gc, userinfo->bn, rtfmsg, flags, time(NULL)); } else { - serv_got_im(gc, userinfo->sn, + serv_got_im(gc, userinfo->bn, args->info.rtfmsg.rtfmsg, flags, time(NULL)); } @@ -5164,10 +5163,12 @@ if (!purple_account_is_connected(account)) return; + pc = purple_account_get_connection(account); + od = purple_connection_get_protocol_data(pc); + /* There's no need to do the stuff below for mood updates. */ if (purple_status_type_get_primitive(purple_status_get_type(status)) == PURPLE_STATUS_MOOD) { - PurpleConnection *gc = purple_account_get_connection(account); - aim_locate_setcaps((OscarData *)gc->proto_data, purple_caps); + aim_locate_setcaps(od, purple_caps); return; } @@ -6723,6 +6724,21 @@ icq_im_xstatus_request(gc->proto_data, purple_buddy_get_name(buddy)); } +static void +oscar_get_aim_info_cb(PurpleBlistNode *node, gpointer ignore) +{ + PurpleBuddy *buddy; + PurpleConnection *gc; + + g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); + + buddy = (PurpleBuddy *)node; + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); + + aim_locate_getinfoshort(purple_connection_get_protocol_data(gc), + purple_buddy_get_name(buddy), 0x00000003); +} + static GList * oscar_buddy_menu(PurpleBuddy *buddy) { diff -r c3b735f8f490 -r a0fb6798d87c libpurple/protocols/oscar/oscar.h --- a/libpurple/protocols/oscar/oscar.h Sun Feb 07 19:40:49 2010 +0000 +++ b/libpurple/protocols/oscar/oscar.h Sun Feb 07 21:11:56 2010 +0000 @@ -379,10 +379,8 @@ OSCAR_CAPABILITY_XTRAZ = 0x40000000, OSCAR_CAPABILITY_GENERICUNKNOWN = 0x80000000, #warning Fix OSCAR_CAPABILITY_LAST situation -#if 0 // TODO: We're out of bits. Rework things that depend on this or remove some capability. (Or, ensure this is a 64-bit type.) - OSCAR_CAPABILITY_LAST = 0x100000000 -#endif + OSCAR_CAPABILITY_LAST = 0x100000000 } OscarCapability; /* @@ -1158,7 +1156,6 @@ void aim_info_free(aim_userinfo_t *); int aim_info_extract(OscarData *od, ByteStream *bs, aim_userinfo_t *); int aim_putuserinfo(ByteStream *bs, aim_userinfo_t *info); -#endif PurpleMood* icq_get_purple_moods(PurpleAccount *account); const char* icq_get_custom_icon_description(const char *mood); guint8* icq_get_custom_icon_data(const char *mood); @@ -1491,7 +1488,7 @@ int aim_tlvlist_add_16(GSList **list, const guint16 type, const guint16 value); int aim_tlvlist_add_32(GSList **list, const guint16 type, const guint32 value); int aim_tlvlist_add_str(GSList **list, const guint16 type, const char *value); -int aim_tlvlist_add_caps(GSList **list, const guint16 type, const guint32 caps); +int aim_tlvlist_add_caps(GSList **list, const guint16 type, const guint32 caps, const char *mood); int aim_tlvlist_add_userinfo(GSList **list, guint16 type, aim_userinfo_t *userinfo); int aim_tlvlist_add_chatroom(GSList **list, guint16 type, guint16 exchange, const char *roomname, guint16 instance); int aim_tlvlist_add_frozentlvlist(GSList **list, guint16 type, GSList **tl); diff -r c3b735f8f490 -r a0fb6798d87c libpurple/request.h --- a/libpurple/request.h Sun Feb 07 19:40:49 2010 +0000 +++ b/libpurple/request.h Sun Feb 07 21:11:56 2010 +0000 @@ -948,7 +948,6 @@ void *purple_request_field_list_get_data(const PurpleRequestField *field, const char *text); -#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_REQUEST_C_) /** * Adds an item to a list field. * @@ -960,7 +959,6 @@ */ void purple_request_field_list_add(PurpleRequestField *field, const char *item, void *data); -#endif /** * Adds an item to a list field. diff -r c3b735f8f490 -r a0fb6798d87c pidgin/gtkblist.c --- a/pidgin/gtkblist.c Sun Feb 07 19:40:49 2010 +0000 +++ b/pidgin/gtkblist.c Sun Feb 07 21:11:56 2010 +0000 @@ -3830,7 +3830,7 @@ PurplePluginProtocolInfo *prpl_info; const char *name = NULL; char *filename, *path; - PurplePresence *presence = NULL; + PurplePresence *p = NULL; PurpleStatus *tune; if(PURPLE_BLIST_NODE_IS_CONTACT(node)) { @@ -3841,8 +3841,8 @@ } else if(PURPLE_BLIST_NODE_IS_BUDDY(node)) { buddy = (PurpleBuddy*)node; gtkbuddynode = node->ui_data; - presence = purple_buddy_get_presence(buddy); - if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOBILE)) { + p = purple_buddy_get_presence(buddy); + if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) { /* This emblem comes from the small emoticon set now, * to reduce duplication. */ path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emotes", @@ -3868,10 +3868,10 @@ /* If we came through the contact code flow above, we didn't need * to get the presence until now. */ - if (presence == NULL) - presence = purple_buddy_get_presence(buddy); - - if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOBILE)) { + if (p == NULL) + p = purple_buddy_get_presence(buddy); + + if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOBILE)) { /* This emblem comes from the small emoticon set now, to reduce duplication. */ path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emotes", "small", "mobile.png", NULL); return _pidgin_blist_get_cached_emblem(path); @@ -3908,10 +3908,10 @@ if (name == NULL) { PurpleStatus *status; - if (!purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOOD)) + if (!purple_presence_is_status_primitive_active(p, PURPLE_STATUS_MOOD)) return NULL; - status = purple_presence_get_status(presence, "mood"); + status = purple_presence_get_status(p, "mood"); name = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); if (!(name && *name)) @@ -7949,6 +7949,88 @@ purple_account_set_enabled(account, PIDGIN_UI, FALSE); } +static void +edit_mood_cb(PurpleConnection *gc, PurpleRequestFields *fields) +{ + PurpleRequestField *f; + GList *l; + + f = purple_request_fields_get_field(fields, "mood"); + l = purple_request_field_list_get_selected(f); + + if (l) { + const char *mood = purple_request_field_list_get_data(f, l->data); + PurpleAccount *account = purple_connection_get_account(gc); + + if (mood != NULL) { + purple_account_set_status(account, "mood", TRUE, + PURPLE_MOOD_NAME, mood, + NULL); + } else { + purple_account_set_status(account, "mood", FALSE, NULL); + } + } +} + +static void +set_mood_cb(GtkWidget *widget, PurpleAccount *account) +{ + PurplePresence *presence = purple_account_get_presence(account); + PurpleStatus *status = purple_presence_get_status(presence, "mood"); + const char *current_mood; + PurpleRequestFields *fields; + PurpleRequestFieldGroup *g; + PurpleRequestField *f; + char* na_fn; + PurpleConnection *gc = purple_account_get_connection(account); + PurplePluginProtocolInfo *prpl_info; + PurpleMood *mood; + + g_return_if_fail(gc->prpl != NULL); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + + current_mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); + + fields = purple_request_fields_new(); + g = purple_request_field_group_new(NULL); + f = purple_request_field_list_new("mood", _("Please select your mood from the list")); + + na_fn = g_build_filename("pixmaps", "pidgin", "emblems", "16", "not-authorized.png", NULL); + + purple_request_field_list_add_icon(f, _("None"), na_fn, NULL); + if (current_mood == NULL) + purple_request_field_list_add_selected(f, _("None")); + + g_free(na_fn); + + /* TODO: rlaager wants this sorted. */ + for (mood = prpl_info->get_moods(account); + mood->mood != NULL ; mood++) { + char *path; + + if (mood->mood == NULL || mood->description == NULL) + continue; + + path = get_mood_icon_path(mood->mood); + purple_request_field_list_add_icon(f, _(mood->description), + path, (gpointer)mood->mood); + g_free(path); + + if (current_mood && !strcmp(current_mood, mood->mood)) + purple_request_field_list_add_selected(f, _(mood->description)); + } + purple_request_field_group_add_field(g, f); + + purple_request_fields_add_group(fields, g); + + purple_request_fields(gc, _("Edit User Mood"), _("Edit User Mood"), + NULL, fields, + _("OK"), G_CALLBACK(edit_mood_cb), + _("Cancel"), NULL, + purple_connection_get_account(gc), + NULL, NULL, gc); +} + void pidgin_blist_update_accounts_menu(void) { @@ -8028,7 +8110,7 @@ PurpleAccount *account = NULL; GdkPixbuf *pixbuf = NULL; PurplePlugin *plugin = NULL; - PurplePluginProtocolInfo *prpl_info + PurplePluginProtocolInfo *prpl_info; account = accounts->data;