# HG changeset patch # User Nathan Walp # Date 1094404239 0 # Node ID a9fb4493ae226fb6abc64c392e0b894a09f6068a # Parent d908907d944134202febd20b32ad1cdfd308cf0e [gaim-migrate @ 10851] a combination of the hacking i've been doing on jabber, and the patch datallah just sent me committer: Tailor Script diff -r d908907d9441 -r a9fb4493ae22 plugins/contact_priority.c --- a/plugins/contact_priority.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/contact_priority.c Sun Sep 05 17:10:39 2004 +0000 @@ -23,6 +23,7 @@ #include "gtkplugin.h" #include "gtkutils.h" #include "prefs.h" +#include "version.h" #define CONTACT_PRIORITY_PLUGIN_ID "gtk-contact-priority" @@ -181,7 +182,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/docklet/Makefile.mingw --- a/plugins/docklet/Makefile.mingw Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/docklet/Makefile.mingw Sun Sep 05 17:10:39 2004 +0000 @@ -94,7 +94,7 @@ all: $(TARGET).dll -install: +install: all cp $(TARGET).dll $(DLL_INSTALL_DIR) diff -r d908907d9441 -r a9fb4493ae22 plugins/filectl.c --- a/plugins/filectl.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/filectl.c Sun Sep 05 17:10:39 2004 +0000 @@ -22,7 +22,7 @@ #include "debug.h" #include "account.h" #include "conversation.h" - +#include "version.h" #define FILECTL_PLUGIN_ID "core-filectl" @@ -211,7 +211,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/gaiminc.c --- a/plugins/gaiminc.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/gaiminc.c Sun Sep 05 17:10:39 2004 +0000 @@ -4,6 +4,7 @@ #include "account.h" #include "connection.h" #include "conversation.h" +#include "version.h" /* include UI for gaim_gtkdialogs_about() */ #include "gtkplugin.h" @@ -76,7 +77,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/gevolution/gevolution.c --- a/plugins/gevolution/gevolution.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/gevolution/gevolution.c Sun Sep 05 17:10:39 2004 +0000 @@ -25,6 +25,7 @@ #include "debug.h" #include "prefs.h" #include "signals.h" +#include "version.h" #include "gtkblist.h" #include "gtkconv.h" @@ -454,7 +455,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/gtk-signals-test.c --- a/plugins/gtk-signals-test.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/gtk-signals-test.c Sun Sep 05 17:10:39 2004 +0000 @@ -24,6 +24,7 @@ #include "internal.h" #include "debug.h" +#include "version.h" #include "gtkaccount.h" #include "gtkblist.h" @@ -88,7 +89,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/ipc-test-client.c --- a/plugins/ipc-test-client.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/ipc-test-client.c Sun Sep 05 17:10:39 2004 +0000 @@ -21,6 +21,7 @@ #include "internal.h" #include "debug.h" #include "plugin.h" +#include "version.h" #define IPC_TEST_CLIENT_PLUGIN_ID "core-ipc-test-client" @@ -73,7 +74,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/ipc-test-server.c --- a/plugins/ipc-test-server.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/ipc-test-server.c Sun Sep 05 17:10:39 2004 +0000 @@ -23,6 +23,7 @@ #include "internal.h" #include "debug.h" #include "plugin.h" +#include "version.h" static int add_func(int i1, int i2) @@ -60,7 +61,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/mailchk.c --- a/plugins/mailchk.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/mailchk.c Sun Sep 05 17:10:39 2004 +0000 @@ -5,6 +5,7 @@ #include "debug.h" #include "signals.h" #include "sound.h" +#include "version.h" #include "gtkblist.h" #include "gtkgaim.h" @@ -147,7 +148,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, GAIM_GTK_PLUGIN_TYPE, 0, diff -r d908907d9441 -r a9fb4493ae22 plugins/pluginpref_example.c --- a/plugins/pluginpref_example.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/pluginpref_example.c Sun Sep 05 17:10:39 2004 +0000 @@ -32,6 +32,7 @@ #include "plugin.h" #include "pluginpref.h" #include "prefs.h" +#include "version.h" static GaimPluginPrefFrame * get_plugin_pref_frame(GaimPlugin *plugin) { @@ -112,7 +113,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/raw.c --- a/plugins/raw.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/raw.c Sun Sep 05 17:10:39 2004 +0000 @@ -1,6 +1,7 @@ #include "conversation.h" #include "debug.h" #include "prpl.h" +#include "version.h" #include "gtkgaim.h" #include "gtkplugin.h" @@ -136,7 +137,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, GAIM_GTK_PLUGIN_TYPE, 0, diff -r d908907d9441 -r a9fb4493ae22 plugins/signals-test.c --- a/plugins/signals-test.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/signals-test.c Sun Sep 05 17:10:39 2004 +0000 @@ -28,6 +28,7 @@ #include "core.h" #include "debug.h" #include "signals.h" +#include "version.h" /************************************************************************** * Account subsystem signal callbacks @@ -571,7 +572,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/simple.c --- a/plugins/simple.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/simple.c Sun Sep 05 17:10:39 2004 +0000 @@ -1,6 +1,7 @@ #include "internal.h" #include "debug.h" #include "plugin.h" +#include "version.h" static gboolean plugin_load(GaimPlugin *plugin) @@ -20,9 +21,11 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ - NULL, /**< ui_requirement */ + NULL, /**< ui_requirement */ 0, /**< flags */ NULL, /**< dependencies */ GAIM_PRIORITY_DEFAULT, /**< priority */ diff -r d908907d9441 -r a9fb4493ae22 plugins/win32/transparency/win2ktrans.c --- a/plugins/win32/transparency/win2ktrans.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/win32/transparency/win2ktrans.c Sun Sep 05 17:10:39 2004 +0000 @@ -31,6 +31,7 @@ #include "gtkblist.h" #include "gtkutils.h" #include "signals.h" +#include "version.h" /* * MACROS & DEFINES @@ -466,7 +467,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, /**< type */ GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 plugins/win32/winprefs/winprefs.c --- a/plugins/win32/winprefs/winprefs.c Sun Sep 05 06:29:51 2004 +0000 +++ b/plugins/win32/winprefs/winprefs.c Sun Sep 05 17:10:39 2004 +0000 @@ -29,6 +29,7 @@ #include "prefs.h" #include "debug.h" #include "signals.h" +#include "version.h" #include "gtkplugin.h" #include "gtkutils.h" @@ -394,7 +395,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_STANDARD, GAIM_GTK_PLUGIN_TYPE, 0, diff -r d908907d9441 -r a9fb4493ae22 src/gtkblist.c --- a/src/gtkblist.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/gtkblist.c Sun Sep 05 17:10:39 2004 +0000 @@ -2588,7 +2588,7 @@ } struct _emblem_data { - char *filename; + const char *filename; int x; int y; }; diff -r d908907d9441 -r a9fb4493ae22 src/protocols/jabber/buddy.c --- a/src/protocols/jabber/buddy.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/jabber/buddy.c Sun Sep 05 17:10:39 2004 +0000 @@ -93,8 +93,8 @@ return jbr; } -void jabber_buddy_track_resource(JabberBuddy *jb, const char *resource, - int priority, int state, const char *status) +JabberBuddyResource *jabber_buddy_track_resource(JabberBuddy *jb, const char *resource, + int priority, JabberBuddyState state, const char *status) { JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, resource); @@ -110,6 +110,8 @@ if(jbr->status) g_free(jbr->status); jbr->status = g_strdup(status); + + return jbr; } void jabber_buddy_resource_free(JabberBuddyResource *jbr) @@ -560,7 +562,7 @@ if(jbr->status) purdy = gaim_strdup_withhtml(jbr->status); g_string_append_printf(info_text, "%s: %s%s%s
", - _("Status"), jabber_get_state_string(jbr->state), + _("Status"), jabber_buddy_state_get_name(jbr->state), purdy ? ": " : "", purdy ? purdy : ""); if(purdy) @@ -578,7 +580,7 @@ g_string_append_printf(info_text, "%s: %s
", _("Resource"), jbr->name); g_string_append_printf(info_text, "%s: %s%s%s

