Mercurial > pidgin
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 } |