| 156 |
156 |
| 157 MsnSwitchBoard * |
157 MsnSwitchBoard * |
| 158 msn_session_open_switchboard(MsnSession *session) |
158 msn_session_open_switchboard(MsnSession *session) |
| 159 { |
159 { |
| 160 MsnSwitchBoard *swboard; |
160 MsnSwitchBoard *swboard; |
| 161 |
161 MsnCmdProc *cmdproc; |
| 162 g_return_val_if_fail(session != NULL, NULL); |
162 |
| 163 |
163 g_return_val_if_fail(session != NULL, NULL); |
| 164 if (msn_servconn_send_command(session->notification_conn, "XFR", "SB") < 0) |
164 |
| 165 { |
165 cmdproc = session->notification_conn->cmdproc; |
| |
166 |
| |
167 msn_cmdproc_send(cmdproc, "XFR", "%s", "SB"); |
| |
168 |
| |
169 if (cmdproc->error) |
| 166 return NULL; |
170 return NULL; |
| 167 } |
|
| 168 |
171 |
| 169 swboard = msn_switchboard_new(session); |
172 swboard = msn_switchboard_new(session); |
| 170 |
173 |
| 171 return swboard; |
174 return swboard; |
| 172 } |
175 } |
| 173 |
176 |
| 174 gboolean |
177 gboolean |
| 175 msn_session_change_status(MsnSession *session, const char *state) |
178 msn_session_change_status(MsnSession *session, const char *state) |
| 176 { |
179 { |
| 177 MsnUser *user = session->user; |
180 MsnCmdProc *cmdproc; |
| |
181 MsnUser *user; |
| 178 MsnObject *msnobj; |
182 MsnObject *msnobj; |
| 179 char buf[MSN_BUF_LEN]; |
|
| 180 |
183 |
| 181 g_return_val_if_fail(session != NULL, FALSE); |
184 g_return_val_if_fail(session != NULL, FALSE); |
| 182 g_return_val_if_fail(state != NULL, FALSE); |
185 g_return_val_if_fail(state != NULL, FALSE); |
| 183 |
186 |
| |
187 user = session->user; |
| 184 msnobj = msn_user_get_object(user); |
188 msnobj = msn_user_get_object(user); |
| 185 |
189 |
| 186 if (state != session->away_state) |
190 if (state != session->away_state) |
| 187 { |
191 { |
| 188 if (session->away_state != NULL) |
192 if (session->away_state != NULL) |
| 189 g_free(session->away_state); |
193 g_free(session->away_state); |
| 190 |
194 |
| 191 session->away_state = g_strdup(state); |
195 session->away_state = g_strdup(state); |
| 192 } |
196 } |
| 193 |
197 |
| |
198 cmdproc = session->notification_conn->cmdproc; |
| |
199 |
| 194 if (msnobj == NULL) |
200 if (msnobj == NULL) |
| 195 g_snprintf(buf, sizeof(buf), "%s %d", state, MSN_CLIENT_ID); |
201 { |
| |
202 msn_cmdproc_send(cmdproc, "CHG", "%s %d", state, MSN_CLIENT_ID); |
| |
203 } |
| 196 else |
204 else |
| 197 { |
205 { |
| 198 char *msnobj_str = msn_object_to_string(msnobj); |
206 char *msnobj_str = msn_object_to_string(msnobj); |
| 199 |
207 |
| 200 g_snprintf(buf, sizeof(buf), "%s %d %s", state, MSN_CLIENT_ID, |
208 msn_cmdproc_send(cmdproc, "CHG", "%s %d %s", state, MSN_CLIENT_ID, |
| 201 gaim_url_encode(msnobj_str)); |
209 gaim_url_encode(msnobj_str)); |
| 202 |
210 |
| 203 g_free(msnobj_str); |
211 g_free(msnobj_str); |
| 204 } |
|
| 205 |
|
| 206 if (!msn_servconn_send_command(session->notification_conn, "CHG", buf)) |
|
| 207 { |
|
| 208 gaim_connection_error(gaim_account_get_connection(session->account), |
|
| 209 _("Write error")); |
|
| 210 |
|
| 211 return FALSE; |
|
| 212 } |
212 } |
| 213 |
213 |
| 214 return TRUE; |
214 return TRUE; |
| 215 } |
215 } |
| 216 |
216 |