comparison src/dialogs.c @ 960:fa681641643d

[gaim-migrate @ 970] *** MULTIPLE-CONNECTIONS *** committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Tue, 10 Oct 2000 00:02:02 +0000
parents 9fca1293f871
children 17ff662183b2
comparison
equal deleted inserted replaced
959:034d5d1d53eb 960:fa681641643d
127 GtkWidget *cityentry; 127 GtkWidget *cityentry;
128 GtkWidget *stateentry; 128 GtkWidget *stateentry;
129 GtkWidget *countryentry; 129 GtkWidget *countryentry;
130 }; 130 };
131 131
132 struct registerdlg {
133 GtkWidget *window;
134 GtkWidget *name;
135 GtkWidget *email;
136 GtkWidget *uname;
137 GtkWidget *sname;
138 GtkWidget *country;
139 };
140
141 struct info_dlg { 132 struct info_dlg {
142 GtkWidget *window; 133 GtkWidget *window;
143 GtkWidget *text; 134 GtkWidget *text;
144 GtkWidget *close; 135 GtkWidget *close;
145 }; 136 };
146 137
147 138
148 struct set_info_dlg { 139 struct set_info_dlg {
149 GtkWidget *window; 140 GtkWidget *window;
141 GtkWidget *menu;
142 struct aim_user *user;
150 GtkWidget *text; 143 GtkWidget *text;
151 GtkWidget *save; 144 GtkWidget *save;
152 GtkWidget *cancel; 145 GtkWidget *cancel;
153 }; 146 };
154 147
184 GtkWidget *new1; 177 GtkWidget *new1;
185 GtkWidget *new2; 178 GtkWidget *new2;
186 }; 179 };
187 180
188 /*------------------------------------------------------------------------*/ 181 /*------------------------------------------------------------------------*/
189 /* Function to Send an Email */
190 /*------------------------------------------------------------------------*/
191
192 static int g_sendemail(char *name, char *email, int uname, int sname, char *country)
193 {
194 static char email_data[2000];
195 int sock;
196 struct in_addr *host;
197 /* char data[3]; */
198 FILE *sockfile;
199 char uname_output;
200 FILE *tmpfile;
201 char filename[128];
202 char buf[256];
203 int i=0, tmpfd=-1;
204
205 while (i<10000 && tmpfd < 0) {
206 g_snprintf(filename, 128, "/tmp/gaim_%s%d.tmp", current_user->username, i++);
207
208 tmpfd = open(filename, O_RDWR|O_CREAT|O_EXCL, 0600);
209 }
210
211 if(tmpfd < 0) {
212 return -1;
213 }
214
215
216 if (uname)
217 {
218 g_snprintf(buf, sizeof(buf), "uname -a > %s", filename);
219 system(buf);
220 }
221
222 host = (struct in_addr *)get_address(REG_SRVR);
223 if (!host)
224 {
225 printf(_("Error Resolving Mail Server.\n"));
226 return -1;
227 }
228
229 if ((sock = connect_address(host->s_addr, REG_PORT)) < 0)
230 {
231 printf(_("Error Connecting to Socket.\n"));
232 return -1;
233 }
234
235 sockfile = fdopen(sock, "r+");
236
237 g_snprintf(email_data, sizeof(email_data), "mail from: %s\n", REG_EMAIL_ADDR);
238 fputs(email_data, sockfile);
239
240 g_snprintf(email_data, sizeof(email_data), "rcpt to: %s\n", REG_EMAIL_ADDR);
241 fputs(email_data, sockfile);
242
243 g_snprintf(email_data, sizeof(email_data), "data\n");
244 fputs(email_data, sockfile);
245 g_snprintf(email_data, sizeof(email_data), "Subject: Registration Information\n\nBelow is the submitted Registration Information\n----------------------------------\nName: %s\nEmail: %s\nCountry: %s\nSName: %s\nGAIM: v%s\nUname: ", name, email, country, sname ? current_user->username : "N/A", VERSION);
246 fputs(email_data, sockfile);
247
248 if (uname)
249 {
250 tmpfile = fopen(filename, "r");
251 while (!feof(tmpfile))
252 {
253 uname_output = fgetc(tmpfile);
254 if (!feof(tmpfile))
255 fputc(uname_output, sockfile);
256 }
257 fclose(tmpfile);
258 }
259
260 unlink(filename);
261
262 g_snprintf(email_data, sizeof(email_data), "\n.\nquit\n\n");
263 fputs(email_data, sockfile);
264
265 /* while (fgets(data, 2, sockfile)) {
266 }
267 */
268 /* I don't think the above is necessary... */
269
270 close(sock);
271
272 return 1;
273 }
274
275 /*------------------------------------------------------------------------*/
276 /* Destroys */ 182 /* Destroys */
277 /*------------------------------------------------------------------------*/ 183 /*------------------------------------------------------------------------*/
278 184
279 static gint delete_event_dialog(GtkWidget *w, GdkEventAny *e, struct conversation *c) 185 static gint delete_event_dialog(GtkWidget *w, GdkEventAny *e, struct conversation *c)
280 { 186 {
528 char buf[256]; 434 char buf[256];
529 char buf2[32]; 435 char buf2[32];
530 436
531 plugin_event(event_error, (void *)no, 0, 0); 437 plugin_event(event_error, (void *)no, 0, 0);
532 438
533 if (USE_OSCAR) 439 w = strtok(NULL, ":");
534 w = d + 4;
535 else
536 w = strtok(NULL, ":");
537 440
538 441
539 switch(no) { 442 switch(no) {
540 case 69: 443 case 69:
541 g_snprintf(buf, sizeof(buf), _("Unable to write file %s."), w); 444 g_snprintf(buf, sizeof(buf), _("Unable to write file %s."), w);
1233 1136
1234 void do_save_info(GtkWidget *widget, struct set_info_dlg *b) 1137 void do_save_info(GtkWidget *widget, struct set_info_dlg *b)
1235 { 1138 {
1236 gchar *junk; 1139 gchar *junk;
1237 char *buf; 1140 char *buf;
1141 struct gaim_connection *gc;
1238 1142
1239 junk = gtk_editable_get_chars(GTK_EDITABLE(b->text), 0, -1); 1143 junk = gtk_editable_get_chars(GTK_EDITABLE(b->text), 0, -1);
1240 1144
1241 g_snprintf(current_user->user_info, sizeof(current_user->user_info), "%s", junk); 1145 if (b->user) {
1242 1146 g_snprintf(b->user->user_info, sizeof(b->user->user_info), "%s", junk);
1243 save_prefs(); 1147 gc = find_gaim_conn_by_name(b->user->username);
1244 1148
1245 buf = g_malloc(strlen(current_user->user_info) * 4); 1149 save_prefs();
1246 if (!buf) { 1150
1247 buf = g_malloc(1); 1151 if (gc) {
1248 buf[0] = 0; 1152 buf = g_malloc(strlen(junk) * 4);
1249 } 1153 if (!buf) {
1250 g_snprintf(buf, strlen(current_user->user_info) * 2, "%s", current_user->user_info); 1154 buf = g_malloc(1);
1251 escape_text(buf); 1155 buf[0] = 0;
1252 serv_set_info(buf); 1156 }
1253 g_free(buf); 1157 g_snprintf(buf, MIN(strlen(junk) * 2, 4096), "%s", junk);
1158 serv_set_info(gc, buf);
1159 g_free(buf);
1160 }
1161 }
1254 g_free(junk); 1162 g_free(junk);
1255 destroy_dialog(NULL, b->window); 1163 destroy_dialog(NULL, b->window);
1256 g_free(b); 1164 g_free(b);
1257 } 1165 }
1258 1166
1574 GTK_SIGNAL_FUNC(do_change_password), b); 1482 GTK_SIGNAL_FUNC(do_change_password), b);
1575 1483
1576 1484
1577 } 1485 }
1578 1486
1487 static void info_choose(GtkWidget *opt, struct set_info_dlg *b)
1488 {
1489 int text_len;
1490 struct aim_user *u = gtk_object_get_user_data(GTK_OBJECT(opt));
1491 b->user = u;
1492 text_len = gtk_text_get_length(GTK_TEXT(b->text));
1493 gtk_text_set_point(GTK_TEXT(b->text), 0);
1494 gtk_text_forward_delete(GTK_TEXT(b->text), text_len);
1495 gtk_text_insert(GTK_TEXT(b->text), NULL, NULL, NULL, u->user_info, -1);
1496 }
1497
1498 static void info_user_menu(struct set_info_dlg *b, GtkWidget *box)
1499 {
1500 GtkWidget *hbox;
1501 GtkWidget *label;
1502 GtkWidget *optmenu;
1503 GtkWidget *menu;
1504 GtkWidget *opt;
1505 GList *u = aim_users;
1506 struct aim_user *a;
1507
1508 hbox = gtk_hbox_new(FALSE, 5);
1509 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5);
1510 gtk_widget_show(hbox);
1511
1512 label = gtk_label_new(_("Set info for:"));
1513 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
1514 gtk_widget_show(label);
1515
1516 optmenu = gtk_option_menu_new();
1517 gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 5);
1518 gtk_widget_show(optmenu);
1519
1520 menu = gtk_menu_new();
1521
1522 while (u) {
1523 a = (struct aim_user *)u->data;
1524 opt = gtk_menu_item_new_with_label(a->username);
1525 gtk_object_set_user_data(GTK_OBJECT(opt), a);
1526 gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(info_choose), b);
1527 gtk_menu_append(GTK_MENU(menu), opt);
1528 gtk_widget_show(opt);
1529 u = u->next;
1530 }
1531
1532 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
1533 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 0);
1534
1535 b->menu = optmenu;
1536 }
1537
1579 void show_set_info() 1538 void show_set_info()
1580 { 1539 {
1581 GtkWidget *bot; 1540 GtkWidget *bot;
1582 GtkWidget *top; 1541 GtkWidget *top;
1583 1542
1584 struct set_info_dlg *b = g_new0(struct set_info_dlg, 1); 1543 struct set_info_dlg *b = g_new0(struct set_info_dlg, 1);
1585 1544
1586 b->window = gtk_window_new(GTK_WINDOW_DIALOG); 1545 b->window = gtk_window_new(GTK_WINDOW_DIALOG);
1587 gtk_window_set_wmclass(GTK_WINDOW(b->window), "set_info", "Gaim"); 1546 gtk_window_set_wmclass(GTK_WINDOW(b->window), "set_info", "Gaim");
1588 dialogwindows = g_list_prepend(dialogwindows, b->window); 1547 dialogwindows = g_list_prepend(dialogwindows, b->window);
1589 gtk_widget_show(b->window); 1548 gtk_widget_realize(b->window);
1590 1549
1591 bot = gtk_hbox_new(TRUE, 10); 1550 bot = gtk_hbox_new(TRUE, 10);
1592 top = gtk_vbox_new(FALSE, 10); 1551 top = gtk_vbox_new(FALSE, 10);
1593 1552
1594 /* Build OK Button */ 1553 /* Build OK Button */
1607 GTK_SIGNAL_FUNC(do_save_info), b); 1566 GTK_SIGNAL_FUNC(do_save_info), b);
1608 1567
1609 gtk_widget_show(bot); 1568 gtk_widget_show(bot);
1610 1569
1611 1570
1571 info_user_menu(b, top);
1572
1612 b->text = gtk_text_new(NULL, NULL); 1573 b->text = gtk_text_new(NULL, NULL);
1613 gtk_text_set_word_wrap(GTK_TEXT(b->text), TRUE); 1574 gtk_text_set_word_wrap(GTK_TEXT(b->text), TRUE);
1614 gtk_text_set_editable(GTK_TEXT(b->text), TRUE); 1575 gtk_text_set_editable(GTK_TEXT(b->text), TRUE);
1615 gtk_widget_set_usize(b->text, 350, 100); 1576 gtk_widget_set_usize(b->text, 350, 100);
1616 gtk_text_insert(GTK_TEXT(b->text), NULL, NULL, NULL, current_user->user_info, -1); 1577 /* is this necessary?
1578 if (users)
1579 gtk_text_insert(GTK_TEXT(b->text), NULL, NULL, NULL,
1580 ((struct aim_user *)users->data)->user_info, -1);
1581 */
1617 1582
1618 gtk_widget_show(b->text); 1583 gtk_widget_show(b->text);
1619 1584
1620 gtk_box_pack_start(GTK_BOX(top), b->text, TRUE, TRUE, 10); 1585 gtk_box_pack_start(GTK_BOX(top), b->text, TRUE, TRUE, 10);
1621 gtk_widget_show(top); 1586 gtk_widget_show(top);
1629 1594
1630 gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - Set User Info")); 1595 gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - Set User Info"));
1631 gtk_widget_show(b->window); 1596 gtk_widget_show(b->window);
1632 1597
1633 } 1598 }
1634
1635 /*------------------------------------------------------------------------*/
1636 /* The dialog for registration information */
1637 /*------------------------------------------------------------------------*/
1638
1639 void do_register_dialog(GtkWidget *widget, struct registerdlg *b)
1640 {
1641 char *email = gtk_entry_get_text(GTK_ENTRY(b->email));
1642 char *name = gtk_entry_get_text(GTK_ENTRY(b->name));
1643 int uname = GTK_TOGGLE_BUTTON(b->uname)->active;
1644 int sname = GTK_TOGGLE_BUTTON(b->sname)->active;
1645 char *country = gtk_entry_get_text(GTK_ENTRY(b->country));
1646
1647 general_options |= OPT_GEN_REGISTERED;
1648 save_prefs();
1649
1650 destroy_dialog(NULL, b->window);
1651
1652 g_free(b);
1653
1654 g_sendemail(name, email, uname, sname, country);
1655 }
1656
1657 void set_reg_flag(GtkWidget *widget, struct registerdlg *b)
1658 {
1659 general_options |= OPT_GEN_REGISTERED;
1660 save_prefs();
1661 destroy_dialog(NULL, b->window);
1662 g_free(b);
1663 }
1664
1665 void show_register_dialog()
1666 {
1667 GtkWidget *ok;
1668 GtkWidget *cancel;
1669 GtkWidget *label;
1670 GtkWidget *table;
1671 GtkWidget *vbox;
1672 GtkWidget *bbox;
1673
1674 struct registerdlg *b = g_new0(struct registerdlg, 1);
1675 b->window = gtk_window_new(GTK_WINDOW_DIALOG);
1676 dialogwindows = g_list_prepend(dialogwindows, b->window);
1677
1678 cancel = gtk_button_new_with_label(_("Cancel"));
1679 ok = gtk_button_new_with_label(_("Send"));
1680
1681 bbox = gtk_hbox_new(TRUE, 10);
1682 table = gtk_table_new(6, 2, TRUE);
1683 vbox = gtk_vbox_new(FALSE, 5);
1684
1685 b->name = gtk_entry_new();
1686 b->email = gtk_entry_new();
1687 b->uname = gtk_check_button_new_with_label("Send the output of uname -a with registration");
1688 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->uname), TRUE);
1689 b->sname = gtk_check_button_new_with_label("Send my screenname with registration");
1690 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->sname), TRUE);
1691 gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 10);
1692 gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 10);
1693
1694 label = gtk_label_new("This list will not, in any way, be distributed and\nwill be used for internal census purposes only.\nAll fields are completely optional.");
1695 gtk_widget_show(label);
1696 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 2, 0, 1);
1697
1698 label = gtk_label_new("Name");
1699 gtk_widget_show(label);
1700 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
1701 gtk_table_attach_defaults(GTK_TABLE(table), b->name, 1, 2, 1, 2);
1702
1703 label = gtk_label_new("Email");
1704 gtk_widget_show(label);
1705 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3);
1706 gtk_table_attach_defaults(GTK_TABLE(table), b->email, 1, 2, 2, 3);
1707
1708 label = gtk_label_new("Country");
1709 b->country = gtk_entry_new();
1710 gtk_widget_show(label);
1711 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4);
1712 gtk_table_attach_defaults(GTK_TABLE(table), b->country, 1, 2, 3, 4);
1713
1714 gtk_table_attach_defaults(GTK_TABLE(table), b->sname, 0, 2, 4, 5);
1715 gtk_table_attach_defaults(GTK_TABLE(table), b->uname, 0, 2, 5, 6);
1716
1717 gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 5);
1718 gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 5);
1719
1720 if (display_options & OPT_DISP_COOL_LOOK)
1721 {
1722 gtk_button_set_relief(GTK_BUTTON(ok), GTK_RELIEF_NONE);
1723 gtk_button_set_relief(GTK_BUTTON(cancel), GTK_RELIEF_NONE);
1724 }
1725
1726 gtk_signal_connect(GTK_OBJECT(b->window), "destroy",
1727 GTK_SIGNAL_FUNC(destroy_dialog), b->window);
1728 gtk_signal_connect(GTK_OBJECT(cancel), "clicked",
1729 GTK_SIGNAL_FUNC(set_reg_flag), b);
1730 gtk_signal_connect(GTK_OBJECT(ok), "clicked",
1731 GTK_SIGNAL_FUNC(do_register_dialog), b);
1732
1733 gtk_widget_show(ok);
1734 gtk_widget_show(cancel);
1735 gtk_widget_show(b->name);
1736 gtk_widget_show(b->email);
1737 gtk_widget_show(b->uname);
1738 gtk_widget_show(b->sname);
1739 gtk_widget_show(b->country);
1740 gtk_widget_show(table);
1741 gtk_widget_show(bbox);
1742 gtk_widget_show(vbox);
1743 gtk_window_set_title(GTK_WINDOW(b->window), "Gaim - Registration");
1744 gtk_window_set_focus(GTK_WINDOW(b->window), b->name);
1745 gtk_container_add(GTK_CONTAINER(b->window), vbox);
1746 gtk_container_border_width(GTK_CONTAINER(b->window), 10);
1747 gtk_widget_realize(b->window);
1748 aol_icon(b->window->window);
1749
1750 gtk_widget_show(b->window);
1751 }
1752
1753 1599
1754 /*------------------------------------------------------------------------*/ 1600 /*------------------------------------------------------------------------*/
1755 /* The dialog for the info requests */ 1601 /* The dialog for the info requests */
1756 /*------------------------------------------------------------------------*/ 1602 /*------------------------------------------------------------------------*/
1757 1603
1814 gtk_adjustment_set_value(gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(sw)), 0); 1660 gtk_adjustment_set_value(gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(sw)), 0);
1815 } 1661 }
1816 1662
1817 void g_show_info(char *url) { 1663 void g_show_info(char *url) {
1818 char *url_text = grab_url(url); 1664 char *url_text = grab_url(url);
1819 g_show_info_text(away_subs(url_text, current_user->username)); 1665 if (connections)
1666 g_show_info_text(away_subs(url_text,
1667 ((struct gaim_connection *)connections->data)->username));
1668 else
1669 g_show_info_text(url_text);
1820 g_free(url_text); 1670 g_free(url_text);
1821 } 1671 }
1822 1672
1823 /*------------------------------------------------------------------------*/ 1673 /*------------------------------------------------------------------------*/
1824 /* The dialog for adding to permit/deny */ 1674 /* The dialog for adding to permit/deny */
2767 #define PATHSIZE 1024 2617 #define PATHSIZE 1024
2768 2618
2769 /* see if a buddy list cache file for this user exists */ 2619 /* see if a buddy list cache file for this user exists */
2770 2620
2771 gboolean 2621 gboolean
2772 bud_list_cache_exists( void ) 2622 bud_list_cache_exists(struct gaim_connection *gc)
2773 { 2623 {
2774 gboolean ret = FALSE; 2624 gboolean ret = FALSE;
2775 char path[PATHSIZE]; 2625 char path[PATHSIZE];
2776 char *file; 2626 char *file;
2777 struct stat sbuf; 2627 struct stat sbuf;
2778 extern char g_screenname[]; 2628 char g_screenname[64];
2629 int i;
2630
2631 for (i = 0; i < strlen(gc->username); i++)
2632 g_screenname[i] = toupper(gc->username[i]);
2633 g_screenname[i] = '\0';
2779 2634
2780 file = getenv( "HOME" ); 2635 file = getenv( "HOME" );
2781 if ( file != (char *) NULL ) { 2636 if ( file != (char *) NULL ) {
2782 sprintf( path, "%s/.gaim/%s.blist", file, g_screenname ); 2637 sprintf( path, "%s/.gaim/%s.blist", file, g_screenname);
2783 if ( !stat(path, &sbuf) ) 2638 if ( !stat(path, &sbuf) ) {
2639 sprintf(debug_buff, "%s exists.\n", path);
2640 debug_print(debug_buff);
2784 ret = TRUE; 2641 ret = TRUE;
2642 } else {
2643 sprintf(debug_buff, "%s does not exist.\n", path);
2644 debug_print(debug_buff);
2645 }
2785 } 2646 }
2786 return ret; 2647 return ret;
2787 } 2648 }
2788 2649
2789 /* if dummy is 0, save to ~/.gaim/screenname.blist. Else, let user choose */ 2650 /* if dummy is 0, save to ~/.gaim/screenname.blist, where screenname is each
2651 * signed in user. Else, let user choose */
2790 2652
2791 void do_export(GtkWidget *w, void *dummy) 2653 void do_export(GtkWidget *w, void *dummy)
2792 { 2654 {
2793 FILE *f; 2655 FILE *f;
2794 gint show_dialog = (int) dummy; 2656 gint show_dialog = (int) dummy;
2795 char *buf = g_malloc(BUF_LONG); 2657 char *buf = g_malloc(BUF_LONG);
2796 char *file; 2658 char *file;
2797 char path[PATHSIZE]; 2659 char path[PATHSIZE];
2798 extern char g_screenname[];
2799 2660
2800 if ( show_dialog == 1 ) { 2661 if ( show_dialog == 1 ) {
2801 file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(exportdialog)); 2662 file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(exportdialog));
2802 strncpy( path, file, PATHSIZE - 1 ); 2663 strncpy( path, file, PATHSIZE - 1 );
2803 } 2664 if ((f = fopen(path,"w"))) {
2804 else { 2665 serv_build_config(buf, 8192 - 1, TRUE);
2666 fprintf(f, "%s\n", buf);
2667 fclose(f);
2668 chmod(buf, S_IRUSR | S_IWUSR);
2669 } else {
2670 g_snprintf(buf, BUF_LONG / 2, _("Error writing file %s"), file);
2671 do_error_dialog(buf, _("Error"));
2672 }
2673 destroy_dialog(NULL, exportdialog);
2674 exportdialog = NULL;
2675 } else {
2676 GSList *c = connections;
2677 struct gaim_connection *g;
2678 char g_screenname[64];
2679 int i;
2680
2805 file = getenv( "HOME" ); 2681 file = getenv( "HOME" );
2806 if ( file != (char *) NULL ) { 2682 if ( file != (char *) NULL ) {
2807 FILE *dir; 2683 FILE *dir;
2808 sprintf(buf, "%s/.gaim/", file); 2684 sprintf(buf, "%s/.gaim/", file);
2809 dir = fopen(buf, "r"); 2685 dir = fopen(buf, "r");
2810 if (!dir) 2686 if (!dir)
2811 mkdir(buf, S_IRUSR | S_IWUSR | S_IXUSR); 2687 mkdir(buf, S_IRUSR | S_IWUSR | S_IXUSR);
2812 else 2688 else
2813 fclose(dir); 2689 fclose(dir);
2814 sprintf( path, "%s/.gaim/%s.blist", file, g_screenname ); 2690
2815 } else 2691 while (c) {
2816 return; 2692 g = (struct gaim_connection *)c->data;
2817 } 2693
2818 if ((f = fopen(path,"w"))) { 2694 for (i = 0; i < strlen(g->username); i++)
2819 serv_build_config(buf, 8192 - 1, TRUE); 2695 g_screenname[i] = toupper(g->username[i]);
2820 fprintf(f, "%s\n", buf); 2696 g_screenname[i] = '\0';
2821 fclose(f); 2697 sprintf( path, "%s/.gaim/%s.blist", file, g_screenname);
2822 chmod(buf, S_IRUSR | S_IWUSR); 2698 if ((f = fopen(path,"w"))) {
2823 } else if ( show_dialog == 1 ) { 2699 sprintf(debug_buff, "writing %s\n", path);
2824 g_snprintf(buf, BUF_LONG / 2, _("Error writing file %s"), file); 2700 debug_print(debug_buff);
2825 do_error_dialog(buf, _("Error")); 2701 serv_build_config(buf, 8192 - 1, TRUE);
2826 } 2702 fprintf(f, "%s\n", buf);
2827 if ( show_dialog == 1 ) { 2703 fclose(f);
2828 destroy_dialog(NULL, exportdialog); 2704 chmod(buf, S_IRUSR | S_IWUSR);
2829 exportdialog = NULL; 2705 } else {
2830 } 2706 sprintf(debug_buff, "unable to write %s\n", path);
2831 2707 debug_print(debug_buff);
2708 }
2709
2710 c = c->next;
2711 }
2712 } else return;
2713 }
2714
2832 g_free(buf); 2715 g_free(buf);
2833 2716
2834 } 2717 }
2835 2718
2836 2719
2861 gtk_widget_show(exportdialog); 2744 gtk_widget_show(exportdialog);
2862 gdk_window_raise(exportdialog->window); 2745 gdk_window_raise(exportdialog->window);
2863 2746
2864 } 2747 }
2865 2748
2866 /* if dummy is 0, then import from ~/.gaim/screenname.blist, else let user 2749 /* if gc is non-NULL, then import from ~/.gaim/gc->username.blist, else let user
2867 choose */ 2750 choose */
2868 2751
2869 void do_import(GtkWidget *w, void *dummy) 2752 void do_import(GtkWidget *w, struct gaim_connection *gc)
2870 { 2753 {
2871 gint show_dialog = (int) dummy;
2872 char *buf = g_malloc(BUF_LONG); 2754 char *buf = g_malloc(BUF_LONG);
2873 char *buf2; 2755 char *buf2;
2874 char *first = g_malloc(64); 2756 char *first = g_malloc(64);
2875 char *file; 2757 char *file;
2876 char path[PATHSIZE]; 2758 char path[PATHSIZE];
2759 char g_screenname[64];
2760 int i;
2877 FILE *f; 2761 FILE *f;
2878 extern char g_screenname[]; 2762
2879 2763 if ( !gc ) {
2880 if ( show_dialog == 1 ) {
2881 file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(importdialog)); 2764 file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(importdialog));
2882 strncpy( path, file, PATHSIZE - 1 ); 2765 strncpy( path, file, PATHSIZE - 1 );
2883 } 2766 }
2884 else { 2767 else {
2768 for (i = 0; i < strlen(gc->username); i++)
2769 g_screenname[i] = toupper(gc->username[i]);
2770 g_screenname[i] = '\0';
2771
2885 file = getenv( "HOME" ); 2772 file = getenv( "HOME" );
2886 if ( file != (char *) NULL ) 2773 if ( file != (char *) NULL )
2887 sprintf( path, "%s/.gaim/%s.blist", file, g_screenname ); 2774 sprintf( path, "%s/.gaim/%s.blist", file, g_screenname);
2888 else 2775 else
2889 return; 2776 return;
2890 } 2777 }
2891 2778
2892 if (!(f = fopen(path,"r"))) { 2779 if (!(f = fopen(path,"r"))) {
2893 if ( show_dialog == 1 ) { 2780 if ( !gc ) {
2894 g_snprintf(buf, BUF_LONG / 2, _("Error reading file %s"), file); 2781 g_snprintf(buf, BUF_LONG / 2, _("Error reading file %s"), file);
2895 do_error_dialog(buf, _("Error")); 2782 do_error_dialog(buf, _("Error"));
2896 destroy_dialog(NULL, importdialog); 2783 destroy_dialog(NULL, importdialog);
2897 importdialog = NULL; 2784 importdialog = NULL;
2898 } 2785 }
2786 sprintf(debug_buff, "Unable to open %s.\n", path);
2787 debug_print(debug_buff);
2899 g_free(buf); 2788 g_free(buf);
2900 g_free(first); 2789 g_free(first);
2901 return; 2790 return;
2902 } 2791 }
2903 2792
2933 buf = g_malloc(8193); 2822 buf = g_malloc(8193);
2934 g_snprintf(buf, 8192, "toc_set_config {%s}\n", buf2); 2823 g_snprintf(buf, 8192, "toc_set_config {%s}\n", buf2);
2935 g_free(buf2); 2824 g_free(buf2);
2936 /* Something else */ 2825 /* Something else */
2937 } else { 2826 } else {
2938 if ( show_dialog == 1 ) { 2827 if ( !gc ) {
2939 destroy_dialog(NULL, importdialog); 2828 destroy_dialog(NULL, importdialog);
2940 importdialog = NULL; 2829 importdialog = NULL;
2941 } 2830 }
2942 g_free(buf); 2831 g_free(buf);
2943 g_free(first); 2832 g_free(first);
2944 fclose( f ); 2833 fclose( f );
2945 return; 2834 return;
2946 } 2835 }
2947 2836
2948 parse_toc_buddy_list(buf, 1); 2837 parse_toc_buddy_list(gc, buf, 1);
2949 2838
2950 serv_save_config(); 2839 serv_save_config();
2951 2840
2952 build_edit_tree(); 2841 build_edit_tree();
2953 build_permit_tree(); 2842 build_permit_tree();
2954 2843
2955 fclose( f ); 2844 fclose( f );
2956 2845
2957 if ( show_dialog == 1 ) { 2846 if ( !gc ) {
2958 /* save what we just did to cache */ 2847 /* save what we just did to cache */
2959 2848
2960 do_export( (GtkWidget *) NULL, 0 ); 2849 do_export( (GtkWidget *) NULL, 0 );
2961 destroy_dialog(NULL, importdialog); 2850 destroy_dialog(NULL, importdialog);
2962 importdialog = NULL; 2851 importdialog = NULL;
2979 gtk_file_selection_set_filename(GTK_FILE_SELECTION(importdialog), buf); 2868 gtk_file_selection_set_filename(GTK_FILE_SELECTION(importdialog), buf);
2980 gtk_signal_connect(GTK_OBJECT(importdialog), "destroy", 2869 gtk_signal_connect(GTK_OBJECT(importdialog), "destroy",
2981 GTK_SIGNAL_FUNC(destroy_dialog), importdialog); 2870 GTK_SIGNAL_FUNC(destroy_dialog), importdialog);
2982 2871
2983 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(importdialog)->ok_button), 2872 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(importdialog)->ok_button),
2984 "clicked", GTK_SIGNAL_FUNC(do_import), (void*)1); 2873 "clicked", GTK_SIGNAL_FUNC(do_import), NULL);
2985 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(importdialog)->cancel_button), 2874 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(importdialog)->cancel_button),
2986 "clicked", GTK_SIGNAL_FUNC(destroy_dialog), importdialog); 2875 "clicked", GTK_SIGNAL_FUNC(destroy_dialog), importdialog);
2987 2876
2988 2877
2989 } 2878 }