# HG changeset patch # User Stu Tomlinson # Date 1113056927 0 # Node ID 39b5a5e30f477cee2e72895569d64361b6faa44a # Parent 8002e95c08099f20cec1d93751185e41575f2662 [gaim-migrate @ 12447] Make SILC able to connect with the new status stuff committer: Tailor Script diff -r 8002e95c0809 -r 39b5a5e30f47 src/protocols/silc/silc.c --- a/src/protocols/silc/silc.c Sat Apr 09 14:12:38 2005 +0000 +++ b/src/protocols/silc/silc.c Sat Apr 09 14:28:47 2005 +0000 @@ -43,9 +43,11 @@ GaimStatusType *type; GList *types = NULL; - type = gaim_status_type_new(GAIM_STATUS_OFFLINE, SILCGAIM_STATUS_ID_OFFLINE, _("Offline"), FALSE); + type = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, SILCGAIM_STATUS_ID_OFFLINE, _("Offline"), FALSE, FALSE, FALSE); types = g_list_append(types, type); - type = gaim_status_type_new(GAIM_STATUS_ONLINE, SILCGAIM_STATUS_ID_ONLINE, _("Online"), FALSE); + type = gaim_status_type_new_full(GAIM_STATUS_ONLINE, SILCGAIM_STATUS_ID_ONLINE, _("Online"), FALSE, FALSE, FALSE); + types = g_list_append(types, type); + type = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE, SILCGAIM_STATUS_ID_AVAILABLE, _("Available"), FALSE, TRUE, FALSE); types = g_list_append(types, type); type = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE, SILCGAIM_STATUS_ID_HYPER, _("Hyper Active"), FALSE, TRUE, FALSE); types = g_list_append(types, type); @@ -65,17 +67,29 @@ silcgaim_set_status(GaimAccount *account, GaimStatus *status) { GaimConnection *gc = gaim_account_get_connection(account); - SilcGaim sg; + SilcGaim sg = NULL; SilcUInt32 mode; SilcBuffer idp; unsigned char mb[4]; const char *state; - g_return_if_fail(gc != NULL); + if (gc != NULL) + sg = gc->proto_data; + + if (status == NULL) + return; + + state = gaim_status_get_id(status); - sg = gc->proto_data; + if (state == NULL) + return; - if ((status == NULL) || (sg->conn == NULL)) + if (strcmp(state, "offline") && !gc) { + gaim_account_connect(account); + return; + } + + if ((sg == NULL) || (sg->conn == NULL)) return; mode = sg->conn->local_entry->mode; @@ -85,11 +99,6 @@ SILC_UMODE_INDISPOSED | SILC_UMODE_PAGE); - state = gaim_status_get_id(status); - - if (state == NULL) - return; - if (!strcmp(state, "hyper")) mode |= SILC_UMODE_HYPER; else if (!strcmp(state, "away")) diff -r 8002e95c0809 -r 39b5a5e30f47 src/protocols/silc/silcgaim.h --- a/src/protocols/silc/silcgaim.h Sat Apr 09 14:12:38 2005 +0000 +++ b/src/protocols/silc/silcgaim.h Sat Apr 09 14:28:47 2005 +0000 @@ -48,6 +48,7 @@ /* Status IDs */ #define SILCGAIM_STATUS_ID_OFFLINE "offline" #define SILCGAIM_STATUS_ID_ONLINE "online" +#define SILCGAIM_STATUS_ID_AVAILABLE "available" #define SILCGAIM_STATUS_ID_HYPER "hyper" #define SILCGAIM_STATUS_ID_AWAY "away" #define SILCGAIM_STATUS_ID_BUSY "busy"