comparison mcabber/src/roster.c @ 1088:c55b24818546

Enable jid completion for hidden buddies (e.g. offline contacts) Works for hidden groups too.
author Mikael Berthe <mikael@lilotux.net>
date Wed, 06 Dec 2006 23:18:36 +0100
parents 230dca34dbea
children 1ef7572c3096
comparison
equal deleted inserted replaced
1087:ee85cff7dbab 1088:c55b24818546
1377 // type: ROSTER_TYPE_USER (jid's) or ROSTER_TYPE_GROUP (group names) 1377 // type: ROSTER_TYPE_USER (jid's) or ROSTER_TYPE_GROUP (group names)
1378 // The list should be freed by the caller after use. 1378 // The list should be freed by the caller after use.
1379 GSList *compl_list(guint type) 1379 GSList *compl_list(guint type)
1380 { 1380 {
1381 GSList *list = NULL; 1381 GSList *list = NULL;
1382 GList *buddy = buddylist; 1382 GSList *sl_roster_elt = groups;
1383 1383 roster *roster_elt;
1384 for ( ; buddy ; buddy = g_list_next(buddy)) { 1384 GSList *sl_roster_usrelt;
1385 guint btype = buddy_gettype(BUDDATA(buddy)); 1385 roster *roster_usrelt;
1386
1387 while (sl_roster_elt) { // group list loop
1388 roster_elt = (roster*) sl_roster_elt->data;
1389
1390 if (roster_elt->type & ROSTER_TYPE_SPECIAL)
1391 continue; // Skip special items
1386 1392
1387 if (type == ROSTER_TYPE_GROUP) { // (group names) 1393 if (type == ROSTER_TYPE_GROUP) { // (group names)
1388 if (btype == ROSTER_TYPE_GROUP) { 1394 if (roster_elt->name && *(roster_elt->name))
1389 const char *bname = buddy_getname(BUDDATA(buddy)); 1395 list = g_slist_append(list, from_utf8(roster_elt->name));
1390 if ((bname) && (*bname)) 1396 } else { // ROSTER_TYPE_USER (jid) (or agent, or chatroom...)
1391 list = g_slist_append(list, from_utf8(bname)); 1397 sl_roster_usrelt = roster_elt->list;
1398 while (sl_roster_usrelt) { // user list loop
1399 roster_usrelt = (roster*) sl_roster_usrelt->data;
1400
1401 if (roster_usrelt->jid)
1402 list = g_slist_append(list, from_utf8(roster_usrelt->jid));
1403
1404 sl_roster_usrelt = g_slist_next(sl_roster_usrelt);
1392 } 1405 }
1393 } else { // ROSTER_TYPE_USER (jid) (or agent, or chatroom...)
1394 const char *bjid = buddy_getjid(BUDDATA(buddy));
1395 if (bjid)
1396 list = g_slist_append(list, from_utf8(bjid));
1397 } 1406 }
1407 sl_roster_elt = g_slist_next(sl_roster_elt);
1398 } 1408 }
1399 1409
1400 return list; 1410 return list;
1401 } 1411 }
1402 1412