Mercurial > ~mikael > mcabber > hg
comparison mcabber/mcabber/roster.c @ 2013:8dc418af3e72
Allow to select to which buddy resource messages go. Closes issue #55
author | Hermitifier |
---|---|
date | Thu, 01 Mar 2012 15:10:41 +0100 |
parents | 7837d5a3f509 |
children | e04b6dfbb054 |
comparison
equal
deleted
inserted
replaced
2012:2039ea6bd7a5 | 2013:8dc418af3e72 |
---|---|
92 gchar *name; | 92 gchar *name; |
93 gchar *jid; | 93 gchar *jid; |
94 guint type; | 94 guint type; |
95 enum subscr subscription; | 95 enum subscr subscription; |
96 GSList *resource; | 96 GSList *resource; |
97 res *active_resource; | |
97 | 98 |
98 /* For groupchats */ | 99 /* For groupchats */ |
99 gchar *nickname; | 100 gchar *nickname; |
100 gchar *topic; | 101 gchar *topic; |
101 guint inside_room; | 102 guint inside_room; |
263 g_free(rost->offline_status_message); | 264 g_free(rost->offline_status_message); |
264 rost->offline_status_message = p_res->status_msg; | 265 rost->offline_status_message = p_res->status_msg; |
265 p_res->status_msg = NULL; | 266 p_res->status_msg = NULL; |
266 } | 267 } |
267 | 268 |
269 if (rost->active_resource == p_res) | |
270 rost->active_resource = NULL; | |
271 | |
268 // Free allocations and delete resource node | 272 // Free allocations and delete resource node |
269 free_resource_data(p_res); | 273 free_resource_data(p_res); |
270 rost->resource = g_slist_delete_link(rost->resource, p_res_elt); | 274 rost->resource = g_slist_delete_link(rost->resource, p_res_elt); |
271 return; | 275 return; |
272 } | 276 } |
277 static inline void free_roster_user_data(roster *roster_usr) | 281 static inline void free_roster_user_data(roster *roster_usr) |
278 { | 282 { |
279 if (!roster_usr) | 283 if (!roster_usr) |
280 return; | 284 return; |
281 g_free((gchar*)roster_usr->jid); | 285 g_free((gchar*)roster_usr->jid); |
286 //g_free((gchar*)roster_usr->active_resource); | |
282 g_free((gchar*)roster_usr->name); | 287 g_free((gchar*)roster_usr->name); |
283 g_free((gchar*)roster_usr->nickname); | 288 g_free((gchar*)roster_usr->nickname); |
284 g_free((gchar*)roster_usr->topic); | 289 g_free((gchar*)roster_usr->topic); |
285 g_free((gchar*)roster_usr->offline_status_message); | 290 g_free((gchar*)roster_usr->offline_status_message); |
286 free_all_resources(&roster_usr->resource); | 291 free_all_resources(&roster_usr->resource); |
1449 lp->data = oldname; | 1454 lp->data = oldname; |
1450 } | 1455 } |
1451 return reslist; | 1456 return reslist; |
1452 } | 1457 } |
1453 | 1458 |
1459 // buddy_getactiveresource(roster_data) | |
1460 // Returns name of active (selected for chat) resource | |
1461 const char *buddy_getactiveresource(gpointer rosterdata) | |
1462 { | |
1463 roster *roster_usr = rosterdata; | |
1464 res *resource; | |
1465 | |
1466 if (!roster_usr) { | |
1467 if (!current_buddy) return NULL; | |
1468 roster_usr = BUDDATA(current_buddy); | |
1469 } | |
1470 | |
1471 resource = roster_usr->active_resource; | |
1472 if (!resource) return NULL; | |
1473 return resource->name; | |
1474 } | |
1475 | |
1476 void buddy_setactiveresource(gpointer rosterdata, const char *resname) | |
1477 { | |
1478 roster *roster_usr = rosterdata; | |
1479 res *p_res = NULL; | |
1480 if (resname) | |
1481 p_res = get_resource(roster_usr, resname); | |
1482 roster_usr->active_resource = p_res; | |
1483 } | |
1484 | |
1454 /* | 1485 /* |
1455 // buddy_isresource(roster_data) | 1486 // buddy_isresource(roster_data) |
1456 // Return true if there is at least one resource | 1487 // Return true if there is at least one resource |
1457 // (which means, for a room, that it isn't empty) | 1488 // (which means, for a room, that it isn't empty) |
1458 int buddy_isresource(gpointer rosterdata) | 1489 int buddy_isresource(gpointer rosterdata) |