174 sl_user = roster_find(jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT); |
175 sl_user = roster_find(jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT); |
175 if (sl_user == NULL) |
176 if (sl_user == NULL) |
176 return; |
177 return; |
177 // Let's free memory (jid, name) |
178 // Let's free memory (jid, name) |
178 roster_usr = (roster*)sl_user->data; |
179 roster_usr = (roster*)sl_user->data; |
179 if (roster_usr->jid) |
180 if (roster_usr->jid) g_free((gchar*)roster_usr->jid); |
180 g_free((gchar*)roster_usr->jid); |
181 if (roster_usr->name) g_free((gchar*)roster_usr->name); |
181 if (roster_usr->name) |
182 if (roster_usr->status_msg) g_free((gchar*)roster_usr->status_msg); |
182 g_free((gchar*)roster_usr->name); |
|
183 g_free(roster_usr); |
183 g_free(roster_usr); |
184 |
184 |
185 // That's a little complex, we need to dereference twice |
185 // That's a little complex, we need to dereference twice |
186 sl_group = ((roster*)sl_user->data)->list; |
186 sl_group = ((roster*)sl_user->data)->list; |
187 sl_group_listptr = &((roster*)(sl_group->data))->list; |
187 sl_group_listptr = &((roster*)(sl_group->data))->list; |
206 GSList *sl_usr = roster_grp->list; |
206 GSList *sl_usr = roster_grp->list; |
207 // Walk through this group users |
207 // Walk through this group users |
208 while (sl_usr) { |
208 while (sl_usr) { |
209 roster *roster_usr = (roster*)sl_usr->data; |
209 roster *roster_usr = (roster*)sl_usr->data; |
210 // Free name and jid |
210 // Free name and jid |
211 if (roster_usr->jid) |
211 if (roster_usr->jid) g_free((gchar*)roster_usr->jid); |
212 g_free((gchar*)roster_usr->jid); |
212 if (roster_usr->name) g_free((gchar*)roster_usr->name); |
213 if (roster_usr->name) |
213 if (roster_usr->status_msg) g_free((gchar*)roster_usr->status_msg); |
214 g_free((gchar*)roster_usr->name); |
|
215 g_free(roster_usr); |
214 g_free(roster_usr); |
216 sl_usr = g_slist_next(sl_usr); |
215 sl_usr = g_slist_next(sl_usr); |
217 } |
216 } |
218 // Free group's users list |
217 // Free group's users list |
219 if (roster_grp->list) |
218 if (roster_grp->list) |
220 g_slist_free(roster_grp->list); |
219 g_slist_free(roster_grp->list); |
221 // Free group's name and jid |
220 // Free group's name and jid |
222 if (roster_grp->jid) |
221 if (roster_grp->jid) g_free((gchar*)roster_grp->jid); |
223 g_free((gchar*)roster_grp->jid); |
222 if (roster_grp->name) g_free((gchar*)roster_grp->name); |
224 if (roster_grp->name) |
|
225 g_free((gchar*)roster_grp->name); |
|
226 g_free(roster_grp); |
223 g_free(roster_grp); |
227 sl_grp = g_slist_next(sl_grp); |
224 sl_grp = g_slist_next(sl_grp); |
228 } |
225 } |
229 // Free groups list |
226 // Free groups list |
230 if (groups) { |
227 if (groups) { |
246 if (sl_user == NULL) |
244 if (sl_user == NULL) |
247 sl_user = roster_add_user(jid, NULL, NULL, ROSTER_TYPE_USER); |
245 sl_user = roster_add_user(jid, NULL, NULL, ROSTER_TYPE_USER); |
248 |
246 |
249 roster_usr = (roster*)sl_user->data; |
247 roster_usr = (roster*)sl_user->data; |
250 roster_usr->status = bstat; |
248 roster_usr->status = bstat; |
|
249 if (roster_usr->status_msg) { |
|
250 g_free((gchar*)roster_usr->status_msg); |
|
251 roster_usr->status_msg = NULL; |
|
252 } |
|
253 if (status_msg) |
|
254 roster_usr->status_msg = g_strdup(status_msg); |
251 } |
255 } |
252 |
256 |
253 // roster_setflags() |
257 // roster_setflags() |
254 // Set one or several flags to value (TRUE/FALSE) |
258 // Set one or several flags to value (TRUE/FALSE) |
255 void roster_setflags(const char *jid, guint flags, guint value) |
259 void roster_setflags(const char *jid, guint flags, guint value) |
504 roster_clone = (roster*)sl_clone->data; |
508 roster_clone = (roster*)sl_clone->data; |
505 roster_clone->status = roster_usr->status; |
509 roster_clone->status = roster_usr->status; |
506 roster_clone->flags = roster_usr->flags; |
510 roster_clone->flags = roster_usr->flags; |
507 |
511 |
508 // Free old buddy |
512 // Free old buddy |
509 if (roster_usr->jid) g_free((gchar*)roster_usr->jid); |
513 if (roster_usr->jid) g_free((gchar*)roster_usr->jid); |
510 if (roster_usr->name) g_free((gchar*)roster_usr->name); |
514 if (roster_usr->name) g_free((gchar*)roster_usr->name); |
|
515 if (roster_usr->status_msg) g_free((gchar*)roster_usr->status_msg); |
511 g_free(roster_usr); |
516 g_free(roster_usr); |
512 |
517 |
513 // If new new group is folded, the curren_buddy will be lost, and the |
518 // If new new group is folded, the curren_buddy will be lost, and the |
514 // chat window won't be correctly refreshed. So we make sure it isn't... |
519 // chat window won't be correctly refreshed. So we make sure it isn't... |
515 ((roster*)((GSList*)roster_clone->list)->data)->flags &= ~ROSTER_FLAG_HIDE; |
520 ((roster*)((GSList*)roster_clone->list)->data)->flags &= ~ROSTER_FLAG_HIDE; |
587 { |
592 { |
588 roster *roster_usr = rosterdata; |
593 roster *roster_usr = rosterdata; |
589 return roster_usr->status; |
594 return roster_usr->status; |
590 } |
595 } |
591 |
596 |
|
597 const char *buddy_getstatusmsg(gpointer rosterdata) |
|
598 { |
|
599 roster *roster_usr = rosterdata; |
|
600 return roster_usr->status_msg; |
|
601 } |
|
602 |
592 // buddy_setflags() |
603 // buddy_setflags() |
593 // Set one or several flags to value (TRUE/FALSE) |
604 // Set one or several flags to value (TRUE/FALSE) |
594 void buddy_setflags(gpointer rosterdata, guint flags, guint value) |
605 void buddy_setflags(gpointer rosterdata, guint flags, guint value) |
595 { |
606 { |
596 roster *roster_usr = rosterdata; |
607 roster *roster_usr = rosterdata; |