comparison src/protocols/msn/user.c @ 5309:e2e53316a21d

[gaim-migrate @ 5681] Announcing the new MSN prpl! It probably has some bugs, and for the time being, there is no file transfer. That's good though, because the current MSN file transfer is a little broken. I've had many corrupted files. I'll commit new file transfer code when it's written. I want this heavily tested before 0.63! If you use MSN, please talk to people on it. Let me know of any oddities, crashes, bugs, whatever. I'll fix things as I find them. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Tue, 06 May 2003 02:06:56 +0000
parents
children d5690ed70085
comparison
equal deleted inserted replaced
5308:6aa785e55d0f 5309:e2e53316a21d
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
72 if (user->passport != NULL)
73 g_free(user->passport);
74
75 if (user->name != NULL)
76 g_free(user->name);
77
78 g_free(user);
79 }
80
81 MsnUser *
82 msn_user_ref(MsnUser *user)
83 {
84 g_return_val_if_fail(user != NULL, NULL);
85
86 user->ref_count++;
87
88 return user;
89 }
90
91 MsnUser *
92 msn_user_unref(MsnUser *user)
93 {
94 g_return_val_if_fail(user != NULL, NULL);
95
96 if (user->ref_count <= 0)
97 return NULL;
98
99 user->ref_count--;
100
101 if (user->ref_count == 0) {
102 msn_user_destroy(user);
103
104 return NULL;
105 }
106
107 return user;
108 }
109
110 void
111 msn_user_set_passport(MsnUser *user, const char *passport)
112 {
113 g_return_if_fail(user != NULL);
114
115 if (user->passport != NULL)
116 g_free(user->passport);
117
118 user->passport = g_strdup(passport);
119 }
120
121 void
122 msn_user_set_name(MsnUser *user, const char *name)
123 {
124 g_return_if_fail(user != NULL);
125
126 if (user->name != NULL)
127 g_free(user->name);
128
129 user->name = g_strdup(name);
130 }
131
132 void
133 msn_user_set_group_id(MsnUser *user, int id)
134 {
135 g_return_if_fail(user != NULL);
136
137 user->group_id = id;
138 }
139
140 const char *
141 msn_user_get_passport(const MsnUser *user)
142 {
143 g_return_val_if_fail(user != NULL, NULL);
144
145 return user->passport;
146 }
147
148 const char *
149 msn_user_get_name(const MsnUser *user)
150 {
151 g_return_val_if_fail(user != NULL, NULL);
152
153 return user->name;
154 }
155
156 int
157 msn_user_get_group_id(const MsnUser *user)
158 {
159 g_return_val_if_fail(user != NULL, -1);
160
161 return user->group_id;
162 }
163
164 MsnUsers *
165 msn_users_new(void)
166 {
167 MsnUsers *users = g_new0(MsnUsers, 1);
168
169 return users;
170 }
171
172 void
173 msn_users_destroy(MsnUsers *users)
174 {
175 g_return_if_fail(users != NULL);
176
177 while (users->users != NULL)
178 msn_user_destroy(users->users->data);
179
180 /* See if we've leaked anybody. */
181 while (users->users != NULL) {
182 gaim_debug(GAIM_DEBUG_WARNING, "msn",
183 "Leaking user %s\n",
184 msn_user_get_passport(users->users->data));
185 }
186
187 g_free(users);
188 }
189
190 void
191 msn_users_add(MsnUsers *users, MsnUser *user)
192 {
193 g_return_if_fail(users != NULL);
194 g_return_if_fail(user != NULL);
195
196 users->users = g_list_append(users->users, user);
197 }
198
199 void
200 msn_users_remove(MsnUsers *users, MsnUser *user)
201 {
202 g_return_if_fail(users != NULL);
203 g_return_if_fail(user != NULL);
204
205 users->users = g_list_remove(users->users, user);
206 }
207
208 MsnUser *
209 msn_users_find_with_passport(MsnUsers *users, const char *passport)
210 {
211 GList *l;
212
213 g_return_val_if_fail(users != NULL, NULL);
214 g_return_val_if_fail(passport != NULL, NULL);
215
216 for (l = users->users; l != NULL; l = l->next) {
217 MsnUser *user = (MsnUser *)l->data;
218
219 if (user->passport != NULL &&
220 !g_ascii_strcasecmp(passport, user->passport)) {
221
222 return user;
223 }
224 }
225
226 return NULL;
227 }