comparison src/protocols/msn/session.c @ 10621:fe919915fceb

[gaim-migrate @ 12090] This should fix the MSN problems with having multiple switchboards associated with the same conversation / buddy. committer: Tailor Script <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Tue, 22 Feb 2005 15:16:38 +0000
parents f52ab405f1ab
children bf5e48215158
comparison
equal deleted inserted replaced
10620:17daac7cea91 10621:fe919915fceb
43 43
44 session->user = msn_user_new(session->userlist, 44 session->user = msn_user_new(session->userlist,
45 gaim_account_get_username(account), NULL); 45 gaim_account_get_username(account), NULL);
46 46
47 session->protocol_ver = 9; 47 session->protocol_ver = 9;
48 session->conv_seq = 1;
48 49
49 return session; 50 return session;
50 } 51 }
51 52
52 void 53 void
142 msn_notification_close(session->notification); 143 msn_notification_close(session->notification);
143 } 144 }
144 145
145 /* TODO: This must go away when conversation is redesigned */ 146 /* TODO: This must go away when conversation is redesigned */
146 MsnSwitchBoard * 147 MsnSwitchBoard *
147 msn_session_find_swboard(MsnSession *session, const char *username, 148 msn_session_find_swboard(MsnSession *session, const char *username)
148 MsnSBFlag flag)
149 { 149 {
150 GList *l; 150 GList *l;
151 151
152 g_return_val_if_fail(session != NULL, NULL); 152 g_return_val_if_fail(session != NULL, NULL);
153 g_return_val_if_fail(username != NULL, NULL); 153 g_return_val_if_fail(username != NULL, NULL);
156 { 156 {
157 MsnSwitchBoard *swboard; 157 MsnSwitchBoard *swboard;
158 158
159 swboard = l->data; 159 swboard = l->data;
160 160
161 if ((swboard->im_user != NULL) && 161 if ((swboard->im_user != NULL) && !strcmp(username, swboard->im_user))
162 !strcmp(username, swboard->im_user) && (swboard->flag & flag))
163 return swboard; 162 return swboard;
164 } 163 }
165 164
166 return NULL; 165 return NULL;
167 } 166 }
168 167
169 MsnSwitchBoard * 168 MsnSwitchBoard *
170 msn_session_find_swboard_with_id(const MsnSession *session, int chat_id, 169 msn_session_find_swboard_with_conv(MsnSession *session, GaimConversation *conv)
171 MsnSBFlag flag) 170 {
171 GList *l;
172
173 g_return_val_if_fail(session != NULL, NULL);
174 g_return_val_if_fail(conv != NULL, NULL);
175
176 for (l = session->switches; l != NULL; l = l->next)
177 {
178 MsnSwitchBoard *swboard;
179
180 swboard = l->data;
181
182 if (swboard->conv == conv)
183 return swboard;
184 }
185
186 return NULL;
187 }
188
189 MsnSwitchBoard *
190 msn_session_find_swboard_with_id(const MsnSession *session, int chat_id)
172 { 191 {
173 GList *l; 192 GList *l;
174 193
175 g_return_val_if_fail(session != NULL, NULL); 194 g_return_val_if_fail(session != NULL, NULL);
176 g_return_val_if_fail(chat_id >= 0, NULL); 195 g_return_val_if_fail(chat_id >= 0, NULL);
179 { 198 {
180 MsnSwitchBoard *swboard; 199 MsnSwitchBoard *swboard;
181 200
182 swboard = l->data; 201 swboard = l->data;
183 202
184 if ((swboard->chat_id == chat_id) && (swboard->flag & flag)) 203 if (swboard->chat_id == chat_id)
185 return swboard; 204 return swboard;
186 } 205 }
187 206
188 return NULL; 207 return NULL;
189 } 208 }
190 209
191 MsnSwitchBoard * 210 MsnSwitchBoard *
192 msn_session_get_swboard(MsnSession *session, const char *username, 211 msn_session_get_swboard(MsnSession *session, const char *username)
193 MsnSBFlag flag)
194 { 212 {
195 MsnSwitchBoard *swboard; 213 MsnSwitchBoard *swboard;
196 214
197 swboard = msn_session_find_swboard(session, username, flag); 215 swboard = msn_session_find_swboard(session, username);
198 216
199 if (swboard == NULL) 217 if (swboard == NULL)
200 { 218 {
201 swboard = msn_switchboard_new(session); 219 swboard = msn_switchboard_new(session);
202 swboard->im_user = g_strdup(username); 220 swboard->im_user = g_strdup(username);
203 swboard->flag = flag;
204 msn_switchboard_request(swboard); 221 msn_switchboard_request(swboard);
205 msn_switchboard_request_add_user(swboard, username); 222 msn_switchboard_request_add_user(swboard, username);
206 } 223 }
207 224
208 return swboard; 225 return swboard;