equal
deleted
inserted
replaced
66 /* For groupchats */ |
66 /* For groupchats */ |
67 gchar *nickname; |
67 gchar *nickname; |
68 gchar *topic; |
68 gchar *topic; |
69 guint8 inside_room; |
69 guint8 inside_room; |
70 |
70 |
|
71 /* To keep track of last status message */ |
|
72 gchar *offline_status_message; |
|
73 |
71 /* Flag used for the UI */ |
74 /* Flag used for the UI */ |
72 guint flags; |
75 guint flags; |
73 |
76 |
74 // list: user -> points to his group; group -> points to its users list |
77 // list: user -> points to his group; group -> points to its users list |
75 GSList *list; |
78 GSList *list; |
182 } |
185 } |
183 |
186 |
184 if (!p_res_elt) return; // Resource not found |
187 if (!p_res_elt) return; // Resource not found |
185 |
188 |
186 p_res = p_res_elt->data; |
189 p_res = p_res_elt->data; |
|
190 |
|
191 // Keep a copy of the status message when a buddy goes offline |
|
192 if (g_slist_length(rost->resource) == 1) { |
|
193 g_free(rost->offline_status_message); |
|
194 rost->offline_status_message = p_res->status_msg; |
|
195 p_res->status_msg = NULL; |
|
196 } |
|
197 |
187 // Free allocations and delete resource node |
198 // Free allocations and delete resource node |
188 g_free(p_res->name); |
199 g_free(p_res->name); |
189 g_free(p_res->status_msg); |
200 g_free(p_res->status_msg); |
190 g_free(p_res->realjid); |
201 g_free(p_res->realjid); |
191 rost->resource = g_slist_delete_link(rost->resource, p_res_elt); |
202 rost->resource = g_slist_delete_link(rost->resource, p_res_elt); |
362 // Let's free memory (jid, name, status message) |
373 // Let's free memory (jid, name, status message) |
363 g_free((gchar*)roster_usr->jid); |
374 g_free((gchar*)roster_usr->jid); |
364 g_free((gchar*)roster_usr->name); |
375 g_free((gchar*)roster_usr->name); |
365 g_free((gchar*)roster_usr->nickname); |
376 g_free((gchar*)roster_usr->nickname); |
366 g_free((gchar*)roster_usr->topic); |
377 g_free((gchar*)roster_usr->topic); |
|
378 g_free((gchar*)roster_usr->offline_status_message); |
367 free_all_resources(&roster_usr->resource); |
379 free_all_resources(&roster_usr->resource); |
368 g_free(roster_usr); |
380 g_free(roster_usr); |
369 |
381 |
370 // That's a little complex, we need to dereference twice |
382 // That's a little complex, we need to dereference twice |
371 sl_group = ((roster*)sl_user->data)->list; |
383 sl_group = ((roster*)sl_user->data)->list; |
404 // Free name and jid |
416 // Free name and jid |
405 g_free((gchar*)roster_usr->jid); |
417 g_free((gchar*)roster_usr->jid); |
406 g_free((gchar*)roster_usr->name); |
418 g_free((gchar*)roster_usr->name); |
407 g_free((gchar*)roster_usr->nickname); |
419 g_free((gchar*)roster_usr->nickname); |
408 g_free((gchar*)roster_usr->topic); |
420 g_free((gchar*)roster_usr->topic); |
|
421 g_free((gchar*)roster_usr->offline_status_message); |
409 free_all_resources(&roster_usr->resource); |
422 free_all_resources(&roster_usr->resource); |
410 g_free(roster_usr); |
423 g_free(roster_usr); |
411 sl_usr = g_slist_next(sl_usr); |
424 sl_usr = g_slist_next(sl_usr); |
412 } |
425 } |
413 // Free group's users list |
426 // Free group's users list |
450 // If there is no resource name, we can leave now |
463 // If there is no resource name, we can leave now |
451 if (!resname) return; |
464 if (!resname) return; |
452 |
465 |
453 roster_usr = (roster*)sl_user->data; |
466 roster_usr = (roster*)sl_user->data; |
454 |
467 |
455 // If bstat is offline, we MUST delete the resource, actually |
|
456 if (bstat == offline) { |
|
457 del_resource(roster_usr, resname); |
|
458 return; |
|
459 } |
|
460 |
|
461 // New or updated resource |
468 // New or updated resource |
462 p_res = get_or_add_resource(roster_usr, resname, prio); |
469 p_res = get_or_add_resource(roster_usr, resname, prio); |
463 p_res->prio = prio; |
470 p_res->prio = prio; |
464 p_res->status = bstat; |
471 p_res->status = bstat; |
465 if (p_res->status_msg) { |
472 if (p_res->status_msg) { |
479 g_free((gchar*)p_res->realjid); |
486 g_free((gchar*)p_res->realjid); |
480 p_res->realjid = NULL; |
487 p_res->realjid = NULL; |
481 } |
488 } |
482 if (realjid) |
489 if (realjid) |
483 p_res->realjid = g_strdup(realjid); |
490 p_res->realjid = g_strdup(realjid); |
|
491 |
|
492 // If bstat is offline, we MUST delete the resource, actually |
|
493 if (bstat == offline) { |
|
494 del_resource(roster_usr, resname); |
|
495 return; |
|
496 } |
484 } |
497 } |
485 |
498 |
486 // roster_setflags() |
499 // roster_setflags() |
487 // Set one or several flags to value (TRUE/FALSE) |
500 // Set one or several flags to value (TRUE/FALSE) |
488 void roster_setflags(const char *jid, guint flags, guint value) |
501 void roster_setflags(const char *jid, guint flags, guint value) |
613 |
626 |
614 roster_usr = (roster*)sl_user->data; |
627 roster_usr = (roster*)sl_user->data; |
615 p_res = get_resource(roster_usr, resname); |
628 p_res = get_resource(roster_usr, resname); |
616 if (p_res) |
629 if (p_res) |
617 return p_res->status_msg; |
630 return p_res->status_msg; |
618 return NULL; |
631 return roster_usr->offline_status_message; |
619 } |
632 } |
620 |
633 |
621 guint roster_gettype(const char *jid) |
634 guint roster_gettype(const char *jid) |
622 { |
635 { |
623 GSList *sl_user; |
636 GSList *sl_user; |
971 { |
984 { |
972 roster *roster_usr = rosterdata; |
985 roster *roster_usr = rosterdata; |
973 res *p_res = get_resource(roster_usr, resname); |
986 res *p_res = get_resource(roster_usr, resname); |
974 if (p_res) |
987 if (p_res) |
975 return p_res->status_msg; |
988 return p_res->status_msg; |
976 return NULL; |
989 return roster_usr->offline_status_message; |
977 } |
990 } |
978 |
991 |
979 time_t buddy_getstatustime(gpointer rosterdata, const char *resname) |
992 time_t buddy_getstatustime(gpointer rosterdata, const char *resname) |
980 { |
993 { |
981 roster *roster_usr = rosterdata; |
994 roster *roster_usr = rosterdata; |