Mercurial > pidgin
diff src/protocols/oscar/ssi.c @ 3348:dd34e0b40fed
[gaim-migrate @ 3367]
Support for server-side synchronization on group rename. (Thanks, Mark
Doliner)
committer: Tailor Script <tailor@pidgin.im>
author | Jim Seymour <jseymour> |
---|---|
date | Sun, 07 Jul 2002 14:31:57 +0000 |
parents | f56d084d4046 |
children | 7a3f16a375a5 |
line wrap: on
line diff
--- a/src/protocols/oscar/ssi.c Fri Jul 05 22:27:40 2002 +0000 +++ b/src/protocols/oscar/ssi.c Sun Jul 07 14:31:57 2002 +0000 @@ -94,7 +94,7 @@ */ static int aim_ssi_itemlist_rebuildgroup(struct aim_ssi_item **list, struct aim_ssi_item *parentgroup) { - int newlen, i; + int newlen; struct aim_ssi_item *cur; /* Free the old additional data */ @@ -517,7 +517,7 @@ } /* Send the add item SNAC */ - if (i = aim_ssi_addmoddel(sess, conn, newitems, num, AIM_CB_SSI_ADD)) { + if ((i = aim_ssi_addmoddel(sess, conn, newitems, num, AIM_CB_SSI_ADD))) { free(newitems); return -i; } @@ -526,11 +526,11 @@ free(newitems); /* Rebuild the additional data in the parent group */ - if (i = aim_ssi_itemlist_rebuildgroup(&sess->ssi.items, parentgroup)) + if ((i = aim_ssi_itemlist_rebuildgroup(&sess->ssi.items, parentgroup))) return i; /* Send the mod item SNAC */ - if (i = aim_ssi_addmoddel(sess, conn, &parentgroup, 1, AIM_CB_SSI_MOD)) + if ((i = aim_ssi_addmoddel(sess, conn, &parentgroup, 1, AIM_CB_SSI_MOD))) return i; /* Begin sending SSI SNACs */ @@ -608,7 +608,7 @@ } /* Send the add item SNAC */ - if (i = aim_ssi_addmoddel(sess, conn, newitems, num, AIM_CB_SSI_ADD)) { + if ((i = aim_ssi_addmoddel(sess, conn, newitems, num, AIM_CB_SSI_ADD))) { free(newitems); return -i; } @@ -617,11 +617,11 @@ free(newitems); /* Rebuild the additional data in the parent group */ - if (i = aim_ssi_itemlist_rebuildgroup(&sess->ssi.items, parentgroup)) + if ((i = aim_ssi_itemlist_rebuildgroup(&sess->ssi.items, parentgroup))) return i; /* Send the mod item SNAC */ - if (i = aim_ssi_addmoddel(sess, conn, &parentgroup, 1, AIM_CB_SSI_MOD)) + if ((i = aim_ssi_addmoddel(sess, conn, &parentgroup, 1, AIM_CB_SSI_MOD))) return i; /* Begin sending SSI SNACs */ @@ -664,7 +664,7 @@ } /* Send the add item SNAC */ - if (i = aim_ssi_addmoddel(sess, conn, newitems, num, AIM_CB_SSI_ADD)) { + if ((i = aim_ssi_addmoddel(sess, conn, newitems, num, AIM_CB_SSI_ADD))) { free(newitems); return -i; } @@ -714,8 +714,11 @@ /* Look up the new parent group */ if (!(groups[1] = aim_ssi_itemlist_finditem(sess->ssi.items, NULL, newgn, AIM_SSI_TYPE_GROUP))) { - free(groups); - return -ENOMEM; + aim_ssi_addgroups(sess, conn, &newgn, 1); + if (!(groups[1] = aim_ssi_itemlist_finditem(sess->ssi.items, NULL, newgn, AIM_SSI_TYPE_GROUP))) { + free(groups); + return -ENOMEM; + } } /* Send the delete item SNAC */ @@ -753,6 +756,46 @@ } /** + * Rename a group. I really like how this is done. It turns me on. + * + * Did I say that out loud?... + * + * @param sess The oscar session. + * @param conn The bos connection for this session. + * @param oldgn The old group name. + * @param newgn The new group name. + * @return Return 0 if no errors, otherwise return the error number. + */ +faim_export int aim_ssi_rename_group(aim_session_t *sess, aim_conn_t *conn, char *oldgn, char *newgn) +{ + struct aim_ssi_item *group; + + if (!sess || !conn || !oldgn || !newgn) + return -EINVAL; + + /* Look up the group */ + if (!(group = aim_ssi_itemlist_finditem(sess->ssi.items, NULL, oldgn, AIM_SSI_TYPE_GROUP))) + return -ENOMEM; + + /* Free the old group name and copy the new one in its place. */ + if (group->name) + free(group->name); + if (!(group->name = (char *)malloc((strlen(newgn)+1)*sizeof(char)))) { + group->name = NULL; + return -ENOMEM; + } + strcpy(group->name, newgn); + + /* Send the mod item SNAC */ + aim_ssi_addmoddel(sess, conn, &group, 1, AIM_CB_SSI_MOD); + + /* Begin sending SSI SNACs */ + aim_ssi_dispatch(sess, conn); + + return 0; +} + +/** * Delete an array of screen names from the given group. * * @param sess The oscar session. @@ -1012,8 +1055,7 @@ * @return Return 0 if no errors, otherwise return the error number. */ faim_export int aim_ssi_setpermdeny(aim_session_t *sess, aim_conn_t *conn, fu8_t permdeny, fu32_t vismask) { - struct aim_ssi_item *cur, *tmp; - fu16_t j; + struct aim_ssi_item *cur; aim_tlv_t *tlv; if (!sess || !conn) @@ -1077,8 +1119,7 @@ * @return Return 0 if no errors, otherwise return the error number. */ faim_export int aim_ssi_setpresence(aim_session_t *sess, aim_conn_t *conn, fu32_t presence) { - struct aim_ssi_item *cur, *tmp; - fu16_t j; + struct aim_ssi_item *cur; aim_tlv_t *tlv; if (!sess || !conn)