From: Rob F. <rob...@us...> - 2002-04-12 02:15:27
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv7603/src Modified Files: buddy.c core.h dialogs.c gaim.h list.c prpl.h server.c Log Message: Jabber sync. fixen Index: buddy.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/buddy.c,v retrieving revision 1.301 retrieving revision 1.302 diff -u -d -r1.301 -r1.302 --- buddy.c 12 Apr 2002 02:13:13 -0000 1.301 +++ buddy.c 12 Apr 2002 02:15:24 -0000 1.302 @@ -754,6 +754,7 @@ GtkCTreeNode *node = gtk_ctree_find_by_row_data(GTK_CTREE(edittree), NULL, b); g_snprintf(b->show, sizeof(b->show), "%s", b->name); gtk_ctree_node_set_text(GTK_CTREE(edittree), node, 0, b->name); + serv_alias_buddy(b); if (gs) bs = find_buddy_show(gs, b->name); if (bs) @@ -1094,9 +1095,15 @@ } else new_g->members = g_slist_append(new_g->members, buddy); - /* we do the add after it's added locally so that prpls can find it if necessary */ - if (add) + /* + * we do the add after it's added locally so that prpls can find it if necessary + * JFIXME: Er, shouldn't the buddy be removed from the old server, as well? + */ + if (add) { serv_add_buddy(new_g->gc, buddy->name); + } else { + serv_move_buddy(buddy, old_g, new_g); + } do_export(buddy->gc); if (buddy->gc != new_g->gc) { Index: core.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/core.h,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- core.h 2 Mar 2002 04:52:21 -0000 1.16 +++ core.h 12 Apr 2002 02:15:24 -0000 1.17 @@ -110,10 +110,12 @@ #endif +#define BUDDY_ALIAS_MAXLEN 388 /* because MSN names can be 387 characters */ + struct buddy { int edittype; /* XXX CUI: this is really a GUI function and we need to put this in ui.h */ char name[80]; - char show[388]; /* because MSN names can be 387 characters */ + char show[BUDDY_ALIAS_MAXLEN]; int present; int evil; time_t signon; Index: dialogs.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/dialogs.c,v retrieving revision 1.315 retrieving revision 1.316 diff -u -d -r1.315 -r1.316 --- dialogs.c 28 Mar 2002 19:25:00 -0000 1.315 +++ dialogs.c 12 Apr 2002 02:15:24 -0000 1.316 @@ -3382,6 +3382,7 @@ char *al = gtk_entry_get_text(GTK_ENTRY(aliasname)); g_snprintf(b->show, sizeof(b->show), "%s", (al && strlen(al)) ? al : b->name); handle_buddy_rename(b, b->name); + serv_alias_buddy(b); destroy_dialog(aliasdlg, aliasdlg); } Index: gaim.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/gaim.h,v retrieving revision 1.316 retrieving revision 1.317 diff -u -d -r1.316 -r1.317 --- gaim.h 29 Mar 2002 13:28:55 -0000 1.316 +++ gaim.h 12 Apr 2002 02:15:24 -0000 1.317 @@ -396,6 +396,8 @@ extern int serv_chat_send(struct gaim_connection *, int, char *); extern void serv_got_popup(char *, char *, int, int); extern void serv_get_away(struct gaim_connection *, char *); +extern void serv_alias_buddy(struct buddy *); +extern void serv_move_buddy(struct buddy *, struct group *, struct group *); /* Functions in util.c */ extern char *normalize(const char *); Index: list.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/list.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- list.c 15 Mar 2002 00:56:15 -0000 1.13 +++ list.c 12 Apr 2002 02:15:24 -0000 1.14 @@ -366,7 +366,7 @@ how_many++; } } else if (*c == 'b' && !find_buddy(gc, c + 2)) { - char nm[80], sw[388], *tmp = c + 2; + char nm[80], sw[BUDDY_ALIAS_MAXLEN], *tmp = c + 2; int i = 0; while (*tmp != ':' && *tmp && i < sizeof(nm) - 1) nm[i++] = *tmp++; Index: prpl.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/prpl.h,v retrieving revision 1.64 retrieving revision 1.65 diff -u -d -r1.64 -r1.65 --- prpl.h 14 Mar 2002 07:44:43 -0000 1.64 +++ prpl.h 12 Apr 2002 02:15:24 -0000 1.65 @@ -161,6 +161,12 @@ void (* get_cb_info) (struct gaim_connection *, int, char *who); void (* get_cb_away) (struct gaim_connection *, int, char *who); + /* save/store buddy's alias on server list/roster */ + void (* alias_buddy) (struct gaim_connection *, char *who); + + /* change a buddy's group on a server list/roster */ + void (* group_buddy) (struct gaim_connection *, char *who, char *old_group, char *new_group); + void (* buddy_free) (struct buddy *); /* this is really bad. */ Index: server.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/server.c,v retrieving revision 1.225 retrieving revision 1.226 diff -u -d -r1.225 -r1.226 --- server.c 3 Apr 2002 07:23:02 -0000 1.225 +++ server.c 12 Apr 2002 02:15:24 -0000 1.226 @@ -285,6 +285,36 @@ } } +/* + * Set buddy's alias on server roster/list + */ +void serv_alias_buddy(struct buddy *b) +{ + if(b && b->gc && b->gc->prpl && b->gc->prpl->alias_buddy) { + b->gc->prpl->alias_buddy(b->gc, b->name); + } +} + +/* + * Move a buddy from one group to another on server. + * + * Note: For now we'll not deal with changing gc's at the same time, but + * it should be possible. Probably needs to be done, someday. + */ +void serv_move_buddy(struct buddy *b, struct group *og, struct group *ng) +{ + if(b && b->gc && og && og->gc && ng && ng->gc) { + /* + * If there are no connection changes... + */ + if(b->gc == og->gc && b->gc == ng->gc && ng->gc == og->gc) { + if(b->gc->prpl && b->gc->prpl->group_buddy) { + b->gc->prpl->group_buddy(b->gc, b->name, og->name, ng->name); + } + } + } +} + void serv_add_permit(struct gaim_connection *g, char *name) { if (g && g_slist_find(connections, g) && g->prpl && g->prpl->add_permit) |