Mercurial > pidgin.yaz
comparison src/protocols/msn/group.c @ 9193:502707ca1836
[gaim-migrate @ 9988]
Patch by Felipe Contreras to add MSN file transfer and buddy icons. Please
test and report any bugs!
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Sun, 06 Jun 2004 02:39:08 +0000 |
parents | 06f57183e29f |
children | ab6636c5a136 |
comparison
equal
deleted
inserted
replaced
9192:5655dcd94d0f | 9193:502707ca1836 |
---|---|
21 */ | 21 */ |
22 #include "msn.h" | 22 #include "msn.h" |
23 #include "group.h" | 23 #include "group.h" |
24 | 24 |
25 MsnGroup * | 25 MsnGroup * |
26 msn_group_new(MsnSession *session, int id, const char *name) | 26 msn_group_new(MsnUserList *userlist, int id, const char *name) |
27 { | 27 { |
28 MsnGroup *group; | 28 MsnGroup *group; |
29 | 29 |
30 g_return_val_if_fail(session != NULL, NULL); | 30 g_return_val_if_fail(id >= 0, NULL); |
31 g_return_val_if_fail(id >= 0, NULL); | 31 g_return_val_if_fail(name != NULL, NULL); |
32 g_return_val_if_fail(name != NULL, NULL); | |
33 | 32 |
34 group = msn_groups_find_with_id(session->groups, id); | 33 group = g_new0(MsnGroup, 1); |
35 | 34 |
36 if (group == NULL) { | 35 msn_userlist_add_group(userlist, group); |
37 group = g_new0(MsnGroup, 1); | |
38 | 36 |
39 group->session = session; | 37 group->id = id; |
40 group->id = id; | 38 group->name = g_strdup(name); |
41 group->name = g_strdup(name); | |
42 group->users = msn_users_new(); | |
43 } | |
44 | |
45 msn_group_ref(group); | |
46 | 39 |
47 return group; | 40 return group; |
48 } | 41 } |
49 | 42 |
50 void | 43 void |
51 msn_group_destroy(MsnGroup *group) | 44 msn_group_destroy(MsnGroup *group) |
52 { | 45 { |
53 g_return_if_fail(group != NULL); | 46 g_return_if_fail(group != NULL); |
54 | 47 |
55 if (group->ref_count > 0) { | |
56 msn_group_unref(group); | |
57 | |
58 return; | |
59 } | |
60 | |
61 if (group->session != NULL && group->session->groups != NULL) | |
62 msn_groups_remove(group->session->groups, group); | |
63 | |
64 msn_users_destroy(group->users); | |
65 | |
66 g_free(group->name); | 48 g_free(group->name); |
67 g_free(group); | 49 g_free(group); |
68 } | |
69 | |
70 MsnGroup * | |
71 msn_group_ref(MsnGroup *group) | |
72 { | |
73 g_return_val_if_fail(group != NULL, NULL); | |
74 | |
75 group->ref_count++; | |
76 | |
77 return group; | |
78 } | |
79 | |
80 MsnGroup * | |
81 msn_group_unref(MsnGroup *group) | |
82 { | |
83 g_return_val_if_fail(group != NULL, NULL); | |
84 | |
85 if (group->ref_count <= 0) | |
86 return NULL; | |
87 | |
88 group->ref_count--; | |
89 | |
90 if (group->ref_count == 0) { | |
91 msn_group_destroy(group); | |
92 | |
93 return NULL; | |
94 } | |
95 | |
96 return group; | |
97 } | 50 } |
98 | 51 |
99 void | 52 void |
100 msn_group_set_id(MsnGroup *group, int id) | 53 msn_group_set_id(MsnGroup *group, int id) |
101 { | 54 { |
130 { | 83 { |
131 g_return_val_if_fail(group != NULL, NULL); | 84 g_return_val_if_fail(group != NULL, NULL); |
132 | 85 |
133 return group->name; | 86 return group->name; |
134 } | 87 } |
135 | |
136 void | |
137 msn_group_add_user(MsnGroup *group, MsnUser *user) | |
138 { | |
139 g_return_if_fail(group != NULL); | |
140 g_return_if_fail(user != NULL); | |
141 | |
142 msn_users_add(group->users, user); | |
143 | |
144 msn_user_ref(user); | |
145 | |
146 gaim_debug(GAIM_DEBUG_INFO, "msn", "Adding user %s to group %s (%d)\n", | |
147 msn_user_get_passport(user), msn_group_get_name(group), | |
148 msn_group_get_id(group)); | |
149 } | |
150 | |
151 void | |
152 msn_group_remove_user(MsnGroup *group, MsnUser *user) | |
153 { | |
154 g_return_if_fail(group != NULL); | |
155 g_return_if_fail(user != NULL); | |
156 | |
157 msn_users_remove(group->users, user); | |
158 | |
159 msn_user_unref(user); | |
160 } | |
161 | |
162 MsnUsers * | |
163 msn_group_get_users(const MsnGroup *group) | |
164 { | |
165 g_return_val_if_fail(group != NULL, NULL); | |
166 | |
167 return group->users; | |
168 } | |
169 | |
170 | |
171 MsnGroups * | |
172 msn_groups_new(void) | |
173 { | |
174 return g_new0(MsnGroups, 1); | |
175 } | |
176 | |
177 void | |
178 msn_groups_destroy(MsnGroups *groups) | |
179 { | |
180 g_return_if_fail(groups != NULL); | |
181 | |
182 while (groups->groups != NULL) | |
183 msn_group_destroy(groups->groups->data); | |
184 | |
185 /* See if we've leaked anybody. */ | |
186 while (groups->groups != NULL) { | |
187 gaim_debug(GAIM_DEBUG_WARNING, "msn", | |
188 "Leaking group %s (id %d)\n", | |
189 msn_group_get_name(groups->groups->data), | |
190 msn_group_get_id(groups->groups->data)); | |
191 } | |
192 | |
193 g_free(groups); | |
194 } | |
195 | |
196 void | |
197 msn_groups_add(MsnGroups *groups, MsnGroup *group) | |
198 { | |
199 g_return_if_fail(groups != NULL); | |
200 g_return_if_fail(group != NULL); | |
201 | |
202 groups->groups = g_list_append(groups->groups, group); | |
203 | |
204 groups->count++; | |
205 | |
206 gaim_debug(GAIM_DEBUG_INFO, "msn", "Adding group %s (%d)\n", | |
207 msn_group_get_name(group), msn_group_get_id(group)); | |
208 } | |
209 | |
210 void | |
211 msn_groups_remove(MsnGroups *groups, MsnGroup *group) | |
212 { | |
213 g_return_if_fail(groups != NULL); | |
214 g_return_if_fail(group != NULL); | |
215 | |
216 gaim_debug(GAIM_DEBUG_INFO, "msn", "Removing group %s (%d)\n", | |
217 msn_group_get_name(group), msn_group_get_id(group)); | |
218 | |
219 groups->groups = g_list_remove(groups->groups, group); | |
220 | |
221 groups->count--; | |
222 } | |
223 | |
224 size_t | |
225 msn_groups_get_count(const MsnGroups *groups) | |
226 { | |
227 g_return_val_if_fail(groups != NULL, 0); | |
228 | |
229 return groups->count; | |
230 } | |
231 | |
232 GList * | |
233 msn_groups_get_list(const MsnGroups *groups) | |
234 { | |
235 g_return_val_if_fail(groups != NULL, NULL); | |
236 | |
237 return groups->groups; | |
238 } | |
239 | |
240 MsnGroup * | |
241 msn_groups_find_with_id(MsnGroups *groups, int id) | |
242 { | |
243 GList *l; | |
244 | |
245 g_return_val_if_fail(groups != NULL, NULL); | |
246 g_return_val_if_fail(id >= 0, NULL); | |
247 | |
248 for (l = groups->groups; l != NULL; l = l->next) { | |
249 MsnGroup *group = l->data; | |
250 | |
251 if (group->id == id) | |
252 return group; | |
253 } | |
254 | |
255 return NULL; | |
256 } | |
257 | |
258 MsnGroup * | |
259 msn_groups_find_with_name(MsnGroups *groups, const char *name) | |
260 { | |
261 GList *l; | |
262 | |
263 g_return_val_if_fail(groups != NULL, NULL); | |
264 g_return_val_if_fail(name != NULL, NULL); | |
265 | |
266 for (l = groups->groups; l != NULL; l = l->next) { | |
267 MsnGroup *group = l->data; | |
268 | |
269 if (group->name != NULL && !g_ascii_strcasecmp(name, group->name)) | |
270 return group; | |
271 } | |
272 | |
273 return NULL; | |
274 } |