mcabber/mcabber/roster.c
changeset 2013 8dc418af3e72
parent 1996 7837d5a3f509
child 2074 e04b6dfbb054
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)