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; |