Mercurial > pidgin
annotate src/protocols/msn/user.c @ 5516:dcfe83cdfd42
[gaim-migrate @ 5915]
This fixes http://sourceforge.net/tracker/index.php?func=detail&aid=739709&group_id=235&atid=100235
...which says that, when using a locale where "None" was i10ned to something
other than "None," a strcmp would fail and result in infinite recursion
when signing on. This eliminates that.
I'd like to point out that I _think_ when the sorting methods are i10ned,
and you have a method set, and you switch locales, your sorting method will
get reset back to None. If anyone wants to verify and/or fix that, feel
free.
committer: Tailor Script <tailor@pidgin.im>
| author | Mark Doliner <mark@kingant.net> |
|---|---|
| date | Sun, 25 May 2003 19:31:09 +0000 |
| parents | ad9887c91a59 |
| children | bf2a7a7b739d |
| rev | line source |
|---|---|
| 5309 | 1 /** |
| 2 * @file user.c User functions | |
| 3 * | |
| 4 * gaim | |
| 5 * | |
| 6 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> | |
| 7 * | |
| 8 * This program is free software; you can redistribute it and/or modify | |
| 9 * it under the terms of the GNU General Public License as published by | |
| 10 * the Free Software Foundation; either version 2 of the License, or | |
| 11 * (at your option) any later version. | |
| 12 * | |
| 13 * This program is distributed in the hope that it will be useful, | |
| 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 * GNU General Public License for more details. | |
| 17 * | |
| 18 * You should have received a copy of the GNU General Public License | |
| 19 * along with this program; if not, write to the Free Software | |
| 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 21 */ | |
| 22 #include "msn.h" | |
| 23 #include "user.h" | |
| 24 | |
| 25 MsnUser * | |
| 26 msn_user_new(MsnSession *session, const char *passport, const char *name) | |
| 27 { | |
| 28 MsnUser *user; | |
| 29 | |
| 30 user = msn_users_find_with_passport(session->users, passport); | |
| 31 | |
| 32 if (user != NULL) { | |
| 33 if (name != NULL) | |
| 34 msn_user_set_name(user, name); | |
| 35 | |
| 36 msn_user_ref(user); | |
| 37 | |
| 38 return user; | |
| 39 } | |
| 40 | |
| 41 user = g_new0(MsnUser, 1); | |
| 42 | |
| 43 user->session = session; | |
| 44 | |
| 45 if (name != NULL) | |
| 46 msn_user_set_name(user, name); | |
| 47 | |
| 48 msn_user_set_passport(user, passport); | |
| 49 msn_user_set_group_id(user, -1); | |
| 50 | |
| 51 msn_users_add(session->users, user); | |
| 52 | |
| 53 msn_user_ref(user); | |
| 54 | |
| 55 return user; | |
| 56 } | |
| 57 | |
| 58 void | |
| 59 msn_user_destroy(MsnUser *user) | |
| 60 { | |
| 61 g_return_if_fail(user != NULL); | |
| 62 | |
| 63 if (user->ref_count > 0) { | |
| 64 msn_user_unref(user); | |
| 65 | |
| 66 return; | |
| 67 } | |
| 68 | |
| 69 if (user->session != NULL && user->session->users != NULL) | |
| 70 msn_users_remove(user->session->users, user); | |
| 71 | |
|
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5363
diff
changeset
|
72 if (user->clientcaps != NULL) |
|
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5363
diff
changeset
|
73 g_hash_table_destroy(user->clientcaps); |
|
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
74 |
|
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
75 if (user->passport != NULL) g_free(user->passport); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
76 if (user->name != NULL) g_free(user->name); |
| 5309 | 77 |
|
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
78 if (user->phone.home != NULL) g_free(user->phone.home); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
79 if (user->phone.work != NULL) g_free(user->phone.work); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
80 if (user->phone.mobile != NULL) g_free(user->phone.mobile); |
| 5309 | 81 |
| 82 g_free(user); | |
| 83 } | |
| 84 | |
| 85 MsnUser * | |
| 86 msn_user_ref(MsnUser *user) | |
| 87 { | |
| 88 g_return_val_if_fail(user != NULL, NULL); | |
| 89 | |
| 90 user->ref_count++; | |
| 91 | |
| 92 return user; | |
| 93 } | |
| 94 | |
| 95 MsnUser * | |
| 96 msn_user_unref(MsnUser *user) | |
| 97 { | |
| 98 g_return_val_if_fail(user != NULL, NULL); | |
| 99 | |
| 100 if (user->ref_count <= 0) | |
| 101 return NULL; | |
| 102 | |
| 103 user->ref_count--; | |
| 104 | |
| 105 if (user->ref_count == 0) { | |
| 106 msn_user_destroy(user); | |
| 107 | |
| 108 return NULL; | |
| 109 } | |
| 110 | |
| 111 return user; | |
| 112 } | |
| 113 | |
| 114 void | |
| 115 msn_user_set_passport(MsnUser *user, const char *passport) | |
| 116 { | |
| 117 g_return_if_fail(user != NULL); | |
| 118 | |
| 119 if (user->passport != NULL) | |
| 120 g_free(user->passport); | |
| 121 | |
| 122 user->passport = g_strdup(passport); | |
| 123 } | |
| 124 | |
| 125 void | |
| 126 msn_user_set_name(MsnUser *user, const char *name) | |
| 127 { | |
| 128 g_return_if_fail(user != NULL); | |
| 129 | |
| 130 if (user->name != NULL) | |
| 131 g_free(user->name); | |
| 132 | |
| 133 user->name = g_strdup(name); | |
| 134 } | |
| 135 | |
| 136 void | |
| 137 msn_user_set_group_id(MsnUser *user, int id) | |
| 138 { | |
| 139 g_return_if_fail(user != NULL); | |
| 140 | |
| 141 user->group_id = id; | |
| 142 } | |
| 143 | |
|
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
144 void |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
145 msn_user_set_home_phone(MsnUser *user, const char *number) |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
146 { |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
147 g_return_if_fail(user != NULL); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
148 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
149 if (user->phone.home != NULL) |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
150 g_free(user->phone.home); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
151 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
152 user->phone.home = (number == NULL ? NULL : g_strdup(number)); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
153 } |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
154 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
155 void |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
156 msn_user_set_work_phone(MsnUser *user, const char *number) |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
157 { |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
158 g_return_if_fail(user != NULL); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
159 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
160 if (user->phone.work != NULL) |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
161 g_free(user->phone.work); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
162 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
163 user->phone.work = (number == NULL ? NULL : g_strdup(number)); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
164 } |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
165 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
166 void |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
167 msn_user_set_mobile_phone(MsnUser *user, const char *number) |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
168 { |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
169 g_return_if_fail(user != NULL); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
170 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
171 if (user->phone.mobile != NULL) |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
172 g_free(user->phone.mobile); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
173 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
174 user->phone.mobile = (number == NULL ? NULL : g_strdup(number)); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
175 } |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
176 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
177 |
| 5309 | 178 const char * |
| 179 msn_user_get_passport(const MsnUser *user) | |
| 180 { | |
| 181 g_return_val_if_fail(user != NULL, NULL); | |
| 182 | |
| 183 return user->passport; | |
| 184 } | |
| 185 | |
| 186 const char * | |
| 187 msn_user_get_name(const MsnUser *user) | |
| 188 { | |
| 189 g_return_val_if_fail(user != NULL, NULL); | |
| 190 | |
| 191 return user->name; | |
| 192 } | |
| 193 | |
| 194 int | |
| 195 msn_user_get_group_id(const MsnUser *user) | |
| 196 { | |
| 197 g_return_val_if_fail(user != NULL, -1); | |
| 198 | |
| 199 return user->group_id; | |
| 200 } | |
| 201 | |
|
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
202 const char * |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
203 msn_user_get_home_phone(const MsnUser *user) |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
204 { |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
205 g_return_val_if_fail(user != NULL, NULL); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
206 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
207 return user->phone.home; |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
208 } |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
209 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
210 const char * |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
211 msn_user_get_work_phone(const MsnUser *user) |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
212 { |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
213 g_return_val_if_fail(user != NULL, NULL); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
214 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
215 return user->phone.work; |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
216 } |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
217 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
218 const char * |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
219 msn_user_get_mobile_phone(const MsnUser *user) |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
220 { |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
221 g_return_val_if_fail(user != NULL, NULL); |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
222 |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
223 return user->phone.mobile; |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
224 } |
|
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5316
diff
changeset
|
225 |
|
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
226 void |
|
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5363
diff
changeset
|
227 msn_user_set_client_caps(MsnUser *user, GHashTable *info) |
|
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
228 { |
|
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
229 g_return_if_fail(user != NULL); |
|
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
230 g_return_if_fail(info != NULL); |
|
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
231 |
|
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5363
diff
changeset
|
232 if (user->clientcaps != NULL) |
|
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5363
diff
changeset
|
233 g_hash_table_destroy(user->clientcaps); |
|
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
234 |
|
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5363
diff
changeset
|
235 user->clientcaps = info; |
|
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
236 } |
|
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
237 |
|
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
238 GHashTable * |
|
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5363
diff
changeset
|
239 msn_user_get_client_caps(const MsnUser *user) |
|
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
240 { |
|
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
241 g_return_val_if_fail(user != NULL, NULL); |
|
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
242 |
|
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5363
diff
changeset
|
243 return user->clientcaps; |
|
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
244 } |
|
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
245 |
| 5309 | 246 MsnUsers * |
| 247 msn_users_new(void) | |
| 248 { | |
| 249 MsnUsers *users = g_new0(MsnUsers, 1); | |
| 250 | |
| 251 return users; | |
| 252 } | |
| 253 | |
| 254 void | |
| 255 msn_users_destroy(MsnUsers *users) | |
| 256 { | |
| 257 g_return_if_fail(users != NULL); | |
| 258 | |
| 259 while (users->users != NULL) | |
| 260 msn_user_destroy(users->users->data); | |
| 261 | |
| 262 /* See if we've leaked anybody. */ | |
| 263 while (users->users != NULL) { | |
| 264 gaim_debug(GAIM_DEBUG_WARNING, "msn", | |
| 265 "Leaking user %s\n", | |
| 266 msn_user_get_passport(users->users->data)); | |
| 267 } | |
| 268 | |
| 269 g_free(users); | |
| 270 } | |
| 271 | |
| 272 void | |
| 273 msn_users_add(MsnUsers *users, MsnUser *user) | |
| 274 { | |
| 275 g_return_if_fail(users != NULL); | |
| 276 g_return_if_fail(user != NULL); | |
| 277 | |
| 278 users->users = g_list_append(users->users, user); | |
| 279 } | |
| 280 | |
| 281 void | |
| 282 msn_users_remove(MsnUsers *users, MsnUser *user) | |
| 283 { | |
| 284 g_return_if_fail(users != NULL); | |
| 285 g_return_if_fail(user != NULL); | |
| 286 | |
| 287 users->users = g_list_remove(users->users, user); | |
| 288 } | |
| 289 | |
| 290 MsnUser * | |
| 291 msn_users_find_with_passport(MsnUsers *users, const char *passport) | |
| 292 { | |
| 293 GList *l; | |
| 294 | |
| 295 g_return_val_if_fail(users != NULL, NULL); | |
| 296 g_return_val_if_fail(passport != NULL, NULL); | |
| 297 | |
| 298 for (l = users->users; l != NULL; l = l->next) { | |
| 299 MsnUser *user = (MsnUser *)l->data; | |
| 300 | |
| 301 if (user->passport != NULL && | |
| 302 !g_ascii_strcasecmp(passport, user->passport)) { | |
| 303 | |
| 304 return user; | |
| 305 } | |
| 306 } | |
| 307 | |
| 308 return NULL; | |
| 309 } |
