# HG changeset patch # User Sean Egan # Date 1016655037 0 # Node ID beb5d0e592d9167ce66353ee86aba0cb5830b639 # Parent 1e12a24b7f2765bab455bad75ce1a50d15648531 [gaim-migrate @ 3106] Oh well, that didn't work. committer: Tailor Script diff -r 1e12a24b7f27 -r beb5d0e592d9 ChangeLog --- a/ChangeLog Wed Mar 20 17:21:29 2002 +0000 +++ b/ChangeLog Wed Mar 20 20:10:37 2002 +0000 @@ -6,7 +6,6 @@ * Various sound cleanups (Thanks Robert McQueen) * Login process shown in single window (Thanks Michael Golden) - * Server side buddy lists for ICQ again * Can reorder your accounts in the account editor (Thanks Luke Schierer) * Updated Dutch translation diff -r 1e12a24b7f27 -r beb5d0e592d9 src/protocols/oscar/oscar.c --- a/src/protocols/oscar/oscar.c Wed Mar 20 17:21:29 2002 +0000 +++ b/src/protocols/oscar/oscar.c Wed Mar 20 20:10:37 2002 +0000 @@ -2245,7 +2245,8 @@ aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); - aim_ssi_reqrights(sess, fr->conn); + if (!odata->icq) + aim_ssi_reqrights(sess, fr->conn); return 1; } @@ -2667,74 +2668,96 @@ static void oscar_add_buddy(struct gaim_connection *g, char *name) { struct oscar_data *odata = (struct oscar_data *)g->proto_data; - if ((odata->sess->ssi.received_data) && !(aim_ssi_inlist(odata->sess, odata->conn, name, 0x0000))) { + 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))) { 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); + } } - } static void oscar_add_buddies(struct gaim_connection *g, GList *buddies) { struct oscar_data *odata = (struct oscar_data *)g->proto_data; - if (odata->sess->ssi.received_data) { - int tmp; - GSList *curgrp, *curbud; - 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)) - tmp++; - if (tmp) { - char **sns = (char **)malloc(tmp*sizeof(char*)); + if (odata->icq) { + char buf[MSG_LEN]; + int n=0; + while (buddies) { + if (n > MSG_LEN - 18) { + aim_bos_setbuddylist(odata->sess, odata->conn, buf); + n = 0; + } + n += g_snprintf(buf + n, sizeof(buf) - n, "%s&", (char *)buddies->data); + buddies = buddies->next; + } + aim_bos_setbuddylist(odata->sess, odata->conn, buf); + } else { + if (odata->sess->ssi.received_data) { + int tmp; + GSList *curgrp, *curbud; + 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)) { - 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; + if (!aim_ssi_inlist(odata->sess, odata->conn, ((struct buddy*)curbud->data)->name, 0x0000)) tmp++; - } - aim_ssi_addbuddies(odata->sess, odata->conn, ((struct group*)curgrp->data)->name, sns, tmp); - free(sns); + 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)) { + 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++; + } + aim_ssi_addbuddies(odata->sess, odata->conn, ((struct group*)curgrp->data)->name, sns, tmp); + free(sns); } + } } - } } static void oscar_remove_buddy(struct gaim_connection *g, char *name, char *group) { struct oscar_data *odata = (struct oscar_data *)g->proto_data; - - 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)) - debug_printf("ssi: deleted buddy %s from group %s\n", name, group); + if (odata->icq) { + 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)) + debug_printf("ssi: deleted buddy %s from group %s\n", name, group); + } } } - static void oscar_remove_buddies(struct gaim_connection *g, GList *buddies, char *group) { struct oscar_data *odata = (struct oscar_data *)g->proto_data; - - if (odata->sess->ssi.received_data) { + if (odata->icq) { GList *cur; - int tmp = 0; for (cur=buddies; cur; cur=cur->next) - if (aim_ssi_inlist(odata->sess, odata->conn, cur->data, 0x0000)) - tmp++; - if (tmp) { - char **sns; - sns = (char **)malloc(tmp*sizeof(char*)); - tmp = 0; + aim_remove_buddy(odata->sess, odata->conn, cur->data); + } else { + if (odata->sess->ssi.received_data) { + GList *cur; + int tmp = 0; for (cur=buddies; cur; cur=cur->next) - if (aim_ssi_inlist(odata->sess, odata->conn, cur->data, 0x0000)) { - debug_printf("ssi: deleting buddy %s from group %s\n", cur->data, group); - sns[tmp] = cur->data; + if (aim_ssi_inlist(odata->sess, odata->conn, cur->data, 0x0000)) tmp++; - } - aim_ssi_delbuddies(odata->sess, odata->conn, group, sns, tmp); - free(sns); + 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)) { + debug_printf("ssi: deleting buddy %s from group %s\n", cur->data, group); + sns[tmp] = cur->data; + tmp++; + } + aim_ssi_delbuddies(odata->sess, odata->conn, group, sns, tmp); + free(sns); + } } - } } @@ -2768,6 +2791,13 @@ debug_printf("ssi: syncing local list and server list\n"); + if (odata->icq) { + /* Delete the buddy list */ + debug_printf("ssi: using ICQ, removing ssi data\n"); + aim_ssi_deletelist(sess, fr->conn); + return 1; + } + /* Activate SSI */ debug_printf("ssi: activating server-stored buddy list\n"); aim_ssi_enable(sess, fr->conn); @@ -2905,7 +2935,7 @@ } } } - + return 1; }