| 1 /** |
|
| 2 * @file state.c State functions and definitions |
|
| 3 * |
|
| 4 * gaim |
|
| 5 * |
|
| 6 * Gaim is the legal property of its developers, whose names are too numerous |
|
| 7 * to list here. Please refer to the COPYRIGHT file distributed with this |
|
| 8 * source distribution. |
|
| 9 * |
|
| 10 * This program is free software; you can redistribute it and/or modify |
|
| 11 * it under the terms of the GNU General Public License as published by |
|
| 12 * the Free Software Foundation; either version 2 of the License, or |
|
| 13 * (at your option) any later version. |
|
| 14 * |
|
| 15 * This program is distributed in the hope that it will be useful, |
|
| 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 18 * GNU General Public License for more details. |
|
| 19 * |
|
| 20 * You should have received a copy of the GNU General Public License |
|
| 21 * along with this program; if not, write to the Free Software |
|
| 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
| 23 */ |
|
| 24 #include "msn.h" |
|
| 25 #include "state.h" |
|
| 26 |
|
| 27 static const char *away_text[] = |
|
| 28 { |
|
| 29 N_("Available"), |
|
| 30 N_("Available"), |
|
| 31 N_("Busy"), |
|
| 32 N_("Idle"), |
|
| 33 N_("Be Right Back"), |
|
| 34 N_("Away From Computer"), |
|
| 35 N_("On The Phone"), |
|
| 36 N_("Out To Lunch"), |
|
| 37 N_("Available"), |
|
| 38 N_("Available") |
|
| 39 }; |
|
| 40 |
|
| 41 void |
|
| 42 msn_change_status(MsnSession *session) |
|
| 43 { |
|
| 44 GaimAccount *account = session->account; |
|
| 45 MsnCmdProc *cmdproc; |
|
| 46 MsnUser *user; |
|
| 47 MsnObject *msnobj; |
|
| 48 const char *state_text; |
|
| 49 |
|
| 50 g_return_if_fail(session != NULL); |
|
| 51 g_return_if_fail(session->notification != NULL); |
|
| 52 |
|
| 53 cmdproc = session->notification->cmdproc; |
|
| 54 user = session->user; |
|
| 55 state_text = msn_state_get_text(msn_state_from_account(account)); |
|
| 56 |
|
| 57 /* If we're not logged in yet, don't send the status to the server, |
|
| 58 * it will be sent when login completes |
|
| 59 */ |
|
| 60 if (!session->logged_in) |
|
| 61 return; |
|
| 62 |
|
| 63 msnobj = msn_user_get_object(user); |
|
| 64 |
|
| 65 if (msnobj == NULL) |
|
| 66 { |
|
| 67 msn_cmdproc_send(cmdproc, "CHG", "%s %d", state_text, |
|
| 68 MSN_CLIENT_ID); |
|
| 69 } |
|
| 70 else |
|
| 71 { |
|
| 72 char *msnobj_str; |
|
| 73 |
|
| 74 msnobj_str = msn_object_to_string(msnobj); |
|
| 75 |
|
| 76 msn_cmdproc_send(cmdproc, "CHG", "%s %d %s", state_text, |
|
| 77 MSN_CLIENT_ID, gaim_url_encode(msnobj_str)); |
|
| 78 |
|
| 79 g_free(msnobj_str); |
|
| 80 } |
|
| 81 } |
|
| 82 |
|
| 83 const char * |
|
| 84 msn_away_get_text(MsnAwayType type) |
|
| 85 { |
|
| 86 g_return_val_if_fail(type <= MSN_HIDDEN, NULL); |
|
| 87 |
|
| 88 return _(away_text[type]); |
|
| 89 } |
|
| 90 |
|
| 91 const char * |
|
| 92 msn_state_get_text(MsnAwayType state) |
|
| 93 { |
|
| 94 static char *status_text[] = |
|
| 95 { "NLN", "NLN", "BSY", "IDL", "BRB", "AWY", "PHN", "LUN", "HDN", "HDN" }; |
|
| 96 |
|
| 97 return status_text[state]; |
|
| 98 } |
|
| 99 |
|
| 100 MsnAwayType |
|
| 101 msn_state_from_account(GaimAccount *account) |
|
| 102 { |
|
| 103 MsnAwayType msnstatus; |
|
| 104 GaimPresence *presence; |
|
| 105 GaimStatus *status; |
|
| 106 const char *status_id; |
|
| 107 |
|
| 108 presence = gaim_account_get_presence(account); |
|
| 109 status = gaim_presence_get_active_status(presence); |
|
| 110 status_id = gaim_status_get_id(status); |
|
| 111 |
|
| 112 if (!strcmp(status_id, "away")) |
|
| 113 msnstatus = MSN_AWAY; |
|
| 114 else if (!strcmp(status_id, "brb")) |
|
| 115 msnstatus = MSN_BRB; |
|
| 116 else if (!strcmp(status_id, "busy")) |
|
| 117 msnstatus = MSN_BUSY; |
|
| 118 else if (!strcmp(status_id, "phone")) |
|
| 119 msnstatus = MSN_PHONE; |
|
| 120 else if (!strcmp(status_id, "lunch")) |
|
| 121 msnstatus = MSN_LUNCH; |
|
| 122 else if (!strcmp(status_id, "invisible")) |
|
| 123 msnstatus = MSN_HIDDEN; |
|
| 124 else |
|
| 125 msnstatus = MSN_ONLINE; |
|
| 126 |
|
| 127 if ((msnstatus == MSN_ONLINE) && gaim_presence_is_idle(presence)) |
|
| 128 msnstatus = MSN_IDLE; |
|
| 129 |
|
| 130 return msnstatus; |
|
| 131 } |
|