diff src/protocols/oscar/oscar.c @ 3017:f0e8770d786d

[gaim-migrate @ 3030] Better SSI stuff? Thanks, KingAnt. committer: Tailor Script <tailor@pidgin.im>
author Rob Flynn <gaim@robflynn.com>
date Thu, 07 Mar 2002 02:19:38 +0000
parents 8863555aacc6
children eafd12638829
line wrap: on
line diff
--- a/src/protocols/oscar/oscar.c	Thu Mar 07 00:46:10 2002 +0000
+++ b/src/protocols/oscar/oscar.c	Thu Mar 07 02:19:38 2002 +0000
@@ -2708,9 +2708,11 @@
 	if (odata->icq) {
 		aim_remove_buddy(odata->sess, odata->conn, name);
 	} else {
-		if (odata->sess->ssi.received_data)
-			while (aim_ssi_inlist(odata->sess, odata->conn, name, 0x0000) && !aim_ssi_delbuddies(odata->sess, odata->conn, group, &name, 1))
+		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);
+		}
 	}
 }
 
@@ -2769,14 +2771,14 @@
 	struct gaim_connection *gc = sess->aux_data;
 	struct oscar_data *odata = (struct oscar_data *)gc->proto_data;
 	struct aim_ssi_item *curitem;
-	GSList *mem;
 	int tmp;
 	char **sns;
 
 	debug_printf("ssi: syncing local list and server list\n");
 
-	/* Delete the buddy list */
 	if (odata->icq) {
+		/* Delete the buddy list */
+		debug_printf("ssi: using ICQ, removing ssi data\n");
 		aim_ssi_deletelist(sess, fr->conn);
 		return 1;
 	}
@@ -2853,68 +2855,67 @@
 
 	/* Add from local list to server list */
 	if (gc) {
+		GSList *cur;
+
 		/* Buddies */
-		GSList *curgrp = gc->groups;
-		while (curgrp) {
-			tmp = 0;
-			for (mem=((struct group*)curgrp->data)->members; mem; mem=mem->next)
-				if (!aim_ssi_inlist(sess, fr->conn, ((struct buddy*)mem->data)->name, 0x0000))
-					tmp++;
-			sns = (char **)malloc(tmp*sizeof(char*));
+		cur = gc->groups;
+		while (cur) {
+			GSList *curbud;
 			tmp = 0;
-			for (mem=((struct group*)curgrp->data)->members; mem; mem=mem->next)
-				if (!aim_ssi_inlist(sess, fr->conn, ((struct buddy*)mem->data)->name, 0x0000)) {
-					debug_printf("ssi: adding buddy %s from local list to server list\n", ((struct buddy*)mem->data)->name);
-					sns[tmp] = ((char *)((struct buddy*)mem->data)->name);
+			for (curbud=((struct group*)cur->data)->members; curbud; curbud=curbud->next)
+				if (!aim_ssi_inlist(sess, fr->conn, ((struct buddy*)curbud->data)->name, 0x0000))
 					tmp++;
-				}
 			if (tmp) {
-				aim_ssi_addbuddies(sess, fr->conn, ((struct group*)curgrp)->name, sns, 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)) {
+						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++;
+					}
+				aim_ssi_addbuddies(sess, fr->conn, ((struct group*)cur->data)->name, sns, tmp);
 				free(sns);
 			}
-			curgrp = g_slist_next(curgrp);
+			cur = g_slist_next(cur);
 		}
 
 		/* Permit list */
 		if (gc->permit) {
-			GSList *list;
 			tmp = 0;
-			for (list=gc->permit; list; list=list->next)
-				if (!aim_ssi_inlist(sess, fr->conn, list->data, 0x0002)) {
+			for (cur=gc->permit; cur; cur=cur->next)
+				if (!aim_ssi_inlist(sess, fr->conn, cur->data, 0x0002))
 					tmp++;
-				}
-			sns = (char **)malloc(tmp*sizeof(char*));
-			tmp = 0;
-			for (list=gc->permit; list; list=list->next)
-				if (!aim_ssi_inlist(sess, fr->conn, list->data, 0x0002)) {
-					debug_printf("ssi: adding permit %s from local list to server list\n", list->data);
-					sns[tmp] = list->data;
-					tmp++;
-				}
 			if (tmp) {
-				aim_ssi_addpermits(sess, fr->conn, sns, 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)) {
+						debug_printf("ssi: adding permit %s from local list to server list\n", cur->data);
+						sns[tmp] = cur->data;
+						tmp++;
+					}
+				aim_ssi_addpord(sess, fr->conn, sns, tmp, AIM_SSI_TYPE_PERMIT);
 				free(sns);
 			}
 		}
 
 		/* Deny list */
 		if (gc->deny) {
-			GSList *list;
 			tmp = 0;
-			for (list=gc->deny; list; list=list->next)
-				if (!aim_ssi_inlist(sess, fr->conn, list->data, 0x0003)) {
+			for (cur=gc->deny; cur; cur=cur->next)
+				if (!aim_ssi_inlist(sess, fr->conn, cur->data, 0x0003))
 					tmp++;
-				}
-			sns = (char **)malloc(tmp*sizeof(char*));
-			tmp = 0;
-			for (list=gc->deny; list; list=list->next)
-				if (!aim_ssi_inlist(sess, fr->conn, list->data, 0x0003)) {
-					debug_printf("ssi: adding deny %s from local list to server list\n", list->data);
-					sns[tmp] = list->data;
-					tmp++;
-				}
 			if (tmp) {
-				aim_ssi_adddenies(sess, fr->conn, sns, 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)) {
+						debug_printf("ssi: adding deny %s from local list to server list\n", cur->data);
+						sns[tmp] = cur->data;
+						tmp++;
+					}
+				aim_ssi_addpord(sess, fr->conn, sns, tmp, AIM_SSI_TYPE_DENY);
 				free(sns);
 			}
 		}
@@ -3383,7 +3384,7 @@
 	} else {
 		debug_printf("ssi: About to add a permit\n");
 		if (od->sess->ssi.received_data)
-			aim_ssi_addpermits(od->sess, od->conn, &who, 1);
+			aim_ssi_addpord(od->sess, od->conn, &who, 1, AIM_SSI_TYPE_PERMIT);
 	}
 }
 
@@ -3395,7 +3396,7 @@
 	} else {
 		debug_printf("ssi: About to add a deny\n");
 		if (od->sess->ssi.received_data)
-			aim_ssi_adddenies(od->sess, od->conn, &who, 1);
+			aim_ssi_addpord(od->sess, od->conn, &who, 1, AIM_SSI_TYPE_DENY);
 	}
 }
 
@@ -3407,7 +3408,7 @@
 	} else {
 		debug_printf("ssi: About to delete a permit\n");
 		if (od->sess->ssi.received_data)
-			aim_ssi_delpermits(od->sess, od->conn, &who, 1);
+			aim_ssi_delpord(od->sess, od->conn, &who, 1, AIM_SSI_TYPE_PERMIT);
 	}
 }
 
@@ -3419,7 +3420,7 @@
 	} else {
 		debug_printf("ssi: About to delete a deny\n");
 		if (od->sess->ssi.received_data)
-			aim_ssi_deldenies(od->sess, od->conn, &who, 1);
+			aim_ssi_delpord(od->sess, od->conn, &who, 1, AIM_SSI_TYPE_DENY);
 	}
 }