Mercurial > pidgin
diff src/protocols/msn/notification.c @ 10451:92d4a25fd33c
[gaim-migrate @ 11717]
This is patch 1090620 from Felipe Contreras to improve the handling of the
Individuals group on MSN and better buddy updates (modified by me to work in
HEAD)
Also included is my fix for bug 1090087 "MSN Groupchat Double Invite Crash",
a few spelling corrections, and make some more strings translatable.
committer: Tailor Script <tailor@pidgin.im>
| author | Stu Tomlinson <stu@nosnilmot.com> |
|---|---|
| date | Thu, 30 Dec 2004 15:55:19 +0000 |
| parents | e5455f1dc9b6 |
| children | e1c98422f4df |
line wrap: on
line diff
--- a/src/protocols/msn/notification.c Thu Dec 30 06:26:53 2004 +0000 +++ b/src/protocols/msn/notification.c Thu Dec 30 15:55:19 2004 +0000 @@ -37,6 +37,50 @@ static MsnTable *cbs_table; /************************************************************************** + * Util + **************************************************************************/ + +static void +group_error_helper(MsnSession *session, const char *msg, int group_id, int error) +{ + GaimAccount *account; + GaimConnection *gc; + char *reason = NULL; + char *title = NULL; + + account = session->account; + gc = gaim_account_get_connection(account); + + if (error == 224) + { + if (group_id == 0) + { + return; + } + else + { + const char *group_name; + group_name = + msn_userlist_find_group_name(session->userlist, + group_id); + reason = g_strdup_printf(_("%s is not a valid group."), + group_name); + } + } + else + { + reason = g_strdup(_("Unknown error.")); + } + + title = g_strdup_printf(_("%s on %s (%s)"), msg, + gaim_account_get_username(account), + gaim_account_get_protocol_name(account)); + gaim_notify_error(gc, NULL, title, reason); + g_free(title); + g_free(reason); +} + +/************************************************************************** * Login **************************************************************************/ @@ -331,6 +375,7 @@ group_id = -1; msn_got_add_user(session, user, list_id, group_id); + msn_user_update(user); } static void @@ -353,15 +398,15 @@ passport = params[1]; if (!strcmp(list, "FL")) - msg = g_strdup_printf("Unable to add user on %s (%s)", + msg = g_strdup_printf(_("Unable to add user on %s (%s)"), gaim_account_get_username(account), gaim_account_get_protocol_name(account)); else if (!strcmp(list, "BL")) - msg = g_strdup_printf("Unable to block user on %s (%s)", + msg = g_strdup_printf(_("Unable to block user on %s (%s)"), gaim_account_get_username(account), gaim_account_get_protocol_name(account)); else if (!strcmp(list, "AL")) - msg = g_strdup_printf("Unable to permit user on %s (%s)", + msg = g_strdup_printf(_("Unable to permit user on %s (%s)"), gaim_account_get_username(account), gaim_account_get_protocol_name(account)); @@ -369,8 +414,8 @@ { if (error == 210) { - reason = g_strdup_printf("%s could not be added because " - "your buddy list is full.", passport); + reason = g_strdup_printf(_("%s could not be added because " + "your buddy list is full."), passport); } } @@ -378,12 +423,12 @@ { if (error == 208) { - reason = g_strdup_printf("%s is not a valid passport account.", + reason = g_strdup_printf(_("%s is not a valid passport account."), passport); } else { - reason = g_strdup_printf("Unknown error."); + reason = g_strdup_printf(_("Unknown error.")); } } @@ -446,13 +491,13 @@ static void fln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { - GaimAccount *account; - MsnSlpLink *slplink; + MsnUser *user; - account = cmdproc->session->account; + user = msn_userlist_find_user(cmdproc->session->userlist, cmd->params[0]); - gaim_prpl_got_user_status(account, cmd->params[0], "offline", NULL); + user->status = "offline"; + msn_user_update(user); slplink = msn_session_find_slplink(cmdproc->session, cmd->params[0]); @@ -461,10 +506,6 @@ } -/* - * XXX - There is a bit of code duplication between this function - * and nln_cmd. Someone should do something about that. - */ static void iln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { @@ -473,7 +514,7 @@ GaimConnection *gc; MsnUser *user; MsnObject *msnobj; - const char *status, *state, *passport, *friendly; + const char *state, *passport, *friendly; session = cmdproc->session; account = session->account; @@ -485,7 +526,6 @@ user = msn_userlist_find_user(session->userlist, passport); - /* serv_got_nick(gc, passport, friendly); */ serv_got_alias(gc, passport, friendly); msn_user_set_friendly_name(user, friendly); @@ -496,30 +536,8 @@ msn_user_set_object(user, msnobj); } - /* XXX - What does this do????? - if ((b = gaim_find_buddy(account, passport)) != NULL) - status |= ((((b->uc) >> 1) & 0xF0) << 1); - */ - - if (!g_ascii_strcasecmp(state, "BSY")) - status = "busy"; - else if (!g_ascii_strcasecmp(state, "BRB")) - status = "brb"; - else if (!g_ascii_strcasecmp(state, "AWY")) - status = "away"; - else if (!g_ascii_strcasecmp(state, "PHN")) - status = "phone"; - else if (!g_ascii_strcasecmp(state, "LUN")) - status = "lunch"; - else - status = "available"; - - gaim_prpl_got_user_status(account, passport, status, NULL); - - if (!g_ascii_strcasecmp(state, "IDL")) - gaim_prpl_got_user_idle(account, passport, TRUE, -1); - else - gaim_prpl_got_user_idle(account, passport, FALSE, 0); + msn_user_set_state(user, state); + msn_user_update(user); } static void @@ -545,10 +563,7 @@ GaimConnection *gc; MsnUser *user; MsnObject *msnobj; - const char *state; - const char *passport; - const char *friendly; - const char *status; + const char *state, *passport, *friendly; session = cmdproc->session; account = session->account; @@ -560,7 +575,6 @@ user = msn_userlist_find_user(session->userlist, passport); - /* serv_got_nick(gc, passport, friendly); */ serv_got_alias(gc, passport, friendly); msn_user_set_friendly_name(user, friendly); @@ -579,25 +593,8 @@ } } - if (!g_ascii_strcasecmp(state, "BSY")) - status = "busy"; - else if (!g_ascii_strcasecmp(state, "BRB")) - status = "brb"; - else if (!g_ascii_strcasecmp(state, "AWY")) - status = "away"; - else if (!g_ascii_strcasecmp(state, "PHN")) - status = "phone"; - else if (!g_ascii_strcasecmp(state, "LUN")) - status = "lunch"; - else - status = "available"; - - gaim_prpl_got_user_status(account, passport, status, NULL); - - if (!g_ascii_strcasecmp(state, "IDL")) - gaim_prpl_got_user_idle(account, passport, TRUE, -1); - else - gaim_prpl_got_user_idle(account, passport, FALSE, 0); + msn_user_set_state(user, state); + msn_user_update(user); } static void @@ -646,7 +643,7 @@ static void rea_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { - /* TODO: This might be with us too */ + /* TODO: This might be for us too */ MsnSession *session; GaimConnection *gc; @@ -674,6 +671,21 @@ } static void +reg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) +{ + int group_id; + char **params; + + params = g_strsplit(trans->params, " ", 0); + + group_id = atoi(params[0]); + + group_error_helper(cmdproc->session, _("Unable to rename group"), group_id, error); + + g_strfreev(params); +} + +static void rem_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session; @@ -698,6 +710,7 @@ group_id = -1; msn_got_rem_user(session, user, list_id, group_id); + msn_user_update(user); } static void @@ -713,6 +726,21 @@ } static void +rmg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) +{ + int group_id; + char **params; + + params = g_strsplit(trans->params, " ", 0); + + group_id = atoi(params[0]); + + group_error_helper(cmdproc->session, "Unable to delete group", group_id, error); + + g_strfreev(params); +} + +static void syn_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session; @@ -1276,6 +1304,8 @@ msn_table_add_cmd(cbs_table, "fallback", "XFR", xfr_cmd); msn_table_add_error(cbs_table, "ADD", add_error); + msn_table_add_error(cbs_table, "REG", reg_error); + msn_table_add_error(cbs_table, "RMG", rmg_error); /* msn_table_add_error(cbs_table, "REA", rea_error); */ /* I received a '500' error from the notification server just now.
