mcabber/src/roster.c
changeset 164 faf534be8ff0
parent 148 c3624b2a7059
child 166 aa5b635520ef
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;