Mercurial > ~mikael > mcabber > hg
comparison mcabber/src/roster.c @ 468:644b8bf9ca4d
Improve MUC presence messages handling
- Display messages when someone joins, leaves, or changes his nickname
- Update occupants roles and real jid (if available)
- Fix some memory leaks
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sat, 01 Oct 2005 18:53:14 +0200 |
parents | 03bb57383cea |
children | a926523d2392 |
comparison
equal
deleted
inserted
replaced
467:73aa14eba3c7 | 468:644b8bf9ca4d |
---|---|
368 if (buddylist) | 368 if (buddylist) |
369 buddylist_build(); | 369 buddylist_build(); |
370 } | 370 } |
371 } | 371 } |
372 | 372 |
373 // roster_setstatus() | |
374 // Note: resname, role and realjid are for room members only | |
373 void roster_setstatus(const char *jid, const char *resname, gchar prio, | 375 void roster_setstatus(const char *jid, const char *resname, gchar prio, |
374 enum imstatus bstat, const char *status_msg) | 376 enum imstatus bstat, const char *status_msg, |
377 enum imrole role, const char *realjid) | |
375 { | 378 { |
376 GSList *sl_user; | 379 GSList *sl_user; |
377 roster *roster_usr; | 380 roster *roster_usr; |
378 res *p_res; | 381 res *p_res; |
379 | 382 |
401 g_free((gchar*)p_res->status_msg); | 404 g_free((gchar*)p_res->status_msg); |
402 p_res->status_msg = NULL; | 405 p_res->status_msg = NULL; |
403 } | 406 } |
404 if (status_msg) | 407 if (status_msg) |
405 p_res->status_msg = g_strdup(status_msg); | 408 p_res->status_msg = g_strdup(status_msg); |
409 | |
410 p_res->role = role; | |
411 | |
412 if (p_res->realjid) { | |
413 g_free((gchar*)p_res->realjid); | |
414 p_res->realjid = NULL; | |
415 } | |
416 if (realjid) | |
417 p_res->realjid = g_strdup(realjid); | |
406 } | 418 } |
407 | 419 |
408 // roster_setflags() | 420 // roster_setflags() |
409 // Set one or several flags to value (TRUE/FALSE) | 421 // Set one or several flags to value (TRUE/FALSE) |
410 void roster_setflags(const char *jid, guint flags, guint value) | 422 void roster_setflags(const char *jid, guint flags, guint value) |
833 reslist = g_slist_append(reslist, g_strdup(((res*)lp->data)->name)); | 845 reslist = g_slist_append(reslist, g_strdup(((res*)lp->data)->name)); |
834 | 846 |
835 return reslist; | 847 return reslist; |
836 } | 848 } |
837 | 849 |
850 // buddy_resource_setname(roster_data, oldname, newname) | |
851 // Useful for nickname change in a MUC room | |
852 void buddy_resource_setname(gpointer rosterdata, const char *resname, | |
853 const char *newname) | |
854 { | |
855 roster *roster_usr = rosterdata; | |
856 res *p_res = get_resource(roster_usr, resname); | |
857 if (p_res) { | |
858 if (p_res->name) { | |
859 g_free((gchar*)p_res->name); | |
860 p_res->name = NULL; | |
861 } | |
862 if (newname) | |
863 p_res->name = g_strdup(newname); | |
864 } | |
865 } | |
866 | |
838 // buddy_del_all_resources() | 867 // buddy_del_all_resources() |
839 // Remove all resources from the specified buddy | 868 // Remove all resources from the specified buddy |
840 void buddy_del_all_resources(gpointer rosterdata) | 869 void buddy_del_all_resources(gpointer rosterdata) |
841 { | 870 { |
842 roster *roster_usr = rosterdata; | 871 roster *roster_usr = rosterdata; |