# HG changeset patch # User Eric Warmenhoven # Date 1001031252 0 # Node ID b53cd5b63a996d30b7602172c0a845cf3d623779 # Parent de907b3cf529e6530ddd2805a5cb869eeb77440d [gaim-migrate @ 2347] i feel like everyone's watching me committer: Tailor Script diff -r de907b3cf529 -r b53cd5b63a99 src/buddy.c --- a/src/buddy.c Thu Sep 20 21:44:52 2001 +0000 +++ b/src/buddy.c Fri Sep 21 00:14:12 2001 +0000 @@ -869,7 +869,6 @@ delb = (struct buddy *)mem->data; delg->members = g_slist_remove(delg->members, delb); - serv_remove_buddy(gc, delb->name); gs = find_group_show(rem_g->name); if (gs) { @@ -907,9 +906,8 @@ update_buttons_by_protocol(c); g_free(delb); - /* flush buddy list to cache */ - - do_export(gc); + /* we don't flush buddy list to cache because in the case of remove_group that would + * mean writing to the buddy list file once for each buddy, plus one more time */ } void remove_group(struct gaim_connection *gc, struct group *rem_g) @@ -917,6 +915,7 @@ GSList *grp; GSList *mem; struct group_show *gs; + GList *tmp = NULL; struct group *delg; struct buddy *delb; @@ -930,6 +929,7 @@ while(delg->members) { delb = (struct buddy *)delg->members->data; + tmp = g_list_append(tmp, g_strdup(delb->name)); remove_buddy(gc, delg, delb); /* this should take care of removing the group_show if necessary */ } @@ -944,9 +944,14 @@ } g_free(delg); - /* flush buddy list to cache */ - - do_export(gc); + serv_remove_buddies(gc, tmp); + while (tmp) { + g_free(tmp->data); + tmp = g_list_remove(tmp, tmp->data); + } + + /* don't flush buddy list to cache in order to be consistent with remove_buddy, + * mostly. remove_group is only called from one place, so we'll let it handle it. */ } @@ -1386,6 +1391,7 @@ b = (struct buddy *)type; g = find_group_by_buddy(b->gc, b->name); gct = b->gc; + serv_remove_buddy(b->gc, b->name); remove_buddy(b->gc, g, b); gtk_ctree_remove_node(GTK_CTREE(edittree), node); do_export(gct); diff -r de907b3cf529 -r b53cd5b63a99 src/conversation.c --- a/src/conversation.c Thu Sep 20 21:44:52 2001 +0000 +++ b/src/conversation.c Fri Sep 21 00:14:12 2001 +0000 @@ -532,7 +532,9 @@ { if (c->gc && find_buddy(c->gc, c->name) != NULL) { debug_printf(_("Removing '%s' from buddylist.\n"), c->name); + serv_remove_buddy(c->gc, c->name); remove_buddy(c->gc, find_group_by_buddy(c->gc, c->name), find_buddy(c->gc, c->name)); + do_export(c->gc); build_edit_tree(); update_convo_add_button(c); } else { diff -r de907b3cf529 -r b53cd5b63a99 src/dialogs.c --- a/src/dialogs.c Thu Sep 20 21:44:52 2001 +0000 +++ b/src/dialogs.c Fri Sep 21 00:14:12 2001 +0000 @@ -454,107 +454,6 @@ -void show_error_dialog(char *d) -{ - - int no = atoi(d); - char *w; - char buf[256]; - char buf2[32]; - - plugin_event(event_error, (void *)no, 0, 0, 0); - - w = strtok(NULL, ":"); - - - switch(no) { - case 69: - g_snprintf(buf, sizeof(buf), _("Unable to write file %s."), w); - break; - case 169: - g_snprintf(buf, sizeof(buf), _("Unable to read file %s."), w); - break; - case 269: - g_snprintf(buf, sizeof(buf), _("Message too long, last %s bytes truncated."), w); - break; - case 901: - g_snprintf(buf, sizeof(buf), _("%s not currently logged in."), w); - break; - case 902: - g_snprintf(buf, sizeof(buf), _("Warning of %s not allowed."), w); - break; - case 903: - g_snprintf(buf, sizeof(buf), _("A message has been dropped, you are exceeding the server speed limit.")); - break; - case 950: - g_snprintf(buf, sizeof(buf), _("Chat in %s is not available."), w); - break; - case 960: - g_snprintf(buf, sizeof(buf), _("You are sending messages too fast to %s."), w); - break; - case 961: - g_snprintf(buf, sizeof(buf), _("You missed an IM from %s because it was too big."), w); - break; - case 962: - g_snprintf(buf, sizeof(buf), _("You missed an IM from %s because it was sent too fast."), w); - break; - case 970: - g_snprintf(buf, sizeof(buf), _("Failure.")); - break; - case 971: - g_snprintf(buf, sizeof(buf), _("Too many matches.")); - break; - case 972: - g_snprintf(buf, sizeof(buf), _("Need more qualifiers.")); - break; - case 973: - g_snprintf(buf, sizeof(buf), _("Dir service temporarily unavailable.")); - break; - case 974: - g_snprintf(buf, sizeof(buf), _("Email lookup restricted.")); - break; - case 975: - g_snprintf(buf, sizeof(buf), _("Keyword ignored.")); - break; - case 976: - g_snprintf(buf, sizeof(buf), _("No keywords.")); - break; - case 977: - g_snprintf(buf, sizeof(buf), _("User has no directory information.")); - /* g_snprintf(buf, sizeof(buf), "Language not supported."); */ - break; - case 978: - g_snprintf(buf, sizeof(buf), _("Country not supported.")); - break; - case 979: - g_snprintf(buf, sizeof(buf), _("Failure unknown: %s."), w); - break; - case 980: - g_snprintf(buf, sizeof(buf), _("Incorrect nickname or password.")); - break; - case 981: - g_snprintf(buf, sizeof(buf), _("The service is temporarily unavailable.")); - break; - case 982: - g_snprintf(buf, sizeof(buf), _("Your warning level is currently too high to log in.")); - break; - case 983: - g_snprintf(buf, sizeof(buf), _("You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer.")); - break; - case 989: - g_snprintf(buf, sizeof(buf), _("An unknown signon error has occurred: %s."), w); - break; - default: - g_snprintf(buf, sizeof(buf), _("An unknown error, %d, has occured. Info: %s"), no, w); - } - - g_snprintf(buf2, sizeof(buf2), _("Gaim - Error %d"), no); - - - do_error_dialog(buf, buf2); - return; -} - static void do_im(GtkWidget *widget, GtkWidget *imentry) { char *who; diff -r de907b3cf529 -r b53cd5b63a99 src/gaim.h --- a/src/gaim.h Thu Sep 20 21:44:52 2001 +0000 +++ b/src/gaim.h Fri Sep 21 00:14:12 2001 +0000 @@ -664,6 +664,7 @@ extern void serv_add_buddy(struct gaim_connection *, char *); extern void serv_add_buddies(struct gaim_connection *, GList *); extern void serv_remove_buddy(struct gaim_connection *, char *); +extern void serv_remove_buddies(struct gaim_connection *, GList *); extern void serv_add_permit(struct gaim_connection *, char *); extern void serv_add_deny(struct gaim_connection *, char *); extern void serv_rem_permit(struct gaim_connection *, char *); @@ -843,7 +844,6 @@ extern void do_export(struct gaim_connection *); extern void show_warn_dialog(struct gaim_connection *, char *); extern GtkWidget *do_error_dialog(char *, char *); -extern void show_error_dialog(char *); extern void show_im_dialog(); extern void some_name(char *); extern void show_info_dialog(); diff -r de907b3cf529 -r b53cd5b63a99 src/protocols/toc/toc.c --- a/src/protocols/toc/toc.c Thu Sep 20 21:44:52 2001 +0000 +++ b/src/protocols/toc/toc.c Fri Sep 21 00:14:12 2001 +0000 @@ -236,6 +236,9 @@ len = MSG_LEN; } + if (olen < 0) + debug_printf("TOC C: %s\n", buf); + hdr.ast = '*'; hdr.type = type; hdr.seqno = htons(tdt->seqno++ & 0xffff); @@ -308,6 +311,98 @@ g_show_info_text(url_text, NULL); } +static char *show_error_message(char *d) +{ + int no = atoi(strtok(NULL, ":")); + char *w = strtok(NULL, ":"); + static char buf[256]; + + plugin_event(event_error, (void *)no, 0, 0, 0); + + switch(no) { + case 69: + g_snprintf(buf, sizeof(buf), _("Unable to write file %s."), w); + break; + case 169: + g_snprintf(buf, sizeof(buf), _("Unable to read file %s."), w); + break; + case 269: + g_snprintf(buf, sizeof(buf), _("Message too long, last %s bytes truncated."), w); + break; + case 901: + g_snprintf(buf, sizeof(buf), _("%s not currently logged in."), w); + break; + case 902: + g_snprintf(buf, sizeof(buf), _("Warning of %s not allowed."), w); + break; + case 903: + g_snprintf(buf, sizeof(buf), _("A message has been dropped, you are exceeding the server speed limit.")); + break; + case 950: + g_snprintf(buf, sizeof(buf), _("Chat in %s is not available."), w); + break; + case 960: + g_snprintf(buf, sizeof(buf), _("You are sending messages too fast to %s."), w); + break; + case 961: + g_snprintf(buf, sizeof(buf), _("You missed an IM from %s because it was too big."), w); + break; + case 962: + g_snprintf(buf, sizeof(buf), _("You missed an IM from %s because it was sent too fast."), w); + break; + case 970: + g_snprintf(buf, sizeof(buf), _("Failure.")); + break; + case 971: + g_snprintf(buf, sizeof(buf), _("Too many matches.")); + break; + case 972: + g_snprintf(buf, sizeof(buf), _("Need more qualifiers.")); + break; + case 973: + g_snprintf(buf, sizeof(buf), _("Dir service temporarily unavailable.")); + break; + case 974: + g_snprintf(buf, sizeof(buf), _("Email lookup restricted.")); + break; + case 975: + g_snprintf(buf, sizeof(buf), _("Keyword ignored.")); + break; + case 976: + g_snprintf(buf, sizeof(buf), _("No keywords.")); + break; + case 977: + g_snprintf(buf, sizeof(buf), _("User has no directory information.")); + /* g_snprintf(buf, sizeof(buf), "Language not supported."); */ + break; + case 978: + g_snprintf(buf, sizeof(buf), _("Country not supported.")); + break; + case 979: + g_snprintf(buf, sizeof(buf), _("Failure unknown: %s."), w); + break; + case 980: + g_snprintf(buf, sizeof(buf), _("Incorrect nickname or password.")); + break; + case 981: + g_snprintf(buf, sizeof(buf), _("The service is temporarily unavailable.")); + break; + case 982: + g_snprintf(buf, sizeof(buf), _("Your warning level is currently too high to log in.")); + break; + case 983: + g_snprintf(buf, sizeof(buf), _("You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer.")); + break; + case 989: + g_snprintf(buf, sizeof(buf), _("An unknown signon error has occurred: %s."), w); + break; + default: + g_snprintf(buf, sizeof(buf), _("An unknown error, %d, has occured. Info: %s"), no, w); + } + + return buf; +} + static void toc_callback(gpointer data, gint source, GaimInputCondition condition) { struct gaim_connection *gc = (struct gaim_connection *)data; @@ -363,7 +458,12 @@ if (g_strncasecmp(buf + sizeof(struct sflap_hdr), "SIGN_ON", strlen("SIGN_ON"))) { debug_printf("Didn't get SIGN_ON! buf was: %s\n", buf + sizeof(struct sflap_hdr)); - hide_login_progress(gc, _("Authentication Failed")); + if (!g_strncasecmp(buf + sizeof(struct sflap_hdr), "ERROR", 5)) { + strtok(buf + sizeof(struct sflap_hdr), ":"); + hide_login_progress(gc, show_error_message(buf + + sizeof(struct sflap_hdr))); + } else + hide_login_progress(gc, _("Authentication Failed")); signoff(gc); return; } @@ -396,7 +496,7 @@ return; } - debug_printf("From TOC server: %s\n", buf + sizeof(struct sflap_hdr)); + debug_printf("TOC S: %s\n", buf + sizeof(struct sflap_hdr)); c = strtok(buf + sizeof(struct sflap_hdr), ":"); /* Ditch the first part */ @@ -489,7 +589,7 @@ serv_got_update(gc, c, logged, evil, signon, time_idle, type, 0); } else if (!strcasecmp(c, "ERROR")) { c = strtok(NULL, ":"); - show_error_dialog(c); + show_error_message(c); } else if (!strcasecmp(c, "EVILED")) { int lev; char *name; @@ -847,7 +947,7 @@ toc_set_config(g); } -static void toc_add_buddies(struct gaim_connection *g, GList * buddies) +static void toc_add_buddies(struct gaim_connection *g, GList *buddies) { char buf[BUF_LEN * 2]; int n; @@ -872,6 +972,24 @@ toc_set_config(g); } +static void toc_remove_buddies(struct gaim_connection *g, GList *buddies) +{ + char buf[BUF_LEN * 2]; + int n; + + n = g_snprintf(buf, sizeof(buf), "toc_remove_buddy"); + while (buddies) { + if (strlen(normalize(buddies->data)) + n + 32 > MSG_LEN) { + sflap_send(g, buf, -1, TYPE_DATA); + n = g_snprintf(buf, sizeof(buf), "toc_remove_buddy"); + } + n += g_snprintf(buf + n, sizeof(buf) - n, " %s", normalize(buddies->data)); + buddies = buddies->next; + } + sflap_send(g, buf, -1, TYPE_DATA); + toc_set_config(g); +} + static void toc_set_idle(struct gaim_connection *g, int time) { char buf[BUF_LEN * 2]; @@ -1190,6 +1308,7 @@ ret->add_buddy = toc_add_buddy; ret->add_buddies = toc_add_buddies; ret->remove_buddy = toc_remove_buddy; + ret->remove_buddies = toc_remove_buddies; ret->add_permit = toc_add_permit; ret->add_deny = toc_add_deny; ret->rem_permit = toc_rem_permit; diff -r de907b3cf529 -r b53cd5b63a99 src/prpl.h --- a/src/prpl.h Thu Sep 20 21:44:52 2001 +0000 +++ b/src/prpl.h Fri Sep 21 00:14:12 2001 +0000 @@ -116,6 +116,7 @@ void (* add_buddy) (struct gaim_connection *, char *name); void (* add_buddies) (struct gaim_connection *, GList *buddies); void (* remove_buddy) (struct gaim_connection *, char *name); + void (* remove_buddies) (struct gaim_connection *, GList *buddies); void (* add_permit) (struct gaim_connection *, char *name); void (* add_deny) (struct gaim_connection *, char *name); void (* rem_permit) (struct gaim_connection *, char *name); diff -r de907b3cf529 -r b53cd5b63a99 src/server.c --- a/src/server.c Thu Sep 20 21:44:52 2001 +0000 +++ b/src/server.c Fri Sep 21 00:14:12 2001 +0000 @@ -234,6 +234,20 @@ (*g->prpl->remove_buddy)(g, name); } +void serv_remove_buddies(struct gaim_connection *gc, GList *g) +{ + if (!gc->prpl) + return; /* how the hell did that happen? */ + if (gc->prpl->remove_buddies) + (*gc->prpl->remove_buddies)(gc, g); + else { + while (g) { + serv_remove_buddy(gc, g->data); + g = g->next; + } + } +} + void serv_add_permit(struct gaim_connection *g, char *name) { if (g->prpl && g->prpl->add_permit)