Mercurial > pidgin
diff src/protocols/msn/msn.c @ 5518:bf2a7a7b739d
[gaim-migrate @ 5918]
Reworked the group support. You should now be able to delete groups by
dragging a user into them and then back out.
I stress _should_. This will likely have bugs. I cleaned up the ones I
found, I think, but I'm not 100% confident here :) Please test! Preferably
on test accounts, but it won't kill things, just reorder stuff.
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Sun, 25 May 2003 22:51:19 +0000 |
| parents | b87d7459e7d2 |
| children | 187c740f2a4e |
line wrap: on
line diff
--- a/src/protocols/msn/msn.c Sun May 25 19:47:13 2003 +0000 +++ b/src/protocols/msn/msn.c Sun May 25 22:51:19 2003 +0000 @@ -989,18 +989,20 @@ static void msn_group_buddy(struct gaim_connection *gc, const char *who, - const char *old_group, const char *new_group) + const char *old_group_name, const char *new_group_name) { MsnSession *session = gc->proto_data; char outparams[MSN_BUF_LEN]; - gint *old_group_id, *new_group_id; + MsnGroup *old_group, *new_group; + + old_group = msn_groups_find_with_name(session->groups, old_group_name); + new_group = msn_groups_find_with_name(session->groups, new_group_name); - old_group_id = g_hash_table_lookup(session->group_ids, old_group); - new_group_id = g_hash_table_lookup(session->group_ids, new_group); + gaim_debug(GAIM_DEBUG_MISC, "msn", "new_group = %p\n", new_group); - if (new_group_id == NULL) { + if (new_group == NULL) { g_snprintf(outparams, sizeof(outparams), "%s 0", - msn_url_encode(new_group)); + msn_url_encode(new_group_name)); if (!msn_servconn_send_command(session->notification_conn, "ADG", outparams)) { @@ -1010,12 +1012,18 @@ } /* I hate this. So much. */ - session->moving_buddy = TRUE; - session->dest_group_name = g_strdup(new_group); + session->moving_buddy = TRUE; + session->dest_group_name = g_strdup(new_group_name); + session->old_group = old_group; + + session->moving_user = + msn_users_find_with_passport(session->users, who); + + msn_user_ref(session->moving_user); } else { g_snprintf(outparams, sizeof(outparams), "FL %s %s %d", - who, who, *new_group_id); + who, who, msn_group_get_id(new_group)); if (!msn_servconn_send_command(session->notification_conn, "ADD", outparams)) { @@ -1025,9 +1033,9 @@ } } - if (old_group_id != NULL) { + if (old_group != NULL) { g_snprintf(outparams, sizeof(outparams), "FL %s %d", - who, *old_group_id); + who, msn_group_get_id(old_group)); if (!msn_servconn_send_command(session->notification_conn, "REM", outparams)) { @@ -1035,36 +1043,55 @@ signoff(gc); return; } + + if (msn_users_get_count(msn_group_get_users(old_group)) <= 0) { + g_snprintf(outparams, sizeof(outparams), "%d", + msn_group_get_id(old_group)); + + if (!msn_servconn_send_command(session->notification_conn, + "RMG", outparams)) { + + hide_login_progress(gc, _("Write error")); + signoff(gc); + return; + } + } } } static void -msn_rename_group(struct gaim_connection *gc, const char *old_group, - const char *new_group, GList *members) +msn_rename_group(struct gaim_connection *gc, const char *old_group_name, + const char *new_group_name, GList *members) { MsnSession *session = gc->proto_data; char outparams[MSN_BUF_LEN]; - int *group_id; + MsnGroup *old_group; - if (g_hash_table_lookup_extended(session->group_ids, old_group, - NULL, (gpointer)&group_id)) { + if ((old_group = msn_groups_find_with_name(session->groups, + old_group_name)) != NULL) { + g_snprintf(outparams, sizeof(outparams), "%d %s 0", - *group_id, msn_url_encode(new_group)); + msn_group_get_id(old_group), + msn_url_encode(new_group_name)); if (!msn_servconn_send_command(session->notification_conn, "REG", outparams)) { hide_login_progress(gc, _("Write error")); signoff(gc); + return; } + + msn_group_set_name(old_group, new_group_name); } else { g_snprintf(outparams, sizeof(outparams), "%s 0", - msn_url_encode(new_group)); + msn_url_encode(new_group_name)); if (!msn_servconn_send_command(session->notification_conn, "ADG", outparams)) { hide_login_progress(gc, _("Write error")); signoff(gc); + return; } } }
