2 * Claws Mail -- a GTK based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 Colin Leroy <colin@colino.net>
4 * and the Claws Mail Team
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23 #include "claws-features.h"
29 #include <glib/gi18n.h>
35 #include "prefs_gtk.h"
36 #include "prefswindow.h"
37 #include "alertpanel.h"
40 #include "spam_report_prefs.h"
42 #define PREFS_BLOCK_NAME "SpamReport"
44 SpamReportPrefs spamreport_prefs
;
45 void spamreport_clear_cache(void);
47 typedef struct _SpamReportPage SpamReportPage
;
49 struct _SpamReportPage
{
51 GtkWidget
*frame
[INTF_LAST
];
52 GtkWidget
*enabled_chkbtn
[INTF_LAST
];
53 GtkWidget
*user_entry
[INTF_LAST
];
54 GtkWidget
*pass_entry
[INTF_LAST
];
57 static PrefParam param
[] = {
58 {"signalspam_enabled", "FALSE", &spamreport_prefs
.enabled
[INTF_SIGNALSPAM
], P_BOOL
, NULL
, NULL
, NULL
},
59 {"signalspam_user", "", &spamreport_prefs
.user
[INTF_SIGNALSPAM
], P_STRING
, NULL
, NULL
, NULL
},
60 {"signalspam_pass", "", &spamreport_prefs
.pass
[INTF_SIGNALSPAM
], P_PASSWORD
, NULL
, NULL
, NULL
},
61 {"spamcop_enabled", "FALSE", &spamreport_prefs
.enabled
[INTF_SPAMCOP
], P_BOOL
, NULL
, NULL
, NULL
},
62 {"spamcop_user", "", &spamreport_prefs
.user
[INTF_SPAMCOP
], P_STRING
, NULL
, NULL
, NULL
},
63 {"debianspam_enabled", "FALSE", &spamreport_prefs
.enabled
[INTF_DEBIANSPAM
], P_BOOL
, NULL
, NULL
, NULL
},
67 static SpamReportPage spamreport_prefs_page
;
69 static void create_spamreport_prefs_page (PrefsPage
*page
,
72 static void destroy_spamreport_prefs_page (PrefsPage
*page
);
73 static void save_spamreport_prefs (PrefsPage
*page
);
75 void spamreport_prefs_init(void)
77 static gchar
*path
[3];
80 gboolean passwords_migrated
= FALSE
;
82 path
[0] = _("Plugins");
83 path
[1] = _("SpamReport");
86 prefs_set_default(param
);
87 rcpath
= g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S
, COMMON_RC
, NULL
);
88 prefs_read_config(param
, PREFS_BLOCK_NAME
, rcpath
, NULL
);
91 /* Move passwords that are still in main config to password store. */
92 for (i
= 0; i
< INTF_LAST
; i
++) {
93 if (spamreport_prefs
.pass
[i
] != NULL
) {
94 passwd_store_set(PWS_PLUGIN
, "SpamReport",
95 spam_interfaces
[i
].name
, spamreport_prefs
.pass
[i
], TRUE
);
96 passwords_migrated
= TRUE
;
99 if (passwords_migrated
)
100 passwd_store_write_config();
102 spamreport_prefs_page
.page
.path
= path
;
103 spamreport_prefs_page
.page
.create_widget
= create_spamreport_prefs_page
;
104 spamreport_prefs_page
.page
.destroy_widget
= destroy_spamreport_prefs_page
;
105 spamreport_prefs_page
.page
.save_page
= save_spamreport_prefs
;
106 spamreport_prefs_page
.page
.weight
= 30.0;
108 prefs_gtk_register_page((PrefsPage
*) &spamreport_prefs_page
);
111 void spamreport_prefs_done(void)
113 prefs_gtk_unregister_page((PrefsPage
*) &spamreport_prefs_page
);
116 static void create_spamreport_prefs_page(PrefsPage
*page
,
120 SpamReportPage
*prefs_page
= (SpamReportPage
*) page
;
122 GtkWidget
*vbox
, *table
;
126 vbox
= gtk_box_new(GTK_ORIENTATION_VERTICAL
, VSPACING_NARROW
);
127 gtk_container_set_border_width(GTK_CONTAINER(vbox
), VBOX_BORDER
);
128 gtk_widget_show(vbox
);
130 for (i
= 0; i
< INTF_LAST
; i
++) {
132 prefs_page
->frame
[i
] = gtk_frame_new(spam_interfaces
[i
].name
);
133 gtk_frame_set_label_align(GTK_FRAME(prefs_page
->frame
[i
]), 0.01, 0.5);
134 gtk_box_pack_start(GTK_BOX(vbox
), prefs_page
->frame
[i
], FALSE
, FALSE
, 6);
136 prefs_page
->user_entry
[i
] = gtk_entry_new();
137 prefs_page
->pass_entry
[i
] = gtk_entry_new();
138 prefs_page
->enabled_chkbtn
[i
] = gtk_check_button_new_with_label(_("Enabled"));
140 gtk_entry_set_visibility(GTK_ENTRY(prefs_page
->pass_entry
[i
]), FALSE
);
142 gtk_entry_set_text(GTK_ENTRY(prefs_page
->user_entry
[i
]),
143 spamreport_prefs
.user
[i
] ? spamreport_prefs
.user
[i
]:"");
145 pass
= spamreport_passwd_get(spam_interfaces
[i
].name
);
146 gtk_entry_set_text(GTK_ENTRY(prefs_page
->pass_entry
[i
]), pass
? pass
:"");
148 memset(pass
, 0, strlen(pass
));
151 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_page
->enabled_chkbtn
[i
]),
152 spamreport_prefs
.enabled
[i
]);
154 table
= gtk_grid_new();
155 gtk_container_set_border_width(GTK_CONTAINER(table
), 8);
156 gtk_grid_set_row_spacing(GTK_GRID(table
), 4);
157 gtk_grid_set_column_spacing(GTK_GRID(table
), 8);
159 gtk_container_add(GTK_CONTAINER(prefs_page
->frame
[i
]), table
);
160 gtk_widget_show(prefs_page
->frame
[i
]);
161 gtk_widget_show(table
);
163 gtk_grid_attach(GTK_GRID(table
), prefs_page
->enabled_chkbtn
[i
], 0, 0, 1, 1);
164 gtk_widget_show(prefs_page
->enabled_chkbtn
[i
]);
166 switch(spam_interfaces
[i
].type
) {
168 tmp
= gtk_label_new(_("Forward to:"));
171 tmp
= gtk_label_new(_("Username:"));
173 gtk_grid_attach(GTK_GRID(table
), tmp
, 0, 1, 1, 1);
174 gtk_grid_attach(GTK_GRID(table
), prefs_page
->user_entry
[i
], 1, 1, 1, 1);
175 gtk_widget_set_hexpand(prefs_page
->user_entry
[i
], TRUE
);
176 gtk_widget_set_halign(prefs_page
->user_entry
[i
], GTK_ALIGN_FILL
);
177 if (spam_interfaces
[i
].type
!= INTF_HTTP_GET
) {
178 gtk_widget_show(tmp
);
179 gtk_widget_show(prefs_page
->user_entry
[i
]);
182 tmp
= gtk_label_new(_("Password:"));
183 gtk_grid_attach(GTK_GRID(table
), tmp
, 0, 2, 1, 1);
184 gtk_grid_attach(GTK_GRID(table
), prefs_page
->pass_entry
[i
], 1, 2, 1, 1);
185 gtk_widget_set_hexpand(prefs_page
->pass_entry
[i
], TRUE
);
186 gtk_widget_set_halign(prefs_page
->pass_entry
[i
], GTK_ALIGN_FILL
);
188 if (spam_interfaces
[i
].type
!= INTF_MAIL
&& spam_interfaces
[i
].type
!= INTF_HTTP_GET
) {
189 gtk_widget_show(tmp
);
190 gtk_widget_show(prefs_page
->pass_entry
[i
]);
193 prefs_page
->page
.widget
= vbox
;
196 static void destroy_spamreport_prefs_page(PrefsPage
*page
)
201 static void save_spamreport_prefs(PrefsPage
*page
)
203 SpamReportPage
*prefs_page
= (SpamReportPage
*) page
;
205 gchar
*rc_file_path
= g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S
,
209 for (i
= 0; i
< INTF_LAST
; i
++) {
212 g_free(spamreport_prefs
.user
[i
]);
213 g_free(spamreport_prefs
.pass
[i
]);
215 spamreport_prefs
.enabled
[i
] = gtk_toggle_button_get_active(
216 GTK_TOGGLE_BUTTON(prefs_page
->enabled_chkbtn
[i
]));
217 spamreport_prefs
.user
[i
] = gtk_editable_get_chars(
218 GTK_EDITABLE(prefs_page
->user_entry
[i
]), 0, -1);
220 pass
= gtk_editable_get_chars(GTK_EDITABLE(prefs_page
->pass_entry
[i
]), 0, -1);
221 spamreport_passwd_set(spam_interfaces
[i
].name
, pass
);
222 memset(pass
, 0, strlen(pass
));
226 pref_file
= prefs_write_open(rc_file_path
);
227 g_free(rc_file_path
);
230 (prefs_set_block_label(pref_file
, PREFS_BLOCK_NAME
) < 0))
233 if (prefs_write_param(param
, pref_file
->fp
) < 0) {
234 g_warning("failed to write SpamReport plugin configuration");
235 prefs_file_close_revert(pref_file
);
238 if (fprintf(pref_file
->fp
, "\n") < 0) {
239 FILE_OP_ERROR(rc_file_path
, "fprintf");
240 prefs_file_close_revert(pref_file
);
242 prefs_file_close(pref_file
);
244 passwd_store_write_config();