", - _("Status"), jabber_get_state_string(jbr->state), + _("Status"), jabber_buddy_state_get_name(jbr->state), purdy ? ": " : "", purdy ? purdy : ""); if(purdy) @@ -823,12 +825,17 @@ GaimStatus *status; JabberBuddy *jb = jabber_buddy_find(js, who, TRUE); xmlnode *presence; + JabberBuddyState state; + const char *msg; + int priority; account = gaim_connection_get_account(js->gc); gpresence = gaim_account_get_presence(account); status = gaim_presence_get_active_status(gpresence); - presence = jabber_presence_create(status); + gaim_status_to_jabber(status, &state, &msg, &priority); + presence = jabber_presence_create(state, msg, priority); + xmlnode_set_attrib(presence, "to", who); if(invisible) { xmlnode_set_attrib(presence, "type", "invisible"); @@ -979,3 +986,69 @@ } +const char * +jabber_buddy_state_get_name(JabberBuddyState state) +{ + switch(state) { + case JABBER_BUDDY_STATE_UNKNOWN: + return _("Unknown"); + case JABBER_BUDDY_STATE_ERROR: + return _("Error"); + case JABBER_BUDDY_STATE_UNAVAILABLE: + return _("Offline"); + case JABBER_BUDDY_STATE_ONLINE: + return _("Online"); + case JABBER_BUDDY_STATE_CHAT: + return _("Chatty"); + case JABBER_BUDDY_STATE_AWAY: + return _("Away"); + case JABBER_BUDDY_STATE_XA: + return _("Extended Away"); + case JABBER_BUDDY_STATE_DND: + return _("Do Not Disturb"); + } + + return _("Unknown"); +} + +JabberBuddyState jabber_buddy_status_id_get_state(const char *id) { + if(!id) + return JABBER_BUDDY_STATE_UNKNOWN; + if(!strcmp(id, "online")) + return JABBER_BUDDY_STATE_ONLINE; + if(!strcmp(id, "chat")) + return JABBER_BUDDY_STATE_CHAT; + if(!strcmp(id, "away")) + return JABBER_BUDDY_STATE_AWAY; + if(!strcmp(id, "xa")) + return JABBER_BUDDY_STATE_XA; + if(!strcmp(id, "dnd")) + return JABBER_BUDDY_STATE_DND; + if(!strcmp(id, "offline")) + return JABBER_BUDDY_STATE_UNAVAILABLE; + if(!strcmp(id, "error")) + return JABBER_BUDDY_STATE_ERROR; + + return JABBER_BUDDY_STATE_UNKNOWN; +} + +const char *jabber_buddy_state_get_status_id(JabberBuddyState state) { + switch(state) { + case JABBER_BUDDY_STATE_CHAT: + return "chat"; + case JABBER_BUDDY_STATE_AWAY: + return "away"; + case JABBER_BUDDY_STATE_XA: + return "xa"; + case JABBER_BUDDY_STATE_DND: + return "dnd"; + case JABBER_BUDDY_STATE_ONLINE: + return "online"; + case JABBER_BUDDY_STATE_UNKNOWN: + case JABBER_BUDDY_STATE_ERROR: + return NULL; + case JABBER_BUDDY_STATE_UNAVAILABLE: + return "offline"; + } + return NULL; +} diff -r d908907d9441 -r a9fb4493ae22 src/protocols/jabber/buddy.h --- a/src/protocols/jabber/buddy.h Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/jabber/buddy.h Sun Sep 05 17:10:39 2004 +0000 @@ -24,6 +24,17 @@ #include "jabber.h" +typedef enum { + JABBER_BUDDY_STATE_UNKNOWN = -2, + JABBER_BUDDY_STATE_ERROR = -1, + JABBER_BUDDY_STATE_UNAVAILABLE = 0, + JABBER_BUDDY_STATE_ONLINE, + JABBER_BUDDY_STATE_CHAT, + JABBER_BUDDY_STATE_AWAY, + JABBER_BUDDY_STATE_XA, + JABBER_BUDDY_STATE_DND +} JabberBuddyState; + typedef struct _JabberBuddy { GList *resources; char *error_msg; @@ -46,7 +57,7 @@ JabberBuddy *jb; char *name; int priority; - int state; + JabberBuddyState state; char *status; JabberCapabilities capabilities; char *thread_id; @@ -57,8 +68,8 @@ gboolean create); JabberBuddyResource *jabber_buddy_find_resource(JabberBuddy *jb, const char *resource); -void jabber_buddy_track_resource(JabberBuddy *jb, const char *resource, - int priority, int state, const char *status); +JabberBuddyResource *jabber_buddy_track_resource(JabberBuddy *jb, const char *resource, + int priority, JabberBuddyState state, const char *status); void jabber_buddy_resource_free(JabberBuddyResource *jbr); void jabber_buddy_remove_resource(JabberBuddy *jb, const char *resource); const char *jabber_buddy_get_status_msg(JabberBuddy *jb); @@ -71,4 +82,8 @@ void jabber_set_info(GaimConnection *gc, const char *info); void jabber_setup_set_info(GaimPluginAction *action); +const char *jabber_buddy_state_get_name(JabberBuddyState state); +const char *jabber_buddy_state_get_status_id(JabberBuddyState state); +JabberBuddyState jabber_buddy_status_id_get_state(const char *id); + #endif /* _GAIM_JABBER_BUDDY_H_ */ diff -r d908907d9441 -r a9fb4493ae22 src/protocols/jabber/chat.c --- a/src/protocols/jabber/chat.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/jabber/chat.c Sun Sep 05 17:10:39 2004 +0000 @@ -196,6 +196,11 @@ xmlnode *presence, *x; char *tmp, *room_jid, *full_jid; JabberStream *js = gc->proto_data; + GaimPresence *gpresence; + GaimStatus *status; + JabberBuddyState state; + const char *msg; + int priority; room = g_hash_table_lookup(data, "room"); server = g_hash_table_lookup(data, "server"); @@ -245,7 +250,12 @@ g_hash_table_insert(js->chats, room_jid, chat); - presence = jabber_presence_create(gc->away_state, gc->away); + gpresence = gaim_account_get_presence(gc->account); + status = gaim_presence_get_active_status(gpresence); + + gaim_status_to_jabber(status, &state, &msg, &priority); + + presence = jabber_presence_create(state, msg, priority); full_jid = g_strdup_printf("%s/%s", room_jid, handle); xmlnode_set_attrib(presence, "to", full_jid); g_free(full_jid); @@ -599,6 +609,11 @@ { xmlnode *presence; char *full_jid; + GaimPresence *gpresence; + GaimStatus *status; + JabberBuddyState state; + const char *msg; + int priority; if(!chat->muc) { gaim_conv_chat_write(GAIM_CONV_CHAT(chat->conv), "", @@ -607,7 +622,12 @@ return; } - presence = jabber_presence_create(chat->js->gc->away_state, chat->js->gc->away); + gpresence = gaim_account_get_presence(chat->js->gc->account); + status = gaim_presence_get_active_status(gpresence); + + gaim_status_to_jabber(status, &state, &msg, &priority); + + presence = jabber_presence_create(state, msg, priority); full_jid = g_strdup_printf("%s@%s/%s", chat->room, chat->server, nick); xmlnode_set_attrib(presence, "to", full_jid); g_free(full_jid); diff -r d908907d9441 -r a9fb4493ae22 src/protocols/jabber/jabber.c --- a/src/protocols/jabber/jabber.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/jabber/jabber.c Sun Sep 05 17:10:39 2004 +0000 @@ -742,7 +742,7 @@ { JabberStream *js = gc->proto_data; - jabber_presence_send(gc, "unavailable", _("Logged out")); + jabber_presence_send(gc, NULL); /* XXX: FIXME: EEK! */ jabber_send_raw(js, "", -1); if(js->gsc) { @@ -776,6 +776,9 @@ void jabber_stream_set_state(JabberStream *js, JabberStreamState state) { + GaimPresence *gpresence; + GaimStatus *status; + js->state = state; switch(state) { case JABBER_STREAM_OFFLINE: @@ -807,7 +810,9 @@ case JABBER_STREAM_CONNECTED: gaim_connection_set_state(js->gc, GAIM_CONNECTED); jabber_roster_request(js); - jabber_presence_send(js->gc, js->gc->away_state, js->gc->away); + gpresence = gaim_account_get_presence(js->gc->account); + status = gaim_presence_get_active_status(gpresence); + jabber_presence_send(js->gc, status); jabber_disco_items_server(js); serv_finish_login(js->gc); break; @@ -832,8 +837,8 @@ return "jabber"; } -static void jabber_list_emblems(GaimBuddy *b, char **se, char **sw, - char **nw, char **ne) +static void jabber_list_emblems(GaimBuddy *b, const char **se, const char **sw, + const char **nw, const char **ne) { JabberStream *js; JabberBuddy *jb; @@ -853,22 +858,12 @@ else *se = "offline"; } else { - switch (b->uc) { - case JABBER_STATE_AWAY: - *se = "away"; - break; - case JABBER_STATE_CHAT: - *se = "chat"; - break; - case JABBER_STATE_XA: + GaimStatusType *status_type = gaim_status_get_type(gaim_presence_get_active_status(gaim_buddy_get_presence(b))); + + if(gaim_status_type_get_primitive(status_type) > GAIM_STATUS_ONLINE) { + *se = gaim_status_type_get_id(status_type); + if(!strcmp(*se, "xa")) *se = "extendedaway"; - break; - case JABBER_STATE_DND: - *se = "dnd"; - break; - case JABBER_STATE_ERROR: - *se = "error"; - break; } } } @@ -886,10 +881,12 @@ } else { char *stripped; - stripped = gaim_markup_strip_html(jabber_buddy_get_status_msg(jb)); + if(!(stripped = gaim_markup_strip_html(jabber_buddy_get_status_msg(jb)))) { + GaimStatus *status = gaim_presence_get_active_status(gaim_buddy_get_presence(b)); - if(!stripped && b->uc & UC_UNAVAILABLE) - stripped = g_strdup(jabber_get_state_string(b->uc)); + if(!gaim_status_is_available(status)) + stripped = g_strdup(gaim_status_get_name(status)); + } if(stripped) { ret = g_markup_escape_text(stripped, -1); @@ -937,7 +934,7 @@ g_string_append_printf(ret, "\n%s: %s%s%s", _("Status"), - jabber_get_state_string(jbr->state), + jabber_buddy_state_get_name(jbr->state), text ? ": " : "", text ? text : ""); if(text) @@ -951,21 +948,35 @@ return g_string_free(ret, FALSE); } -static GList *jabber_away_states(GaimConnection *gc) +static GList *jabber_status_types(GaimAccount *account) { - JabberStream *js = gc->proto_data; - GList *m = NULL; + GaimStatusType *type; + GList *types = NULL; + + type = gaim_status_type_new_with_attrs(GAIM_STATUS_OFFLINE, "offline", _("Offline"), TRUE, FALSE, FALSE, "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING)); + types = g_list_append(types, type); + + type = gaim_status_type_new_with_attrs(GAIM_STATUS_ONLINE, "online", _("Online"), TRUE, TRUE, FALSE, "priority", _("Priority"), gaim_value_new(GAIM_TYPE_INT), "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING)); + types = g_list_append(types, type); - m = g_list_append(m, _("Online")); - m = g_list_append(m, _("Chatty")); - m = g_list_append(m, _("Away")); - m = g_list_append(m, _("Extended Away")); - m = g_list_append(m, _("Do Not Disturb")); + type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE, "chat", _("Chatty"), TRUE, TRUE, FALSE, "priority", _("Priority"), gaim_value_new(GAIM_TYPE_INT), "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING)); + types = g_list_append(types, type); + + type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY, "away", _("Away"), TRUE, TRUE, FALSE, "priority", _("Priority"), gaim_value_new(GAIM_TYPE_INT), "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING)); + types = g_list_append(types, type); + + type = gaim_status_type_new_with_attrs(GAIM_STATUS_EXTENDED_AWAY, "xa", _("Extended Away"), TRUE, TRUE, FALSE, "priority", _("Priority"), gaim_value_new(GAIM_TYPE_INT), "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING)); + types = g_list_append(types, type); + + type = gaim_status_type_new_with_attrs(GAIM_STATUS_UNAVAILABLE, "dnd", _("Do Not Disturb"), TRUE, TRUE, FALSE, "priority", _("Priority"), gaim_value_new(GAIM_TYPE_INT), "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING)); + types = g_list_append(types, type); + + /* if(js->protocol_version == JABBER_PROTO_0_9) m = g_list_append(m, _("Invisible")); - m = g_list_append(m, GAIM_AWAY_CUSTOM); + */ - return m; + return types; } static void @@ -1488,7 +1499,7 @@ jabber_list_emblems, /* list_emblems */ jabber_status_text, /* status_text */ jabber_tooltip_text, /* tooltip_text */ - jabber_away_states, /* away_states */ + jabber_status_types, /* status_types */ jabber_blist_node_menu, /* blist_node_menu */ jabber_chat_info, /* chat_info */ jabber_chat_info_defaults, /* chat_info_defaults */ @@ -1498,7 +1509,7 @@ jabber_set_info, /* set_info */ jabber_send_typing, /* send_typing */ jabber_buddy_get_info, /* get_info */ - jabber_presence_send, /* set_away */ + NULL, /* set_away */ jabber_idle_set, /* set_idle */ NULL, /* change_passwd */ jabber_roster_add_buddy, /* add_buddy */ diff -r d908907d9441 -r a9fb4493ae22 src/protocols/jabber/jutil.c --- a/src/protocols/jabber/jutil.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/jabber/jutil.c Sun Sep 05 17:10:39 2004 +0000 @@ -26,26 +26,6 @@ #include "presence.h" #include "jutil.h" -const char *jabber_get_state_string(int s) { - switch(s) { - case JABBER_STATE_AWAY: - return _("Away"); - break; - case JABBER_STATE_CHAT: - return _("Chatty"); - break; - case JABBER_STATE_XA: - return _("Extended Away"); - break; - case JABBER_STATE_DND: - return _("Do Not Disturb"); - break; - default: - return _("Available"); - break; - } -} - gboolean jabber_nodeprep_validate(const char *str) { const char *c; diff -r d908907d9441 -r a9fb4493ae22 src/protocols/jabber/jutil.h --- a/src/protocols/jabber/jutil.h Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/jabber/jutil.h Sun Sep 05 17:10:39 2004 +0000 @@ -39,8 +39,6 @@ char *jabber_get_resource(const char *jid); char *jabber_get_bare_jid(const char *jid); -const char *jabber_get_state_string(int state); - const char *jabber_normalize(const GaimAccount *account, const char *in); gboolean jabber_nodeprep_validate(const char *); diff -r d908907d9441 -r a9fb4493ae22 src/protocols/jabber/presence.c --- a/src/protocols/jabber/presence.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/jabber/presence.c Sun Sep 05 17:10:39 2004 +0000 @@ -24,6 +24,7 @@ #include "notify.h" #include "request.h" #include "server.h" +#include "status.h" #include "util.h" #include "buddy.h" @@ -52,96 +53,81 @@ g_free(chat_full_jid); } -void jabber_presence_fake_to_self(JabberStream *js, const char *away_state, const char *msg) { +void jabber_presence_fake_to_self(JabberStream *js, const GaimStatus *gstatus) { char *my_base_jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain); if(gaim_find_buddy(js->gc->account, my_base_jid)) { JabberBuddy *jb; JabberBuddyResource *jbr; if((jb = jabber_buddy_find(js, my_base_jid, TRUE))) { - int state = 0; - if(away_state) { - if(!strcmp(away_state, _("Away")) || - (msg && *msg && !strcmp(away_state, GAIM_AWAY_CUSTOM))) - state = JABBER_STATE_AWAY; - else if(!strcmp(away_state, _("Chatty"))) - state = JABBER_STATE_CHAT; - else if(!strcmp(away_state, _("Extended Away"))) - state = JABBER_STATE_XA; - else if(!strcmp(away_state, _("Do Not Disturb"))) - state = JABBER_STATE_DND; - } - - if (away_state && !strcmp(away_state, "unavailable")) { + JabberBuddyState state; + const char *msg; + int priority; + + gaim_status_to_jabber(gstatus, &state, &msg, &priority); + + if (state == JABBER_BUDDY_STATE_UNAVAILABLE) { jabber_buddy_remove_resource(jb, js->user->resource); } else { - jabber_buddy_track_resource(jb, js->user->resource, 0, state, (msg && *msg) ? msg : NULL); + jabber_buddy_track_resource(jb, js->user->resource, priority, state, msg); } - if((jbr = jabber_buddy_find_resource(jb, NULL))) - serv_got_update(js->gc, my_base_jid, TRUE, 0, 0, 0, jbr->state); - else - serv_got_update(js->gc, my_base_jid, FALSE, 0, 0, 0, 0); + if((jbr = jabber_buddy_find_resource(jb, NULL))) { + gaim_prpl_got_user_status(js->gc->account, my_base_jid, jabber_buddy_state_get_status_id(jbr->state), "priority", jbr->priority, jbr->status ? "message" : NULL, jbr->status); + } else { + gaim_prpl_got_user_status(js->gc->account, my_base_jid, "offline", msg ? "message" : NULL, msg); + } } } g_free(my_base_jid); } -void jabber_presence_send(GaimConnection *gc, const char *state, - const char *msg) +void jabber_presence_send(GaimConnection *gc, GaimStatus *status) { JabberStream *js = gc->proto_data; xmlnode *presence; char *stripped = NULL; + const char *msg; + JabberBuddyState state; + int priority; - if(msg) { + gaim_status_to_jabber(status, &state, &msg, &priority); + + if(msg) gaim_markup_html_to_xhtml(msg, NULL, &stripped); - } else if(!state || strcmp(state, GAIM_AWAY_CUSTOM)) { - /* i can't wait until someone re-writes the status/away stuff */ - stripped = g_strdup(""); - } - if(gc->away) - g_free(gc->away); - gc->away = stripped; + presence = jabber_presence_create(state, stripped, priority); + g_free(stripped); - presence = jabber_presence_create(state, stripped); jabber_send(js, presence); g_hash_table_foreach(js->chats, chats_send_presence_foreach, presence); xmlnode_free(presence); - jabber_presence_fake_to_self(js, state, stripped); + jabber_presence_fake_to_self(js, status); + } -xmlnode *jabber_presence_create(const char *state, const char *msg) +xmlnode *jabber_presence_create(JabberBuddyState state, const char *msg, int priority) { xmlnode *show, *status, *presence; + const char *show_string = NULL; presence = xmlnode_new("presence"); - if(state) { - const char *show_string = NULL; - if(!strcmp(state, _("Chatty"))) - show_string = "chat"; - else if(!strcmp(state, _("Away")) || - (msg && !strcmp(state, GAIM_AWAY_CUSTOM))) - show_string = "away"; - else if(!strcmp(state, _("Extended Away"))) - show_string = "xa"; - else if(!strcmp(state, _("Do Not Disturb"))) - show_string = "dnd"; - else if(!strcmp(state, _("Invisible"))) - xmlnode_set_attrib(presence, "type", "invisible"); - else if(!strcmp(state, "unavailable")) - xmlnode_set_attrib(presence, "type", "unavailable"); - if(show_string) { - show = xmlnode_new_child(presence, "show"); - xmlnode_insert_data(show, show_string, -1); - } + if(state == JABBER_BUDDY_STATE_UNAVAILABLE) + xmlnode_set_attrib(presence, "type", "unavailable"); + else if(state != JABBER_BUDDY_STATE_ONLINE && + state != JABBER_BUDDY_STATE_UNKNOWN && + state != JABBER_BUDDY_STATE_ERROR) + show_string = jabber_buddy_state_get_status_id(state); + + if(show_string) { + show = xmlnode_new_child(presence, "show"); + xmlnode_insert_data(show, show_string, -1); } - if(msg && *msg) { + if(msg) { status = xmlnode_new_child(presence, "status"); xmlnode_insert_data(status, msg, -1); } @@ -179,20 +165,6 @@ g_free(jap); } -static int show_to_state(const char *show) { - if(!show) - return 0; - else if(!strcmp(show, "away")) - return JABBER_STATE_AWAY; - else if(!strcmp(show, "chat")) - return JABBER_STATE_CHAT; - else if(!strcmp(show, "xa")) - return JABBER_STATE_XA; - else if(!strcmp(show, "dnd")) - return JABBER_STATE_DND; - return 0; -} - void jabber_presence_parse(JabberStream *js, xmlnode *packet) { const char *from = xmlnode_get_attrib(packet, "from"); @@ -205,12 +177,12 @@ JabberID *jid; JabberChat *chat; JabberBuddy *jb; - JabberBuddyResource *jbr = NULL; + JabberBuddyResource *jbr = NULL, *found_jbr = NULL; GaimConvChatBuddyFlags flags = GAIM_CBFLAGS_NONE; gboolean delayed = FALSE; GaimBuddy *b; char *buddy_name; - int state = 0; + JabberBuddyState state = JABBER_BUDDY_STATE_UNKNOWN; xmlnode *y; gboolean muc = FALSE; @@ -229,7 +201,7 @@ if(type && !strcmp(type, "error")) { char *msg = jabber_parse_error(js, packet); - state = JABBER_STATE_ERROR; + state = JABBER_BUDDY_STATE_ERROR; jb->error_msg = msg ? msg : g_strdup(_("Unknown Error in presence")); } else if(type && !strcmp(type, "subscribe")) { struct _jabber_add_permit *jap = g_new0(struct _jabber_add_permit, 1); @@ -250,10 +222,10 @@ } else { if((y = xmlnode_get_child(packet, "show"))) { char *show = xmlnode_get_data(y); - state = show_to_state(show); + state = jabber_buddy_status_id_get_state(show); g_free(show); } else { - state = 0; + state = JABBER_BUDDY_STATE_ONLINE; } } @@ -318,7 +290,7 @@ static int i = 1; char *room_jid = g_strdup_printf("%s@%s", jid->node, jid->domain); - if(state == JABBER_STATE_ERROR) { + if(state == JABBER_BUDDY_STATE_ERROR) { char *title, *msg = jabber_parse_error(js, packet); if(chat->conv) { @@ -426,7 +398,7 @@ } g_free(room_jid); } else { - if(state != JABBER_STATE_ERROR && !(jb->subscription & JABBER_SUB_TO)) { + if(state != JABBER_BUDDY_STATE_ERROR && !(jb->subscription & JABBER_SUB_TO)) { gaim_debug(GAIM_DEBUG_INFO, "jabber", "got unexpected presence from %s, ignoring\n", from); jabber_id_free(jid); @@ -443,7 +415,7 @@ return; } - if(state == JABBER_STATE_ERROR || + if(state == JABBER_BUDDY_STATE_ERROR || (type && (!strcmp(type, "unavailable") || !strcmp(type, "unsubscribed")))) { GaimConversation *conv; @@ -453,16 +425,17 @@ gaim_conversation_set_name(conv, buddy_name); } else { - jabber_buddy_track_resource(jb, jid->resource, priority, state, - status); + jbr = jabber_buddy_track_resource(jb, jid->resource, priority, + state, status); } - if((jbr = jabber_buddy_find_resource(jb, NULL))) - serv_got_update(js->gc, buddy_name, TRUE, 0, b->signon, b->idle, - jbr->state); - else - serv_got_update(js->gc, buddy_name, FALSE, 0, 0, 0, 0); - + if((found_jbr = jabber_buddy_find_resource(jb, NULL))) { + if(!jbr || jbr == found_jbr) { + gaim_prpl_got_user_status(js->gc->account, buddy_name, jabber_buddy_state_get_status_id(state), "priority", found_jbr->priority, found_jbr->status ? "message" : NULL, found_jbr->status); + } + } else { + gaim_prpl_got_user_status(js->gc->account, buddy_name, "offline", status ? "message" : NULL, status); + } g_free(buddy_name); } g_free(status); @@ -479,3 +452,27 @@ jabber_send(js, presence); xmlnode_free(presence); } + +void gaim_status_to_jabber(const GaimStatus *status, JabberBuddyState *state, const char **msg, int *priority) +{ + const char *status_id; + + if(!status) { + *state = JABBER_BUDDY_STATE_UNKNOWN; + *msg = NULL; + *priority = 0; + return; + } + + if(state) { + status_id = gaim_status_get_id(status); + *state = jabber_buddy_status_id_get_state(status_id); + } + + if(msg) + *msg = gaim_status_get_attr_string(status, "message"); + + if(priority) + *priority = gaim_status_get_attr_int(status, "priority"); + +} diff -r d908907d9441 -r a9fb4493ae22 src/protocols/jabber/presence.h --- a/src/protocols/jabber/presence.h Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/jabber/presence.h Sun Sep 05 17:10:39 2004 +0000 @@ -22,21 +22,16 @@ #ifndef _GAIM_JABBER_PRESENCE_H_ #define _GAIM_JABBER_PRESENCE_H_ +#include "buddy.h" #include "jabber.h" #include "xmlnode.h" -#define JABBER_STATE_AWAY (0x02 | UC_UNAVAILABLE) -#define JABBER_STATE_CHAT (0x04) -#define JABBER_STATE_XA (0x08 | UC_UNAVAILABLE) -#define JABBER_STATE_DND (0x10 | UC_UNAVAILABLE) -#define JABBER_STATE_ERROR (0x20 | UC_UNAVAILABLE) - -void jabber_presence_send(GaimConnection *gc, const char *state, - const char *msg); -xmlnode *jabber_presence_create(GaimStatus *status); +void jabber_presence_send(GaimConnection *gc, GaimStatus *status); +xmlnode *jabber_presence_create(JabberBuddyState state, const char *msg, int priority); void jabber_presence_parse(JabberStream *js, xmlnode *packet); void jabber_presence_subscription_set(JabberStream *js, const char *who, const char *type); -void jabber_presence_fake_to_self(JabberStream *js, const char *away_state, const char *msg); +void jabber_presence_fake_to_self(JabberStream *js, const GaimStatus *status); +void gaim_status_to_jabber(const GaimStatus *status, JabberBuddyState *state, const char **msg, int *priority); #endif /* _GAIM_JABBER_PRESENCE_H_ */ diff -r d908907d9441 -r a9fb4493ae22 src/protocols/jabber/roster.c --- a/src/protocols/jabber/roster.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/jabber/roster.c Sun Sep 05 17:10:39 2004 +0000 @@ -55,7 +55,7 @@ const char *alias, GSList *groups) { GSList *buddies, *g2, *l; - int present =0, idle=0, state=0; + int present =0; buddies = gaim_find_buddies(js->gc->account, jid); @@ -70,8 +70,6 @@ if(buddies) { present = ((GaimBuddy*)buddies->data)->present; - idle = ((GaimBuddy*)buddies->data)->idle; - state = ((GaimBuddy*)buddies->data)->uc; } while(buddies) { @@ -104,9 +102,8 @@ gaim_blist_add_group(g, NULL); } + /* XXX: this hack may need to change */ b->present = present; - b->idle = idle; - b->uc = state; gaim_blist_add_buddy(b, NULL, g, NULL); gaim_blist_alias_buddy(b, alias); @@ -269,12 +266,20 @@ jabber_roster_update(js, who, groups); my_bare_jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain); - if(!strcmp(who, my_bare_jid)) - jabber_presence_fake_to_self(js, js->gc->away_state, js->gc->away); - else if(!jb || !(jb->subscription & JABBER_SUB_TO)) + if(!strcmp(who, my_bare_jid)) { + GaimPresence *gpresence; + GaimStatus *status; + + gpresence = gaim_account_get_presence(js->gc->account); + status = gaim_presence_get_active_status(gpresence); + jabber_presence_fake_to_self(js, status); + } else if(!jb || !(jb->subscription & JABBER_SUB_TO)) { jabber_presence_subscription_set(js, who, "subscribe"); - else if((jbr =jabber_buddy_find_resource(jb, NULL))) - serv_got_update(gc, who, TRUE, 0, 0, 0, jbr->state); + } else if((jbr =jabber_buddy_find_resource(jb, NULL))) { + gaim_prpl_got_user_status(gc->account, who, + jabber_buddy_state_get_status_id(jbr->state), + "priority", jbr->priority, jbr->status ? "message" : NULL, jbr->status); + } g_free(my_bare_jid); g_free(who); diff -r d908907d9441 -r a9fb4493ae22 src/protocols/rendezvous/rendezvous.c --- a/src/protocols/rendezvous/rendezvous.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/rendezvous/rendezvous.c Sun Sep 05 17:10:39 2004 +0000 @@ -32,6 +32,7 @@ #include "mdns.h" #include "util.h" +#include "version.h" #define RENDEZVOUS_CONNECT_STEPS 2 @@ -641,7 +642,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_PROTOCOL, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ @@ -674,7 +677,6 @@ GaimAccountOption *option; char hostname[255]; - prpl_info.api_version = GAIM_PRPL_API_VERSION; prpl_info.options = OPT_PROTO_NO_PASSWORD; prpl_info.icon_spec.format = "jpeg"; prpl_info.icon_spec.min_width = 0; diff -r d908907d9441 -r a9fb4493ae22 src/protocols/toc/toc.c --- a/src/protocols/toc/toc.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/toc/toc.c Sun Sep 05 17:10:39 2004 +0000 @@ -29,6 +29,7 @@ #include "prpl.h" #include "request.h" #include "util.h" +#include "version.h" static GaimPlugin *my_protocol = NULL; @@ -2108,7 +2109,6 @@ static GaimPluginProtocolInfo prpl_info = { - GAIM_PRPL_API_VERSION, 0, NULL, /* user_splits */ NULL, /* protocol_options */ @@ -2171,7 +2171,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_PROTOCOL, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ diff -r d908907d9441 -r a9fb4493ae22 src/protocols/trepia/trepia.c --- a/src/protocols/trepia/trepia.c Sun Sep 05 06:29:51 2004 +0000 +++ b/src/protocols/trepia/trepia.c Sun Sep 05 17:10:39 2004 +0000 @@ -28,6 +28,7 @@ #include "request.h" #include "server.h" #include "util.h" +#include "version.h" #include "md5.h" #include "profile.h" @@ -1196,7 +1197,6 @@ static GaimPluginProtocolInfo prpl_info = { - GAIM_PRPL_API_VERSION, 0, NULL, /* user_splits */ NULL, /* protocol_options */ @@ -1259,7 +1259,9 @@ static GaimPluginInfo info = { - GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_MAGIC, + GAIM_MAJOR_VERSION, + GAIM_MINOR_VERSION, GAIM_PLUGIN_PROTOCOL, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */