Mercurial > ~mikael > mcabber > hg
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 |