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)