Mercurial > pidgin
diff src/protocols/oscar/oscar.c @ 3210:5e90ecb578c5
[gaim-migrate @ 3227]
Among other things, a warning for when your OSCAR buddy list is too long. Thanks KingAnt
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sun, 05 May 2002 18:42:11 +0000 |
parents | 51e4fb38a140 |
children | 56746b0868db |
line wrap: on
line diff
--- a/src/protocols/oscar/oscar.c Sun May 05 01:16:45 2002 +0000 +++ b/src/protocols/oscar/oscar.c Sun May 05 18:42:11 2002 +0000 @@ -2785,7 +2785,7 @@ if (odata->icq) { aim_add_buddy(odata->sess, odata->conn, name); } else { - if ((odata->sess->ssi.received_data) && !(aim_ssi_inlist(odata->sess, odata->conn, name, 0x0000))) { + if ((odata->sess->ssi.received_data) && !(aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, name, 0x0000))) { debug_printf("ssi: adding buddy %s to group %s\n", name, find_group_by_buddy(g, name)->name); aim_ssi_addbuddies(odata->sess, odata->conn, find_group_by_buddy(g, name)->name, &name, 1); } @@ -2813,13 +2813,13 @@ for (curgrp=g->groups; curgrp; curgrp=g_slist_next(curgrp)) { tmp = 0; for (curbud=((struct group*)curgrp->data)->members; curbud; curbud=curbud->next) - if (!aim_ssi_inlist(odata->sess, odata->conn, ((struct buddy*)curbud->data)->name, 0x0000)) + if (!aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, ((struct buddy*)curbud->data)->name, 0x0000)) tmp++; if (tmp) { char **sns = (char **)malloc(tmp*sizeof(char*)); tmp = 0; for (curbud=((struct group*)curgrp->data)->members; curbud; curbud=curbud->next) - if (!aim_ssi_inlist(odata->sess, odata->conn, ((struct buddy*)curbud->data)->name, 0x0000)) { + if (!aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, ((struct buddy*)curbud->data)->name, 0x0000)) { debug_printf("ssi: adding buddy %s to group %s\n", ((struct buddy*)curbud->data)->name, ((struct group*)curgrp->data)->name); sns[tmp] = (char *)((struct buddy*)curbud->data)->name; tmp++; @@ -2847,8 +2847,8 @@ aim_remove_buddy(odata->sess, odata->conn, name); } else { if (odata->sess->ssi.received_data) { - char *ssigroup; - while (aim_ssi_inlist(odata->sess, odata->conn, name, 0x0000) && (ssigroup = aim_ssi_getparentgroup(odata->sess, odata->conn, name)) && !aim_ssi_delbuddies(odata->sess, odata->conn, ssigroup, &name, 1)) + struct aim_ssi_item *ssigroup; + while (aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, name, 0x0000) && (ssigroup = aim_ssi_itemlist_findparent(odata->sess->ssi.items, name)) && !aim_ssi_delbuddies(odata->sess, odata->conn, ssigroup->name, &name, 1)) debug_printf("ssi: deleted buddy %s from group %s\n", name, group); } } @@ -2865,14 +2865,14 @@ GList *cur; int tmp = 0; for (cur=buddies; cur; cur=cur->next) - if (aim_ssi_inlist(odata->sess, odata->conn, cur->data, 0x0000)) + if (aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, cur->data, 0x0000)) tmp++; if (tmp) { char **sns; sns = (char **)malloc(tmp*sizeof(char*)); tmp = 0; for (cur=buddies; cur; cur=cur->next) - if (aim_ssi_inlist(odata->sess, odata->conn, cur->data, 0x0000)) { + if (aim_ssi_itemlist_finditem(odata->sess->ssi.items, NULL, cur->data, 0x0000)) { debug_printf("ssi: deleting buddy %s from group %s\n", cur->data, group); sns[tmp] = cur->data; tmp++; @@ -2919,7 +2919,7 @@ aim_ssi_enable(sess, fr->conn); /* Clean the buddy list */ - /* aim_ssi_cleanlist(sess, fr->conn); */ + aim_ssi_cleanlist(sess, fr->conn); /* Add from server list to local list */ tmp = 0; @@ -2972,7 +2972,7 @@ case 0x0004: /* Permit/deny setting */ if (curitem->data) { fu8_t permdeny; - if ((permdeny = aim_ssi_getpermdeny(sess, fr->conn)) && (permdeny != gc->permdeny)) { + if ((permdeny = aim_ssi_getpermdeny(sess->ssi.items)) && (permdeny != gc->permdeny)) { debug_printf("ssi: changing permdeny from %d to %d\n", gc->permdeny, permdeny); gc->permdeny = permdeny; tmp++; @@ -2998,13 +2998,13 @@ GSList *curbud; tmp = 0; for (curbud=((struct group*)cur->data)->members; curbud; curbud=curbud->next) - if (!aim_ssi_inlist(sess, fr->conn, ((struct buddy*)curbud->data)->name, 0x0000)) + if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, ((struct buddy*)curbud->data)->name, 0x0000)) tmp++; if (tmp) { sns = (char **)malloc(tmp*sizeof(char*)); tmp = 0; for (curbud=((struct group*)cur->data)->members; curbud; curbud=curbud->next) - if (!aim_ssi_inlist(sess, fr->conn, ((struct buddy*)curbud->data)->name, 0x0000)) { + if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, ((struct buddy*)curbud->data)->name, 0x0000)) { debug_printf("ssi: adding buddy %s from local list to server list\n", ((struct buddy*)curbud->data)->name); sns[tmp] = ((char *)((struct buddy*)curbud->data)->name); tmp++; @@ -3019,13 +3019,13 @@ if (gc->permit) { tmp = 0; for (cur=gc->permit; cur; cur=cur->next) - if (!aim_ssi_inlist(sess, fr->conn, cur->data, 0x0002)) + if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, cur->data, 0x0002)) tmp++; if (tmp) { sns = (char **)malloc(tmp*sizeof(char*)); tmp = 0; for (cur=gc->permit; cur; cur=cur->next) - if (!aim_ssi_inlist(sess, fr->conn, cur->data, 0x0002)) { + if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, cur->data, 0x0002)) { debug_printf("ssi: adding permit %s from local list to server list\n", cur->data); sns[tmp] = cur->data; tmp++; @@ -3039,13 +3039,13 @@ if (gc->deny) { tmp = 0; for (cur=gc->deny; cur; cur=cur->next) - if (!aim_ssi_inlist(sess, fr->conn, cur->data, 0x0003)) + if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, cur->data, 0x0003)) tmp++; if (tmp) { sns = (char **)malloc(tmp*sizeof(char*)); tmp = 0; for (cur=gc->deny; cur; cur=cur->next) - if (!aim_ssi_inlist(sess, fr->conn, cur->data, 0x0003)) { + if (!aim_ssi_itemlist_finditem(sess->ssi.items, NULL, cur->data, 0x0003)) { debug_printf("ssi: adding deny %s from local list to server list\n", cur->data); sns[tmp] = cur->data; tmp++; @@ -3056,10 +3056,23 @@ } /* Presence settings (idle time visibility) */ - if ((tmp = aim_ssi_getpresence(sess, fr->conn)) != 0xFFFFFFFF) + if ((tmp = aim_ssi_getpresence(sess->ssi.items)) != 0xFFFFFFFF) if (report_idle && !(tmp & 0x400)) aim_ssi_setpresence(sess, fr->conn, tmp | 0x400); - } + + /* Check for maximum number of buddies */ + for (cur=gc->groups, tmp=0; cur; cur=g_slist_next(cur)) { + tmp = tmp + g_slist_length(cur->data->members); + + if (tmp > odata->rights.maxbuddies) { + char *dialog_msg = g_strdup_printf(_("The maximum number of buddies allowed in your buddy list is %d, and you have %d." + " Until you are below the limit, some buddies will not show up as online."), + odata->rights.maxbuddies, tmp); + do_error_dialog(dialog_msg, _("Gaim - Warning")); + g_free(dialog_msg); + } + + } /* end if (gc) */ return 1; } @@ -3520,7 +3533,7 @@ signoff_blocked(gc); } else { if (od->sess->ssi.received_data) - aim_ssi_setpermdeny(od->sess, od->conn, gc->permdeny); + aim_ssi_setpermdeny(od->sess, od->conn, gc->permdeny, 0xffffffff); } }