mcabber/src/roster.c
changeset 848 a9161d2dc414
parent 843 915a7f17474a
child 860 a8fadbd97858
equal deleted inserted replaced
847:e1b7f71b0b1c 848:a9161d2dc414
    87 static GHashTable *unread_jids;
    87 static GHashTable *unread_jids;
    88 GList *buddylist;
    88 GList *buddylist;
    89 GList *current_buddy;
    89 GList *current_buddy;
    90 GList *alternate_buddy;
    90 GList *alternate_buddy;
    91 
    91 
       
    92 static roster roster_special;
       
    93 
    92 void unread_jid_add(const char *jid);
    94 void unread_jid_add(const char *jid);
    93 int  unread_jid_del(const char *jid);
    95 int  unread_jid_del(const char *jid);
    94 
    96 
       
    97 
       
    98 /* ### Initialization ### */
       
    99 
       
   100 void roster_init(void)
       
   101 {
       
   102   roster_special.name = "[status]";
       
   103   roster_special.type = ROSTER_TYPE_SPECIAL;
       
   104 }
    95 
   105 
    96 /* ### Resources functions ### */
   106 /* ### Resources functions ### */
    97 
   107 
    98 static void free_all_resources(GSList **reslist)
   108 static void free_all_resources(GSList **reslist)
    99 {
   109 {
   713   if (buddylist) {
   723   if (buddylist) {
   714     g_list_free(buddylist);
   724     g_list_free(buddylist);
   715     buddylist = NULL;
   725     buddylist = NULL;
   716   }
   726   }
   717 
   727 
       
   728   buddylist = g_list_append(buddylist, &roster_special);
       
   729 
   718   // Create the new list
   730   // Create the new list
   719   while (sl_roster_elt) {
   731   while (sl_roster_elt) {
   720     GSList *sl_roster_usrelt;
   732     GSList *sl_roster_usrelt;
   721     roster *roster_usrelt;
   733     roster *roster_usrelt;
   722     guint pending_group = FALSE;
   734     guint pending_group = FALSE;
   934   roster *roster_usr = rosterdata;
   946   roster *roster_usr = rosterdata;
   935 
   947 
   936   if (roster_usr->type & ROSTER_TYPE_GROUP)
   948   if (roster_usr->type & ROSTER_TYPE_GROUP)
   937     return roster_usr->name;
   949     return roster_usr->name;
   938 
   950 
       
   951   if (roster_usr->type & ROSTER_TYPE_SPECIAL)
       
   952     return NULL;
       
   953 
   939   // This is a user
   954   // This is a user
   940   return ((roster*)((GSList*)roster_usr->list)->data)->name;
   955   return ((roster*)((GSList*)roster_usr->list)->data)->name;
   941 }
   956 }
   942 
   957 
   943 //  buddy_getgroup()
   958 //  buddy_getgroup()
   946 {
   961 {
   947   roster *roster_usr = rosterdata;
   962   roster *roster_usr = rosterdata;
   948 
   963 
   949   if (roster_usr->type & ROSTER_TYPE_GROUP)
   964   if (roster_usr->type & ROSTER_TYPE_GROUP)
   950     return rosterdata;
   965     return rosterdata;
       
   966 
       
   967   if (roster_usr->type & ROSTER_TYPE_SPECIAL)
       
   968     return NULL;
   951 
   969 
   952   // This is a user
   970   // This is a user
   953   return (gpointer)((GSList*)roster_usr->list)->data;
   971   return (gpointer)((GSList*)roster_usr->list)->data;
   954 }
   972 }
   955 
   973 
  1204   GSList *sl_roster_usrelt;
  1222   GSList *sl_roster_usrelt;
  1205   roster *roster_usrelt;
  1223   roster *roster_usrelt;
  1206 
  1224 
  1207   while (sl_roster_elt) {       // group list loop
  1225   while (sl_roster_elt) {       // group list loop
  1208     roster_elt = (roster*) sl_roster_elt->data;
  1226     roster_elt = (roster*) sl_roster_elt->data;
       
  1227     if (roster_elt->type & ROSTER_TYPE_SPECIAL)
       
  1228       continue; // Skip special items
  1209     sl_roster_usrelt = roster_elt->list;
  1229     sl_roster_usrelt = roster_elt->list;
  1210     while (sl_roster_usrelt) {  // user list loop
  1230     while (sl_roster_usrelt) {  // user list loop
  1211       roster_usrelt = (roster*) sl_roster_usrelt->data;
  1231       roster_usrelt = (roster*) sl_roster_usrelt->data;
  1212 
  1232 
  1213       if (roster_usrelt->type & roster_type)
  1233       if (roster_usrelt->type & roster_type)