Mercurial > ~mikael > mcabber > hg
comparison mcabber/src/roster.c @ 164:faf534be8ff0
[/trunk] Changeset 176 by mikael
* Add roster_free()
* Empty roster when disconnecting from the server / going offline
* Don't display buddies status when we're offline
* Fix a bug when the roster is empty and we try to send a message (commands.c)
author | mikael |
---|---|
date | Mon, 02 May 2005 20:31:01 +0000 |
parents | c3624b2a7059 |
children | aa5b635520ef |
comparison
equal
deleted
inserted
replaced
163:a8f7dc0a56cb | 164:faf534be8ff0 |
---|---|
191 if (current_buddy) | 191 if (current_buddy) |
192 buddylist_build(); | 192 buddylist_build(); |
193 // TODO What we should do, too, is to check if the deleted node is | 193 // TODO What we should do, too, is to check if the deleted node is |
194 // current_buddy, in which case we could move current_buddy to the | 194 // current_buddy, in which case we could move current_buddy to the |
195 // previous (or next) node. | 195 // previous (or next) node. |
196 } | |
197 | |
198 // Free all roster data. Call buddylist_build() to free the buddylist. | |
199 void roster_free(void) | |
200 { | |
201 GSList *sl_grp = groups; | |
202 | |
203 // Walk through groups | |
204 while (sl_grp) { | |
205 roster *roster_grp = (roster*)sl_grp->data; | |
206 GSList *sl_usr = roster_grp->list; | |
207 // Walk through this group users | |
208 while (sl_usr) { | |
209 roster *roster_usr = (roster*)sl_usr->data; | |
210 // Free name and jid | |
211 if (roster_usr->jid) | |
212 g_free((gchar*)roster_usr->jid); | |
213 if (roster_usr->name) | |
214 g_free((gchar*)roster_usr->name); | |
215 sl_usr = g_slist_next(sl_usr); | |
216 } | |
217 // Free group's users list | |
218 if (roster_grp->list) | |
219 g_slist_free(roster_grp->list); | |
220 // Free group's name and jid | |
221 if (roster_grp->jid) | |
222 g_free((gchar*)roster_grp->jid); | |
223 if (roster_grp->name) | |
224 g_free((gchar*)roster_grp->name); | |
225 sl_grp = g_slist_next(sl_grp); | |
226 } | |
227 // Free groups list | |
228 if (groups) { | |
229 g_slist_free(groups); | |
230 groups = NULL; | |
231 // Update (i.e. free) buddylist | |
232 if (buddylist) | |
233 buddylist_build(); | |
234 } | |
196 } | 235 } |
197 | 236 |
198 void roster_setstatus(const char *jid, enum imstatus bstat) | 237 void roster_setstatus(const char *jid, enum imstatus bstat) |
199 { | 238 { |
200 GSList *sl_user; | 239 GSList *sl_user; |