src/protocols/msn/state.c

branch
gaim
changeset 20470
77693555855f
parent 13071
b98e72d4089a
parent 20469
b2836a24d81e
child 20471
1966704b3e42
equal deleted inserted replaced
13071:b98e72d4089a 20470:77693555855f
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 }

mercurial