# HG changeset patch # User Paul Aurich # Date 1266211894 0 # Node ID f2949cd7db0a57a536f50f5782e6dd20ef8be8bb # Parent 031fd1cd88df5ee3478e0d4ff84208c4face1edd jabber: Unify the JabberBuddyState functions (and briefly document them) diff -r 031fd1cd88df -r f2949cd7db0a libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Mon Feb 15 00:20:55 2010 +0000 +++ b/libpurple/protocols/jabber/buddy.c Mon Feb 15 05:31:34 2010 +0000 @@ -1908,76 +1908,55 @@ } } +static const struct { + const char *status_id; /* link to core */ + const char *show; /* The show child's cdata in a presence stanza */ + const char *readable; /* readable representation */ + JabberBuddyState state; +} jabber_statuses[] = { + { "offline", NULL, N_("Offline"), JABBER_BUDDY_STATE_UNAVAILABLE }, + { "available", NULL, N_("Available"), JABBER_BUDDY_STATE_ONLINE}, + { "freeforchat", "chat", N_("Chatty"), JABBER_BUDDY_STATE_CHAT }, + { "away", "away", N_("Away"), JABBER_BUDDY_STATE_AWAY }, + { "extended_away", "xa", N_("Extended Away"), JABBER_BUDDY_STATE_XA }, + { "dnd", "dnd", N_("Do Not Disturb"), JABBER_BUDDY_STATE_DND }, + { "error", NULL, N_("Error"), JABBER_BUDDY_STATE_ERROR } +}; const char * -jabber_buddy_state_get_name(JabberBuddyState state) +jabber_buddy_state_get_name(const 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 _("Available"); - 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"); - } + int i; + for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) + if (jabber_statuses[i].state == state) + return _(jabber_statuses[i].readable); return _("Unknown"); } -JabberBuddyState jabber_buddy_status_id_get_state(const char *id) { - if(!id) +JabberBuddyState +jabber_buddy_status_id_get_state(const char *id) +{ + int i; + if (!id) return JABBER_BUDDY_STATE_UNKNOWN; - if(!strcmp(id, "available")) - return JABBER_BUDDY_STATE_ONLINE; - if(!strcmp(id, "freeforchat")) - return JABBER_BUDDY_STATE_CHAT; - if(!strcmp(id, "away")) - return JABBER_BUDDY_STATE_AWAY; - if(!strcmp(id, "extended_away")) - 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; + + for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) + if (g_str_equal(id, jabber_statuses[i].status_id)) + return jabber_statuses[i].state; return JABBER_BUDDY_STATE_UNKNOWN; } -const struct { - const char *name; - JabberBuddyState state; -} show_state_pairs[] = { - { "available", JABBER_BUDDY_STATE_ONLINE }, - { "chat", JABBER_BUDDY_STATE_CHAT }, - { "away", JABBER_BUDDY_STATE_AWAY }, - { "xa", JABBER_BUDDY_STATE_XA }, - { "dnd", JABBER_BUDDY_STATE_DND }, - { "offline", JABBER_BUDDY_STATE_UNAVAILABLE }, - { "error", JABBER_BUDDY_STATE_ERROR }, - { NULL, JABBER_BUDDY_STATE_UNKNOWN } -}; - JabberBuddyState jabber_buddy_show_get_state(const char *id) { int i; g_return_val_if_fail(id != NULL, JABBER_BUDDY_STATE_UNKNOWN); - for (i = 0; show_state_pairs[i].name; ++i) - if (g_str_equal(id, show_state_pairs[i].name)) - return show_state_pairs[i].state; + for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) + if (g_str_equal(id, jabber_statuses[i].show)) + return jabber_statuses[i].state; purple_debug_warning("jabber", "Invalid value of presence " "attribute: %s\n", id); @@ -1988,34 +1967,21 @@ jabber_buddy_state_get_show(JabberBuddyState state) { int i; + for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) + if (state == jabber_statuses[i].state) + return jabber_statuses[i].show; - for (i = 0; show_state_pairs[i].name; ++i) - if (state == show_state_pairs[i].state) - return show_state_pairs[i].name; - -/* purple_debug_warning("jabber", "Unknown buddy state: %d\n", state); */ return NULL; } -const char *jabber_buddy_state_get_status_id(JabberBuddyState state) { - switch(state) { - case JABBER_BUDDY_STATE_CHAT: - return "freeforchat"; - case JABBER_BUDDY_STATE_AWAY: - return "away"; - case JABBER_BUDDY_STATE_XA: - return "extended_away"; - case JABBER_BUDDY_STATE_DND: - return "dnd"; - case JABBER_BUDDY_STATE_ONLINE: - return "available"; - case JABBER_BUDDY_STATE_UNKNOWN: - return "available"; - case JABBER_BUDDY_STATE_ERROR: - return "error"; - case JABBER_BUDDY_STATE_UNAVAILABLE: - return "offline"; - } +const char * +jabber_buddy_state_get_status_id(JabberBuddyState state) +{ + int i; + for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i) + if (state == jabber_statuses[i].state) + return jabber_statuses[i].status_id; + return NULL; } diff -r 031fd1cd88df -r f2949cd7db0a libpurple/protocols/jabber/buddy.h --- a/libpurple/protocols/jabber/buddy.h Mon Feb 15 00:20:55 2010 +0000 +++ b/libpurple/protocols/jabber/buddy.h Mon Feb 15 05:31:34 2010 +0000 @@ -110,10 +110,15 @@ void jabber_setup_set_info(PurplePluginAction *action); void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img); +/* state -> readable name */ const char *jabber_buddy_state_get_name(JabberBuddyState state); +/* state -> core id */ const char *jabber_buddy_state_get_status_id(JabberBuddyState state); +/* state -> show attr (for presence stanza) */ const char *jabber_buddy_state_get_show(JabberBuddyState state); +/* core id -> state */ JabberBuddyState jabber_buddy_status_id_get_state(const char *id); +/* show attr (presence stanza) -> state */ JabberBuddyState jabber_buddy_show_get_state(const char *id); void jabber_user_search(JabberStream *js, const char *directory);