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