Mercurial > pidgin
annotate src/protocols/msn/session.c @ 10234:d672afd04dcd
[gaim-migrate @ 11369]
"text replacement cosmetic change," patch 705648 from
Craig Slusher. This was submitted on 2003-03-18 and
it still basically applies. Neat.
"This just changes the way that the plugin reacts to the
'Add' button being clicked. After the replacement is
placed into the list, the text boxes are cleared and
the 'You type:' box gains focus"
committer: Tailor Script <tailor@pidgin.im>
| author | Mark Doliner <mark@kingant.net> |
|---|---|
| date | Mon, 22 Nov 2004 05:36:09 +0000 |
| parents | ecf3ce2e2ab1 |
| children | d9468bd22b7c |
| rev | line source |
|---|---|
| 5309 | 1 /** |
| 2 * @file session.c MSN session functions | |
| 3 * | |
| 4 * gaim | |
| 5 * | |
|
9198
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
6 * Gaim is the legal property of its developers, whose names are too numerous |
|
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
7 * to list here. Please refer to the COPYRIGHT file distributed with this |
|
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
8 * source distribution. |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
9 * |
| 5309 | 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 "session.h" | |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
26 #include "notification.h" |
| 5309 | 27 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
28 #include "slplink.h" |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
29 |
| 10044 | 30 #include "dialog.h" |
| 31 | |
| 5309 | 32 MsnSession * |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
33 msn_session_new(GaimAccount *account, const char *host, int port, |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
34 gboolean http_method) |
| 5309 | 35 { |
| 36 MsnSession *session; | |
| 37 | |
| 38 g_return_val_if_fail(account != NULL, NULL); | |
| 39 | |
| 40 session = g_new0(MsnSession, 1); | |
| 41 | |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
42 session->account = account; |
|
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
43 session->dispatch_host = g_strdup(host); |
|
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
44 session->dispatch_port = port; |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
45 session->http_method = http_method; |
| 5309 | 46 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
47 session->notification = msn_notification_new(session); |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
48 session->userlist = msn_userlist_new(session); |
| 10044 | 49 session->sync_userlist = msn_userlist_new(session); |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
50 |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
51 session->protocol_ver = 9; |
|
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
52 |
| 5309 | 53 return session; |
| 54 } | |
| 55 | |
| 56 void | |
| 57 msn_session_destroy(MsnSession *session) | |
| 58 { | |
| 59 g_return_if_fail(session != NULL); | |
| 60 | |
| 61 if (session->connected) | |
| 62 msn_session_disconnect(session); | |
| 63 | |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
64 if (session->dispatch_host != NULL) |
|
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
65 g_free(session->dispatch_host); |
| 5309 | 66 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
67 if (session->notification != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
68 msn_notification_destroy(session->notification); |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
69 |
| 5309 | 70 while (session->switches != NULL) |
| 71 msn_switchboard_destroy(session->switches->data); | |
| 72 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
73 while (session->slplinks != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
74 msn_slplink_destroy(session->slplinks->data); |
| 5309 | 75 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
76 msn_userlist_destroy(session->userlist); |
| 5309 | 77 |
| 10044 | 78 if (session->sync_userlist != NULL) |
| 79 msn_userlist_destroy(session->sync_userlist); | |
| 80 | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
81 if (session->passport_info.kv != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
82 g_free(session->passport_info.kv); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
83 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
84 if (session->passport_info.sid != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
85 g_free(session->passport_info.sid); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
86 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
87 if (session->passport_info.mspauth != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
88 g_free(session->passport_info.mspauth); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
89 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
90 if (session->passport_info.file != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
91 g_free(session->passport_info.file); |
| 5427 | 92 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
93 if (session->sync != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
94 msn_sync_destroy(session->sync); |
|
7590
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
95 |
|
8171
d0ba2f7b40e7
[gaim-migrate @ 8884]
Christian Hammond <chipx86@chipx86.com>
parents:
7590
diff
changeset
|
96 if (session->nexus != NULL) |
|
d0ba2f7b40e7
[gaim-migrate @ 8884]
Christian Hammond <chipx86@chipx86.com>
parents:
7590
diff
changeset
|
97 msn_nexus_destroy(session->nexus); |
|
d0ba2f7b40e7
[gaim-migrate @ 8884]
Christian Hammond <chipx86@chipx86.com>
parents:
7590
diff
changeset
|
98 |
| 5309 | 99 g_free(session); |
| 100 } | |
| 101 | |
| 102 gboolean | |
| 103 msn_session_connect(MsnSession *session) | |
| 104 { | |
| 105 g_return_val_if_fail(session != NULL, FALSE); | |
| 106 g_return_val_if_fail(!session->connected, TRUE); | |
| 107 | |
| 108 session->connected = TRUE; | |
| 109 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
110 if (msn_notification_connect(session->notification, |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
111 session->dispatch_host, |
|
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
112 session->dispatch_port)) |
|
8831
ffecda0c1f45
[gaim-migrate @ 9595]
Christian Hammond <chipx86@chipx86.com>
parents:
8808
diff
changeset
|
113 { |
|
ffecda0c1f45
[gaim-migrate @ 9595]
Christian Hammond <chipx86@chipx86.com>
parents:
8808
diff
changeset
|
114 return TRUE; |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
115 } |
| 5309 | 116 |
| 117 return FALSE; | |
| 118 } | |
| 119 | |
| 120 void | |
| 121 msn_session_disconnect(MsnSession *session) | |
| 122 { | |
| 123 g_return_if_fail(session != NULL); | |
| 124 g_return_if_fail(session->connected); | |
| 125 | |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
126 while (session->switches != NULL) |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
127 msn_switchboard_destroy(session->switches->data); |
| 5309 | 128 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
129 if (session->notification != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
130 msn_notification_disconnect(session->notification); |
| 5309 | 131 } |
| 132 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
133 /* TODO: This must go away when conversation is redesigned */ |
| 5309 | 134 MsnSwitchBoard * |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
135 msn_session_find_swboard(MsnSession *session, const char *username) |
| 5309 | 136 { |
| 137 GList *l; | |
| 138 | |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
139 g_return_val_if_fail(session != NULL, NULL); |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
140 g_return_val_if_fail(username != NULL, NULL); |
| 5309 | 141 |
|
8499
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8475
diff
changeset
|
142 for (l = session->switches; l != NULL; l = l->next) |
|
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8475
diff
changeset
|
143 { |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
144 MsnSwitchBoard *swboard; |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
145 |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
146 swboard = l->data; |
| 5309 | 147 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
148 if (swboard->im_user != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
149 if (!strcmp(username, swboard->im_user)) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
150 return swboard; |
| 5309 | 151 } |
| 152 | |
| 153 return NULL; | |
| 154 } | |
| 155 | |
| 156 MsnSwitchBoard * | |
| 157 msn_session_find_switch_with_id(const MsnSession *session, int chat_id) | |
| 158 { | |
| 159 GList *l; | |
| 160 | |
| 161 g_return_val_if_fail(session != NULL, NULL); | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
162 g_return_val_if_fail(chat_id >= 0, NULL); |
| 5309 | 163 |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
164 for (l = session->switches; l != NULL; l = l->next) |
|
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
165 { |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
166 MsnSwitchBoard *swboard; |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
167 |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
168 swboard = l->data; |
| 5309 | 169 |
| 170 if (swboard->chat_id == chat_id) | |
| 171 return swboard; | |
| 172 } | |
| 173 | |
| 174 return NULL; | |
| 175 } | |
| 176 | |
| 177 MsnSwitchBoard * | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
178 msn_session_get_swboard(MsnSession *session, const char *username) |
| 5309 | 179 { |
| 180 MsnSwitchBoard *swboard; | |
| 181 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
182 swboard = msn_session_find_swboard(session, username); |
| 5309 | 183 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
184 if (swboard == NULL) |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
185 { |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
186 swboard = msn_switchboard_new(session); |
| 10225 | 187 swboard->im_user = g_strdup(username); |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
188 msn_switchboard_request(swboard); |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
189 msn_switchboard_request_add_user(swboard, username); |
| 5309 | 190 } |
| 191 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
192 return swboard; |
| 5309 | 193 } |
| 10044 | 194 |
| 195 static void | |
| 196 msn_session_sync_users(MsnSession *session) | |
| 197 { | |
| 198 GList *l; | |
| 199 | |
| 200 l = session->sync_userlist->users; | |
| 201 | |
| 202 while (l != NULL) | |
| 203 { | |
| 204 MsnUser *local_user; | |
| 205 | |
| 206 local_user = (MsnUser *)l->data; | |
| 207 | |
| 208 if (local_user->passport != NULL) | |
| 209 { | |
| 210 MsnUser *remote_user; | |
| 211 | |
| 212 remote_user = msn_userlist_find_user(session->userlist, | |
| 213 local_user->passport); | |
| 214 | |
| 215 if (remote_user == NULL || | |
| 216 ((local_user->list_op & ( 1 << MSN_LIST_FL)) && | |
| 217 !(remote_user->list_op & ( 1 << MSN_LIST_FL)))) | |
| 218 { | |
| 219 /* The user was not on the server list */ | |
| 220 msn_show_sync_issue(session, local_user->passport, NULL); | |
| 221 } | |
| 222 else | |
| 223 { | |
| 224 GList *l; | |
| 225 | |
| 226 for (l = local_user->group_ids; l != NULL; l = l->next) | |
| 227 { | |
| 228 const char *group_name; | |
| 229 int gid; | |
| 230 gboolean found = FALSE; | |
| 231 GList *l2; | |
| 232 | |
| 233 group_name = | |
| 234 msn_userlist_find_group_name(local_user->userlist, | |
| 10112 | 235 GPOINTER_TO_INT(l->data)); |
| 10044 | 236 |
| 237 gid = msn_userlist_find_group_id(remote_user->userlist, | |
| 238 group_name); | |
| 239 | |
| 240 for (l2 = remote_user->group_ids; l2 != NULL; l2 = l2->next) | |
| 241 { | |
| 10112 | 242 if (GPOINTER_TO_INT(l2->data) == gid) |
| 10044 | 243 { |
| 244 found = TRUE; | |
| 245 break; | |
| 246 } | |
| 247 } | |
| 248 | |
| 249 if (!found) | |
| 250 { | |
| 251 /* The user was not on that group on the server list */ | |
| 252 msn_show_sync_issue(session, local_user->passport, | |
| 253 group_name); | |
| 254 } | |
| 255 } | |
| 256 } | |
| 257 } | |
| 258 | |
| 259 l = l->next; | |
| 260 } | |
| 261 | |
| 262 msn_userlist_destroy(session->sync_userlist); | |
| 263 session->sync_userlist = NULL; | |
| 264 } | |
| 265 | |
| 266 void | |
| 267 msn_session_finish_login(MsnSession *session) | |
| 268 { | |
| 269 GaimAccount *account; | |
| 270 GaimConnection *gc; | |
| 271 | |
| 272 account = session->account; | |
| 273 gc = gaim_account_get_connection(account); | |
| 274 | |
| 275 msn_user_set_buddy_icon(session->user, | |
| 276 gaim_account_get_buddy_icon(session->account)); | |
| 277 | |
| 278 msn_change_status(session, MSN_ONLINE); | |
| 279 | |
| 280 gaim_connection_set_state(gc, GAIM_CONNECTED); | |
| 281 session->logged_in = TRUE; | |
| 282 | |
| 283 /* Sync users */ | |
| 284 msn_session_sync_users(session); | |
| 285 | |
| 286 serv_finish_login(gc); | |
| 287 } |
