Real fix for Coverity 1372362.
[claws.git] / src / plugins / archive / archiver_prefs.c
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
4  *
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.
9  *
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.
14  *
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/>.
17  * 
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #  include "config.h"
22 #include "claws-features.h"
23 #endif
24
25 #include <glib.h>
26 #include <glib/gi18n.h>
27
28 #include "defs.h"
29
30 #include <glib.h>
31 #include <gtk/gtk.h>
32
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"
40
41 #include "archiver_prefs.h"
42
43 #define PREFS_BLOCK_NAME "Archiver"
44
45 ArchiverPrefs archiver_prefs;
46
47 struct ArchiverPrefsPage {
48         PrefsPage page;
49         GtkWidget *save_folder;
50         gint compression;
51         GtkWidget *gzip_radiobtn;
52         GtkWidget *bzip_radiobtn;
53     GtkWidget *compress_radiobtn;
54 #if ARCHIVE_VERSION_NUMBER >= 2006990
55         GtkWidget *lzma_radiobtn;
56         GtkWidget *xz_radiobtn;
57 #endif
58 #if ARCHIVE_VERSION_NUMBER >= 3000000
59         GtkWidget *lzip_radiobtn;
60 #endif
61 #if ARCHIVE_VERSION_NUMBER >= 3001000
62         GtkWidget *lrzip_radiobtn;
63         GtkWidget *lzop_radiobtn;
64         GtkWidget *grzip_radiobtn;
65 #endif
66 #if ARCHIVE_VERSION_NUMBER >= 3001900
67         GtkWidget *lz4_radiobtn;
68 #endif
69         GtkWidget *none_radiobtn;
70         GtkWidget *tar_radiobtn;
71         GtkWidget *shar_radiobtn;
72         GtkWidget *cpio_radiobtn;
73         GtkWidget *pax_radiobtn;
74         GtkWidget *recursive_chkbtn;
75         GtkWidget *md5sum_chkbtn;
76         GtkWidget *rename_chkbtn;
77         GtkWidget *unlink_chkbtn;
78 };
79
80 struct ArchiverPrefsPage archiver_prefs_page;
81
82 static void create_archiver_prefs_page                  (PrefsPage *page,
83                                                          GtkWindow *window,
84                                                          gpointer   data);
85 static void destroy_archiver_prefs_page                 (PrefsPage *page);
86 static void save_archiver_prefs                         (PrefsPage *page);
87
88 static PrefParam param[] = {
89         {"save_folder", NULL, &archiver_prefs.save_folder, P_STRING, NULL, NULL, NULL},
90         {"compression", "0", &archiver_prefs.compression, P_ENUM, NULL, NULL, NULL},
91         {"format", "0", &archiver_prefs.format, P_ENUM, NULL, NULL, NULL},
92         {"recursive", "TRUE", &archiver_prefs.recursive, P_BOOL, NULL, NULL, NULL},
93         {"md5sum",  "FALSE", &archiver_prefs.md5sum, P_BOOL, NULL, NULL, NULL},
94         {"rename", "FALSE", &archiver_prefs.rename, P_BOOL, NULL, NULL, NULL},
95         {"unlink", "FALSE", &archiver_prefs.unlink, P_BOOL, NULL, NULL, NULL},
96
97         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
98 };
99
100 void archiver_prefs_init(void)
101 {
102         static gchar *path[3];
103         gchar *rcpath;
104
105         path[0] = _("Plugins");
106         path[1] = _("Mail Archiver");
107         path[2] = NULL;
108
109         prefs_set_default(param);
110         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
111         prefs_read_config(param, PREFS_BLOCK_NAME, rcpath, NULL);
112         g_free(rcpath);
113         
114         archiver_prefs_page.page.path = path;
115         archiver_prefs_page.page.create_widget = create_archiver_prefs_page;
116         archiver_prefs_page.page.destroy_widget = destroy_archiver_prefs_page;
117         archiver_prefs_page.page.save_page = save_archiver_prefs;
118         archiver_prefs_page.page.weight = 30.0;
119         
120         prefs_gtk_register_page((PrefsPage *) &archiver_prefs_page);
121 }
122
123 void archiver_prefs_done(void)
124 {
125         prefs_gtk_unregister_page((PrefsPage *) &archiver_prefs_page);
126 }
127
128 static void foldersel_cb(GtkWidget *widget, gpointer data)
129 {
130         struct ArchiverPrefsPage *page = (struct ArchiverPrefsPage *) data;
131         gchar *startdir = NULL;
132         gchar *dirname;
133         gchar *tmp;
134         
135         if (archiver_prefs.save_folder && *archiver_prefs.save_folder)
136                 startdir = g_strconcat(archiver_prefs.save_folder,
137                                        G_DIR_SEPARATOR_S, NULL);
138         else
139                 startdir = g_strdup(get_home_dir());
140
141         dirname = filesel_select_file_save_folder(_("Select destination folder"), startdir);
142         if (!dirname) {
143                 g_free(startdir);
144                 return;
145         }
146         if (!is_dir_exist(dirname)) {
147                 alertpanel_error(_("'%s' is not a directory."),dirname);
148                 g_free(dirname);
149                 g_free(startdir);
150                 return;
151         }
152         if (dirname[strlen(dirname)-1] == G_DIR_SEPARATOR)
153                 dirname[strlen(dirname)-1] = '\0';
154         g_free(startdir);
155
156         tmp =  g_filename_to_utf8(dirname,-1, NULL, NULL, NULL);
157         gtk_entry_set_text(GTK_ENTRY(page->save_folder), tmp);
158
159         g_free(dirname);
160         g_free(tmp);
161 }
162
163 static void create_archiver_prefs_page(PrefsPage * _page,
164                                        GtkWindow *window,
165                                        gpointer data)
166 {
167         struct ArchiverPrefsPage *page = (struct ArchiverPrefsPage *) _page;
168         GtkWidget *vbox1, *vbox2;
169         GtkWidget *hbox1;
170         GtkWidget *save_folder_label;
171         GtkWidget *save_folder;
172         GtkWidget *save_folder_select;
173         GtkWidget *frame;
174         GSList    *compression_group = NULL;
175         GtkWidget *gzip_radiobtn;
176         GtkWidget *bzip_radiobtn;
177     GtkWidget *compress_radiobtn;
178 #if ARCHIVE_VERSION_NUMBER >= 2006990
179         GtkWidget *lzma_radiobtn;
180         GtkWidget *xz_radiobtn;
181 #endif
182 #if ARCHIVE_VERSION_NUMBER >= 3000000
183         GtkWidget *lzip_radiobtn;
184 #endif
185 #if ARCHIVE_VERSION_NUMBER >= 3001000
186         GtkWidget *lrzip_radiobtn;
187         GtkWidget *lzop_radiobtn;
188         GtkWidget *grzip_radiobtn;
189 #endif
190 #if ARCHIVE_VERSION_NUMBER >= 3001900
191         GtkWidget *lz4_radiobtn;
192 #endif
193         GtkWidget *none_radiobtn;
194         GSList    *format_group = NULL;
195         GtkWidget *tar_radiobtn;
196         GtkWidget *shar_radiobtn;
197         GtkWidget *cpio_radiobtn;
198         GtkWidget *pax_radiobtn;
199         GtkWidget *recursive_chkbtn;
200         GtkWidget *md5sum_chkbtn;
201         GtkWidget *rename_chkbtn;
202         GtkWidget *unlink_chkbtn;
203
204         vbox1 = gtk_vbox_new (FALSE, VSPACING);
205         gtk_widget_show (vbox1);
206         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
207
208         vbox2 = gtk_vbox_new (FALSE, 4);
209         gtk_widget_show (vbox2);
210         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
211
212         hbox1 = gtk_hbox_new (FALSE, 8);
213         gtk_widget_show (hbox1);
214         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
215
216         save_folder_label = gtk_label_new(_("Default save folder"));
217         gtk_widget_show (save_folder_label);
218         gtk_box_pack_start (GTK_BOX (hbox1), save_folder_label, FALSE, FALSE, 0);
219
220         save_folder = gtk_entry_new ();
221         gtk_widget_show (save_folder);
222         gtk_box_pack_start (GTK_BOX (hbox1), save_folder, TRUE, TRUE, 0);
223
224         save_folder_select = gtkut_get_browse_directory_btn(_("_Select"));
225         gtk_widget_show (save_folder_select);
226         gtk_box_pack_start (GTK_BOX (hbox1), save_folder_select, FALSE, FALSE, 0);
227         CLAWS_SET_TIP(save_folder_select,
228                              _("Click this button to select the default location for saving archives"));
229
230         g_signal_connect(G_OBJECT(save_folder_select), "clicked", 
231                          G_CALLBACK(foldersel_cb), page);
232
233         if (archiver_prefs.save_folder != NULL)
234                 gtk_entry_set_text(GTK_ENTRY(save_folder),
235                                    archiver_prefs.save_folder);
236
237         PACK_FRAME (vbox1, frame, _("Default compression"));
238
239         hbox1 = gtk_hbox_new(FALSE, 4);
240         gtk_widget_show(hbox1);
241         gtk_container_set_border_width(GTK_CONTAINER(hbox1), 4);
242         gtk_container_add(GTK_CONTAINER(frame), hbox1);
243
244         gzip_radiobtn = gtk_radio_button_new_with_label(compression_group, "GZIP");
245         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(gzip_radiobtn));
246         gtk_widget_show(gzip_radiobtn);
247         gtk_box_pack_start(GTK_BOX (hbox1), gzip_radiobtn, FALSE, FALSE, 0);
248         CLAWS_SET_TIP(gzip_radiobtn,
249                         _("Choose this option to use GZIP compression by default"));
250
251         bzip_radiobtn = gtk_radio_button_new_with_label(compression_group, "BZIP2");
252         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(bzip_radiobtn));
253         gtk_widget_show(bzip_radiobtn);
254         gtk_box_pack_start(GTK_BOX (hbox1), bzip_radiobtn, FALSE, FALSE, 0);
255         CLAWS_SET_TIP(bzip_radiobtn,
256                         _("Choose this option to use BZIP2 compression by default"));
257
258         compress_radiobtn = gtk_radio_button_new_with_label(compression_group, "COMPRESS");
259         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(compress_radiobtn));
260         gtk_widget_show(compress_radiobtn);
261         gtk_box_pack_start(GTK_BOX (hbox1), compress_radiobtn, FALSE, FALSE, 0);
262         CLAWS_SET_TIP(compress_radiobtn,
263                         _("Choose this option to use COMPRESS compression by default"));
264
265 #if ARCHIVE_VERSION_NUMBER >= 2006990
266         lzma_radiobtn = gtk_radio_button_new_with_label(compression_group, "LZMA");
267         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(lzma_radiobtn));
268         gtk_widget_show(lzma_radiobtn);
269         gtk_box_pack_start(GTK_BOX (hbox1), lzma_radiobtn, FALSE, FALSE, 0);
270         CLAWS_SET_TIP(lzma_radiobtn,
271                         _("Choose this option to use LZMA compression by default"));
272
273         xz_radiobtn = gtk_radio_button_new_with_label(compression_group, "XZ");
274         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(xz_radiobtn));
275         gtk_widget_show(xz_radiobtn);
276         gtk_box_pack_start(GTK_BOX (hbox1), xz_radiobtn, FALSE, FALSE, 0);
277         CLAWS_SET_TIP(xz_radiobtn,
278                         _("Choose this option to use XZ compression by default"));
279 #endif
280
281 #if ARCHIVE_VERSION_NUMBER >= 3000000
282         lzip_radiobtn = gtk_radio_button_new_with_label(compression_group, "LZIP");
283         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(lzip_radiobtn));
284         gtk_widget_show(lzip_radiobtn);
285         gtk_box_pack_start(GTK_BOX (hbox1), lzip_radiobtn, FALSE, FALSE, 0);
286         CLAWS_SET_TIP(lzip_radiobtn,
287                         _("Choose this option to use LZIP compression by default"));
288 #endif
289
290 #if ARCHIVE_VERSION_NUMBER >= 3001000
291         lrzip_radiobtn = gtk_radio_button_new_with_label(compression_group, "LRZIP");
292         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(lrzip_radiobtn));
293         gtk_widget_show(lrzip_radiobtn);
294         gtk_box_pack_start(GTK_BOX (hbox1), lrzip_radiobtn, FALSE, FALSE, 0);
295         CLAWS_SET_TIP(lrzip_radiobtn,
296                         _("Choose this option to use LRZIP compression by default"));
297
298         lzop_radiobtn = gtk_radio_button_new_with_label(compression_group, "LZOP");
299         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(lzop_radiobtn));
300         gtk_widget_show(lzop_radiobtn);
301         gtk_box_pack_start(GTK_BOX (hbox1), lzop_radiobtn, FALSE, FALSE, 0);
302         CLAWS_SET_TIP(lzop_radiobtn,
303                         _("Choose this option to use LZOP compression by default"));
304
305         grzip_radiobtn = gtk_radio_button_new_with_label(compression_group, "GRZIP");
306         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(grzip_radiobtn));
307         gtk_widget_show(grzip_radiobtn);
308         gtk_box_pack_start(GTK_BOX (hbox1), grzip_radiobtn, FALSE, FALSE, 0);
309         CLAWS_SET_TIP(grzip_radiobtn,
310                         _("Choose this option to use GRZIP compression by default"));
311 #endif
312
313 #if ARCHIVE_VERSION_NUMBER >= 3001900
314         lz4_radiobtn = gtk_radio_button_new_with_label(compression_group, "LZ4");
315         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(lz4_radiobtn));
316         gtk_widget_show(lz4_radiobtn);
317         gtk_box_pack_start(GTK_BOX (hbox1), lz4_radiobtn, FALSE, FALSE, 0);
318         CLAWS_SET_TIP(lz4_radiobtn,
319                         _("Choose this option to use LZ4 compression by default"));
320 #endif
321
322     none_radiobtn = gtk_radio_button_new_with_label(compression_group, _("None"));
323         compression_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(none_radiobtn));
324         gtk_widget_show(none_radiobtn);
325         gtk_box_pack_start(GTK_BOX (hbox1), none_radiobtn, FALSE, FALSE, 0);
326         CLAWS_SET_TIP(none_radiobtn,
327                         _("Choose this option to disable compression by default"));
328
329         switch (archiver_prefs.compression) {
330         case COMPRESSION_GZIP:
331                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gzip_radiobtn), TRUE);
332                 break;
333         case COMPRESSION_BZIP:
334                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bzip_radiobtn), TRUE);
335                 break;
336     case COMPRESSION_COMPRESS:       
337                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compress_radiobtn), TRUE);
338                 break;
339 #if ARCHIVE_VERSION_NUMBER >= 2006990
340         case COMPRESSION_LZMA:
341                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lzma_radiobtn), TRUE);
342                 break;
343         case COMPRESSION_XZ:
344                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(xz_radiobtn), TRUE);
345                 break;
346 #endif
347 #if ARCHIVE_VERSION_NUMBER >= 3000000
348         case COMPRESSION_LZIP:
349                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lzip_radiobtn), TRUE);
350                 break;
351 #endif
352 #if ARCHIVE_VERSION_NUMBER >= 3001000
353         case COMPRESSION_LRZIP:
354                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lrzip_radiobtn), TRUE);
355                 break;
356         case COMPRESSION_LZOP:
357                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lzop_radiobtn), TRUE);
358                 break;
359         case COMPRESSION_GRZIP:
360                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(grzip_radiobtn), TRUE);
361                 break;
362 #endif
363 #if ARCHIVE_VERSION_NUMBER >= 3001900
364         case COMPRESSION_LZ4:
365                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lz4_radiobtn), TRUE);
366                 break;
367 #endif
368         case COMPRESSION_NONE:
369                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(none_radiobtn), TRUE);
370                 break;
371         }
372
373         PACK_FRAME (vbox1, frame, _("Default format"));
374
375         hbox1 = gtk_hbox_new(FALSE, 4);
376         gtk_widget_show(hbox1);
377         gtk_container_set_border_width(GTK_CONTAINER(hbox1), 4);
378         gtk_container_add(GTK_CONTAINER(frame), hbox1);
379
380         tar_radiobtn = gtk_radio_button_new_with_label(format_group, "TAR");
381         format_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(tar_radiobtn));
382         gtk_widget_show(tar_radiobtn);
383         gtk_box_pack_start(GTK_BOX (hbox1), tar_radiobtn, FALSE, FALSE, 0);
384         CLAWS_SET_TIP(tar_radiobtn,
385                         _("Choose this option to use the TAR format by default"));
386
387         shar_radiobtn = gtk_radio_button_new_with_label(format_group, "SHAR");
388         format_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(shar_radiobtn));
389         gtk_widget_show(shar_radiobtn);
390         gtk_box_pack_start(GTK_BOX (hbox1), shar_radiobtn, FALSE, FALSE, 0);
391         CLAWS_SET_TIP(shar_radiobtn,
392                         _("Choose this option to use the SHAR format by default"));
393
394         cpio_radiobtn = gtk_radio_button_new_with_label(format_group, "CPIO");
395         format_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(cpio_radiobtn));
396         gtk_widget_show(cpio_radiobtn);
397         gtk_box_pack_start(GTK_BOX (hbox1), cpio_radiobtn, FALSE, FALSE, 0);
398         CLAWS_SET_TIP(cpio_radiobtn,
399                         _("Choose this option to use the CPIO format by default"));
400
401         pax_radiobtn = gtk_radio_button_new_with_label(format_group, "PAX");
402         format_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(pax_radiobtn));
403         gtk_widget_show(pax_radiobtn);
404         gtk_box_pack_start(GTK_BOX (hbox1), pax_radiobtn, FALSE, FALSE, 0);
405         CLAWS_SET_TIP(pax_radiobtn,
406                         _("Choose this option to use the PAX format by default"));
407
408         switch (archiver_prefs.format) {
409         case FORMAT_TAR:
410                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tar_radiobtn), TRUE);
411                 break;
412         case FORMAT_SHAR:
413                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(shar_radiobtn), TRUE);
414                 break;
415         case FORMAT_CPIO:
416                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cpio_radiobtn), TRUE);
417                 break;
418         case FORMAT_PAX:
419                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pax_radiobtn), TRUE);
420                 break;
421         }
422
423         PACK_FRAME (vbox1, frame, _("Default miscellaneous options"));
424
425         hbox1 = gtk_hbox_new(FALSE, 4);
426         gtk_widget_show(hbox1);
427         gtk_container_set_border_width(GTK_CONTAINER(hbox1), 4);
428         gtk_container_add(GTK_CONTAINER(frame), hbox1);
429
430         PACK_CHECK_BUTTON(hbox1, recursive_chkbtn, _("Recursive"));
431         CLAWS_SET_TIP(recursive_chkbtn,
432                 _("Choose this option to include subfolders in the archives by default"));
433         PACK_CHECK_BUTTON(hbox1, md5sum_chkbtn, _("MD5sum"));
434         CLAWS_SET_TIP(md5sum_chkbtn,
435                 _("Choose this option to add MD5 checksums for each file in the archives by default.\n"
436                   "Be aware though, that this dramatically increases the time it\n"
437                   "will take to create the archives"));
438
439         PACK_CHECK_BUTTON(hbox1, rename_chkbtn, _("Rename"));
440         CLAWS_SET_TIP(rename_chkbtn,
441                 _("Choose this option to use descriptive names for each file in the archive.\n"
442                   "The naming scheme: date_from@to@subject.\n"
443                   "Names will be truncated to max 96 characters"));
444
445         PACK_CHECK_BUTTON(hbox1, unlink_chkbtn, _("Delete"));
446         CLAWS_SET_TIP(unlink_chkbtn,
447                 _("Choose this option to delete mails after archiving"));
448
449         if (archiver_prefs.recursive)
450                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(recursive_chkbtn), TRUE);
451         if (archiver_prefs.md5sum)
452                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(md5sum_chkbtn), TRUE);
453         if (archiver_prefs.rename)
454                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rename_chkbtn), TRUE);
455         if (archiver_prefs.unlink)
456                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(unlink_chkbtn), TRUE);
457
458
459         page->save_folder = save_folder;
460         page->gzip_radiobtn = gzip_radiobtn;
461         page->bzip_radiobtn = bzip_radiobtn;
462     page->compress_radiobtn = compress_radiobtn;
463 #if ARCHIVE_VERSION_NUMBER >= 2006990
464         page->lzma_radiobtn = lzma_radiobtn;
465         page->xz_radiobtn = xz_radiobtn;
466 #endif
467 #if ARCHIVE_VERSION_NUMBER >= 3000000
468         page->lzip_radiobtn = lzip_radiobtn;
469 #endif
470 #if ARCHIVE_VERSION_NUMBER >= 3001000
471         page->lrzip_radiobtn = lrzip_radiobtn;
472         page->lzop_radiobtn = lzop_radiobtn;
473         page->grzip_radiobtn = grzip_radiobtn;
474 #endif
475 #if ARCHIVE_VERSION_NUMBER >= 3001900
476         page->lz4_radiobtn = lz4_radiobtn;
477 #endif
478         page->none_radiobtn = none_radiobtn;
479         page->tar_radiobtn = tar_radiobtn;
480         page->shar_radiobtn = shar_radiobtn;
481         page->cpio_radiobtn = cpio_radiobtn;
482         page->pax_radiobtn = pax_radiobtn;
483         page->recursive_chkbtn = recursive_chkbtn;
484         page->md5sum_chkbtn = md5sum_chkbtn;
485         page->rename_chkbtn = rename_chkbtn;
486         page->unlink_chkbtn = unlink_chkbtn;
487
488         page->page.widget = vbox1;
489 }
490
491 static void destroy_archiver_prefs_page(PrefsPage *page)
492 {
493         /* Do nothing! */
494 }
495
496 static void save_archiver_prefs(PrefsPage * _page)
497 {
498         struct ArchiverPrefsPage *page = (struct ArchiverPrefsPage *) _page;
499         PrefFile *pref_file;
500         gchar *rc_file_path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
501                                           COMMON_RC, NULL);
502
503         archiver_prefs.save_folder = gtk_editable_get_chars(GTK_EDITABLE(page->save_folder), 0, -1);
504         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->gzip_radiobtn)))
505                 archiver_prefs.compression = COMPRESSION_GZIP;
506         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->bzip_radiobtn)))
507                 archiver_prefs.compression = COMPRESSION_BZIP;
508         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->compress_radiobtn)))
509                 archiver_prefs.compression = COMPRESSION_COMPRESS;
510 #if ARCHIVE_VERSION_NUMBER >= 2006990
511         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->lzma_radiobtn)))
512                 archiver_prefs.compression = COMPRESSION_LZMA;
513         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->xz_radiobtn)))
514                 archiver_prefs.compression = COMPRESSION_XZ;
515 #endif
516 #if ARCHIVE_VERSION_NUMBER >= 3000000
517         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->lzip_radiobtn)))
518                 archiver_prefs.compression = COMPRESSION_LZIP;
519 #endif
520 #if ARCHIVE_VERSION_NUMBER >= 3001000
521         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->lrzip_radiobtn)))
522                 archiver_prefs.compression = COMPRESSION_LRZIP;
523         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->lzop_radiobtn)))
524                 archiver_prefs.compression = COMPRESSION_LZOP;
525         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->grzip_radiobtn)))
526                 archiver_prefs.compression = COMPRESSION_GRZIP;
527 #endif
528 #if ARCHIVE_VERSION_NUMBER >= 3001900
529         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->lz4_radiobtn)))
530                 archiver_prefs.compression = COMPRESSION_LZ4;
531 #endif
532         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->none_radiobtn)))
533                 archiver_prefs.compression = COMPRESSION_NONE;
534
535         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->tar_radiobtn)))
536                 archiver_prefs.format = FORMAT_TAR;
537         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->shar_radiobtn)))
538                 archiver_prefs.format = FORMAT_SHAR;
539         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->cpio_radiobtn)))
540                 archiver_prefs.format = FORMAT_CPIO;
541         else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->pax_radiobtn)))
542                 archiver_prefs.format = FORMAT_PAX;
543
544         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->recursive_chkbtn)))
545                 archiver_prefs.recursive = TRUE;
546         else
547                 archiver_prefs.recursive = FALSE;
548         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->md5sum_chkbtn)))
549                 archiver_prefs.md5sum = TRUE;
550         else
551                 archiver_prefs.md5sum = FALSE;
552         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->rename_chkbtn)))
553                 archiver_prefs.rename = TRUE;
554         else
555                 archiver_prefs.rename = FALSE;
556         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->unlink_chkbtn)))
557                 archiver_prefs.unlink = TRUE;
558         else
559                 archiver_prefs.unlink = FALSE;
560
561
562         pref_file = prefs_write_open(rc_file_path);
563         g_free(rc_file_path);
564         
565         if (!(pref_file) ||
566             (prefs_set_block_label(pref_file, PREFS_BLOCK_NAME) < 0))
567           return;
568         
569         if (prefs_write_param(param, pref_file->fp) < 0) {
570           g_warning("failed to write Archiver Plugin configuration");
571           prefs_file_close_revert(pref_file);
572           return;
573         }
574         if (fprintf(pref_file->fp, "\n") < 0) {
575                 FILE_OP_ERROR(rc_file_path, "fprintf");
576                 prefs_file_close_revert(pref_file);
577         } else
578                 prefs_file_close(pref_file);
579
580 }