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;