Remove line breaks from g_warning()
[claws.git] / src / plugins / archive / archiver_prefs.c
blob8770c89780ba1f86dc75f379192f96d6489fa60b
1 /*
2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2008 Michael Rasmussen and the Claws Mail Team
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #ifdef HAVE_CONFIG_H
21 # include "config.h"
22 #include "claws-features.h"
23 #endif
25 #include <glib.h>
26 #include <glib/gi18n.h>
28 #include "defs.h"
30 #include <glib.h>
31 #include <gtk/gtk.h>
33 #include "gtkutils.h"
34 #include "prefs.h"
35 #include "prefs_gtk.h"
36 #include "prefswindow.h"
37 #include "alertpanel.h"
38 #include "utils.h"
39 #include "filesel.h"
41 #include "archiver_prefs.h"
43 #define PREFS_BLOCK_NAME "Archiver"
45 ArchiverPrefs archiver_prefs;
47 struct ArchiverPrefsPage {
48 PrefsPage page;
49 GtkWidget *save_folder;
50 gint compression;
51 GtkWidget *zip_radiobtn;
52 GtkWidget *bzip_radiobtn;
53 GtkWidget *compress_radiobtn;
54 GtkWidget *none_radiobtn;
55 GtkWidget *tar_radiobtn;
56 GtkWidget *shar_radiobtn;
57 GtkWidget *cpio_radiobtn;
58 GtkWidget *pax_radiobtn;
59 GtkWidget *recursive_chkbtn;
60 GtkWidget *md5sum_chkbtn;
61 GtkWidget *rename_chkbtn;
62 GtkWidget *unlink_chkbtn;
65 struct ArchiverPrefsPage archiver_prefs_page;
67 static void create_archiver_prefs_page (PrefsPage *page,
68 GtkWindow *window,
69 gpointer data);
70 static void destroy_archiver_prefs_page (PrefsPage *page);
71 static void save_archiver_prefs (PrefsPage *page);
73 static PrefParam param[] = {
74 {"save_folder", NULL, &archiver_prefs.save_folder, P_STRING, NULL, NULL, NULL},
75 {"compression", "0", &archiver_prefs.compression, P_ENUM, NULL, NULL, NULL},
76 {"format", "0", &archiver_prefs.format, P_ENUM, NULL, NULL, NULL},
77 {"recursive", "TRUE", &archiver_prefs.recursive, P_BOOL, NULL, NULL, NULL},
78 {"md5sum", "FALSE", &archiver_prefs.md5sum, P_BOOL, NULL, NULL, NULL},
79 {"rename", "FALSE", &archiver_prefs.rename, P_BOOL, NULL, NULL, NULL},
80 {"unlink", "FALSE", &archiver_prefs.unlink, P_BOOL, NULL, NULL, NULL},
82 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
85 void archiver_prefs_init(void)
87 static gchar *path[3];
88 gchar *rcpath;
90 path[0] = _("Plugins");
91 path[1] = _("Mail Archiver");
92 path[2] = NULL;
94 prefs_set_default(param);
95 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
96 prefs_read_config(param, PREFS_BLOCK_NAME, rcpath, NULL);
97 g_free(rcpath);
99 archiver_prefs_page.page.path = path;
100 archiver_prefs_page.page.create_widget = create_archiver_prefs_page;
101 archiver_prefs_page.page.destroy_widget = destroy_archiver_prefs_page;
102 archiver_prefs_page.page.save_page = save_archiver_prefs;
103 archiver_prefs_page.page.weight = 30.0;
105 prefs_gtk_register_page((PrefsPage *) &archiver_prefs_page);
108 void archiver_prefs_done(void)
110 prefs_gtk_unregister_page((PrefsPage *) &archiver_prefs_page);
113 static void foldersel_cb(GtkWidget *widget, gpointer data)
115 struct ArchiverPrefsPage *page = (struct ArchiverPrefsPage *) data;
116 gchar *startdir = NULL;
117 gchar *dirname;
118 gchar *tmp;
120 if (archiver_prefs.save_folder && *archiver_prefs.save_folder)
121 startdir = g_strconcat(archiver_prefs.save_folder,
122 G_DIR_SEPARATOR_S, NULL);
123 else
124 startdir = g_strdup(get_home_dir());
126 dirname = filesel_select_file_save_folder(_("Select destination folder"), startdir);
127 if (!dirname) {
128 g_free(startdir);
129 return;
131 if (!is_dir_exist(dirname)) {
132 alertpanel_error(_("'%s' is not a directory."),dirname);
133 g_free(dirname);
134 g_free(startdir);
135 return;
137 if (dirname[strlen(dirname)-1] == G_DIR_SEPARATOR)
138 dirname[strlen(dirname)-1] = '\0';
139 g_free(startdir);
141 tmp = g_filename_to_utf8(dirname,-1, NULL, NULL, NULL);
142 gtk_entry_set_text(GTK_ENTRY(page->save_folder), tmp);
144 g_free(dirname);
145 g_free(tmp);
148 static void create_archiver_prefs_page(PrefsPage * _page,
149 GtkWindow *window,
150 gpointer data)
152 struct ArchiverPrefsPage *page = (struct ArchiverPrefsPage *) _page;
153 GtkWidget *vbox1, *vbox2;
154 GtkWidget *hbox1;
155 GtkWidget *save_folder_label;
156 GtkWidget *save_folder;
157 GtkWidget *save_folder_select;
158 GtkWidget *frame;
159 GSList *compression_group = NULL;
160 GtkWidget *zip_radiobtn;
161 GtkWidget *bzip_radiobtn;
162 GtkWidget *compress_radiobtn;
163 GtkWidget *none_radiobtn;
164 GSList *format_group = NULL;
165 GtkWidget *tar_radiobtn;
166 GtkWidget *shar_radiobtn;
167 GtkWidget *cpio_radiobtn;
168 GtkWidget *pax_radiobtn;
169 GtkWidget *recursive_chkbtn;
170 GtkWidget *md5sum_chkbtn;
171 GtkWidget *rename_chkbtn;
172 GtkWidget *unlink_chkbtn;
174 vbox1 = gtk_vbox_new (FALSE, VSPACING);
175 gtk_widget_show (vbox1);
176 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
178 vbox2 = gtk_vbox_new (FALSE, 4);
179 gtk_widget_show (vbox2);
180 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
182 hbox1 = gtk_hbox_new (FALSE, 8);
183 gtk_widget_show (hbox1);
184 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
186 save_folder_label = gtk_label_new(_("Default save folder"));
187 gtk_widget_show (save_folder_label);
188 gtk_box_pack_start (GTK_BOX (hbox1), save_folder_label, FALSE, FALSE, 0);
190 save_folder = gtk_entry_new ();
191 gtk_widget_show (save_folder);
192 gtk_box_pack_start (GTK_BOX (hbox1), save_folder, TRUE, TRUE, 0);
194 save_folder_select = gtkut_get_browse_directory_btn(_("_Select"));
195 gtk_widget_show (save_folder_select);
196 gtk_box_pack_start (GTK_BOX (hbox1), save_folder_select, FALSE, FALSE, 0);
197 CLAWS_SET_TIP(save_folder_select,
198 _("Click this button to select the default location for saving archives"));
200 g_signal_connect(G_OBJECT(save_folder_select), "clicked",
201 G_CALLBACK(foldersel_cb), page);
203 if (archiver_prefs.save_folder != NULL)
204 gtk_entry_set_text(GTK_ENTRY(save_folder),
205 archiver_prefs.save_folder);
207 PACK_FRAME (vbox1, frame, _("Default compression"));
209 hbox1 = gtk_hbox_new(FALSE, 4);
210 gtk_widget_show(hbox1);
211 gtk_container_set_border_width(GTK_CONTAINER(hbox1), 4);
212 gtk_container_add(GTK_CONTAINER(frame), hbox1);
214 zip_radiobtn = gtk_radio_button_new_with_label(compression_group, "ZIP");
215 compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(zip_radiobtn));
216 gtk_widget_show(zip_radiobtn);
217 gtk_box_pack_start(GTK_BOX (hbox1), zip_radiobtn, FALSE, FALSE, 0);
218 CLAWS_SET_TIP(zip_radiobtn,
219 _("Choose this option to use ZIP compression by default"));
221 bzip_radiobtn = gtk_radio_button_new_with_label(compression_group, "BZIP2");
222 compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(bzip_radiobtn));
223 gtk_widget_show(bzip_radiobtn);
224 gtk_box_pack_start(GTK_BOX (hbox1), bzip_radiobtn, FALSE, FALSE, 0);
225 CLAWS_SET_TIP(bzip_radiobtn,
226 _("Choose this option to use BZIP2 compression by default"));
228 compress_radiobtn = gtk_radio_button_new_with_label(compression_group, "COMPRESS");
229 compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(compress_radiobtn));
230 gtk_widget_show(compress_radiobtn);
231 gtk_box_pack_start(GTK_BOX (hbox1), compress_radiobtn, FALSE, FALSE, 0);
232 CLAWS_SET_TIP(compress_radiobtn,
233 _("Choose this option to use COMPRESS compression by default"));
235 none_radiobtn = gtk_radio_button_new_with_label(compression_group, _("None"));
236 compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(none_radiobtn));
237 gtk_widget_show(none_radiobtn);
238 gtk_box_pack_start(GTK_BOX (hbox1), none_radiobtn, FALSE, FALSE, 0);
239 CLAWS_SET_TIP(none_radiobtn,
240 _("Choose this option to disable compression by default"));
242 switch (archiver_prefs.compression) {
243 case COMPRESSION_ZIP:
244 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(zip_radiobtn), TRUE);
245 break;
246 case COMPRESSION_BZIP:
247 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bzip_radiobtn), TRUE);
248 break;
249 case COMPRESSION_COMPRESS:
250 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compress_radiobtn), TRUE);
251 break;
252 case COMPRESSION_NONE:
253 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(none_radiobtn), TRUE);
254 break;
257 PACK_FRAME (vbox1, frame, _("Default format"));
259 hbox1 = gtk_hbox_new(FALSE, 4);
260 gtk_widget_show(hbox1);
261 gtk_container_set_border_width(GTK_CONTAINER(hbox1), 4);
262 gtk_container_add(GTK_CONTAINER(frame), hbox1);
264 tar_radiobtn = gtk_radio_button_new_with_label(format_group, "TAR");
265 format_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(tar_radiobtn));
266 gtk_widget_show(tar_radiobtn);
267 gtk_box_pack_start(GTK_BOX (hbox1), tar_radiobtn, FALSE, FALSE, 0);
268 CLAWS_SET_TIP(tar_radiobtn,
269 _("Choose this option to use the TAR format by default"));
271 shar_radiobtn = gtk_radio_button_new_with_label(format_group, "SHAR");
272 format_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(shar_radiobtn));
273 gtk_widget_show(shar_radiobtn);
274 gtk_box_pack_start(GTK_BOX (hbox1), shar_radiobtn, FALSE, FALSE, 0);
275 CLAWS_SET_TIP(shar_radiobtn,
276 _("Choose this option to use the SHAR format by default"));
278 cpio_radiobtn = gtk_radio_button_new_with_label(format_group, "CPIO");
279 format_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(cpio_radiobtn));
280 gtk_widget_show(cpio_radiobtn);
281 gtk_box_pack_start(GTK_BOX (hbox1), cpio_radiobtn, FALSE, FALSE, 0);
282 CLAWS_SET_TIP(cpio_radiobtn,
283 _("Choose this option to use the CPIO format by default"));
285 pax_radiobtn = gtk_radio_button_new_with_label(format_group, "PAX");
286 format_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(pax_radiobtn));
287 gtk_widget_show(pax_radiobtn);
288 gtk_box_pack_start(GTK_BOX (hbox1), pax_radiobtn, FALSE, FALSE, 0);
289 CLAWS_SET_TIP(pax_radiobtn,
290 _("Choose this option to use the PAX format by default"));
292 switch (archiver_prefs.format) {
293 case FORMAT_TAR:
294 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tar_radiobtn), TRUE);
295 break;
296 case FORMAT_SHAR:
297 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(shar_radiobtn), TRUE);
298 break;
299 case FORMAT_CPIO:
300 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cpio_radiobtn), TRUE);
301 break;
302 case FORMAT_PAX:
303 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pax_radiobtn), TRUE);
304 break;
307 PACK_FRAME (vbox1, frame, _("Default miscellaneous options"));
309 hbox1 = gtk_hbox_new(FALSE, 4);
310 gtk_widget_show(hbox1);
311 gtk_container_set_border_width(GTK_CONTAINER(hbox1), 4);
312 gtk_container_add(GTK_CONTAINER(frame), hbox1);
314 PACK_CHECK_BUTTON(hbox1, recursive_chkbtn, _("Recursive"));
315 CLAWS_SET_TIP(recursive_chkbtn,
316 _("Choose this option to include subfolders in the archives by default"));
317 PACK_CHECK_BUTTON(hbox1, md5sum_chkbtn, _("MD5sum"));
318 CLAWS_SET_TIP(md5sum_chkbtn,
319 _("Choose this option to add MD5 checksums for each file in the archives by default.\n"
320 "Be aware though, that this dramatically increases the time it\n"
321 "will take to create the archives"));
323 PACK_CHECK_BUTTON(hbox1, rename_chkbtn, _("Rename"));
324 CLAWS_SET_TIP(rename_chkbtn,
325 _("Choose this option to use descriptive names for each file in the archive.\n"
326 "The naming scheme: date_from@to@subject.\n"
327 "Names will be truncated to max 96 characters"));
329 PACK_CHECK_BUTTON(hbox1, unlink_chkbtn, _("Delete"));
330 CLAWS_SET_TIP(unlink_chkbtn,
331 _("Choose this option to delete mails after archiving"));
333 if (archiver_prefs.recursive)
334 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(recursive_chkbtn), TRUE);
335 if (archiver_prefs.md5sum)
336 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(md5sum_chkbtn), TRUE);
337 if (archiver_prefs.rename)
338 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rename_chkbtn), TRUE);
339 if (archiver_prefs.unlink)
340 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(unlink_chkbtn), TRUE);
343 page->save_folder = save_folder;
344 page->zip_radiobtn = zip_radiobtn;
345 page->bzip_radiobtn = bzip_radiobtn;
346 page->compress_radiobtn = compress_radiobtn;
347 page->none_radiobtn = none_radiobtn;
348 page->tar_radiobtn = tar_radiobtn;
349 page->shar_radiobtn = shar_radiobtn;
350 page->cpio_radiobtn = cpio_radiobtn;
351 page->pax_radiobtn = pax_radiobtn;
352 page->recursive_chkbtn = recursive_chkbtn;
353 page->md5sum_chkbtn = md5sum_chkbtn;
354 page->rename_chkbtn = rename_chkbtn;
355 page->unlink_chkbtn = unlink_chkbtn;
357 page->page.widget = vbox1;
360 static void destroy_archiver_prefs_page(PrefsPage *page)
362 /* Do nothing! */
365 static void save_archiver_prefs(PrefsPage * _page)
367 struct ArchiverPrefsPage *page = (struct ArchiverPrefsPage *) _page;
368 PrefFile *pref_file;
369 gchar *rc_file_path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
370 COMMON_RC, NULL);
372 archiver_prefs.save_folder = gtk_editable_get_chars(GTK_EDITABLE(page->save_folder), 0, -1);
373 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->zip_radiobtn)))
374 archiver_prefs.compression = COMPRESSION_ZIP;
375 else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->bzip_radiobtn)))
376 archiver_prefs.compression = COMPRESSION_BZIP;
377 else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->compress_radiobtn)))
378 archiver_prefs.compression = COMPRESSION_COMPRESS;
379 else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->none_radiobtn)))
380 archiver_prefs.compression = COMPRESSION_NONE;
382 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->tar_radiobtn)))
383 archiver_prefs.format = FORMAT_TAR;
384 else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->shar_radiobtn)))
385 archiver_prefs.format = FORMAT_SHAR;
386 else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->cpio_radiobtn)))
387 archiver_prefs.format = FORMAT_CPIO;
388 else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->pax_radiobtn)))
389 archiver_prefs.format = FORMAT_PAX;
391 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->recursive_chkbtn)))
392 archiver_prefs.recursive = TRUE;
393 else
394 archiver_prefs.recursive = FALSE;
395 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->md5sum_chkbtn)))
396 archiver_prefs.md5sum = TRUE;
397 else
398 archiver_prefs.md5sum = FALSE;
399 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->rename_chkbtn)))
400 archiver_prefs.rename = TRUE;
401 else
402 archiver_prefs.rename = FALSE;
403 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->unlink_chkbtn)))
404 archiver_prefs.unlink = TRUE;
405 else
406 archiver_prefs.unlink = FALSE;
409 pref_file = prefs_write_open(rc_file_path);
410 g_free(rc_file_path);
412 if (!(pref_file) ||
413 (prefs_set_block_label(pref_file, PREFS_BLOCK_NAME) < 0))
414 return;
416 if (prefs_write_param(param, pref_file->fp) < 0) {
417 g_warning("failed to write Archiver Plugin configuration");
418 prefs_file_close_revert(pref_file);
419 return;
421 if (fprintf(pref_file->fp, "\n") < 0) {
422 FILE_OP_ERROR(rc_file_path, "fprintf");
423 prefs_file_close_revert(pref_file);
424 } else
425 prefs_file_close(pref_file);