diff options
author | JP Rosevear <jpr@novell.com> | 2004-12-17 11:15:54 +0800 |
---|---|---|
committer | JP Rosevear <jpr@src.gnome.org> | 2004-12-17 11:15:54 +0800 |
commit | b8cafeb987c18d7bdad2fd45d2e7c4613df04b74 (patch) | |
tree | fd39a4c0908f76179a067222dc7bff5a76dc30db /plugins/backup-restore/backup-restore.c | |
parent | 75d011570d92f39fac17fdb59eb678efba6d6fb4 (diff) | |
download | gsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.tar.gz gsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.tar.zst gsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.zip |
Imported backup/restore plugin
2004-12-16 JP Rosevear <jpr@novell.com>
* Imported backup/restore plugin
svn path=/trunk/; revision=28140
Diffstat (limited to 'plugins/backup-restore/backup-restore.c')
-rw-r--r-- | plugins/backup-restore/backup-restore.c | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/plugins/backup-restore/backup-restore.c b/plugins/backup-restore/backup-restore.c new file mode 100644 index 0000000000..7344806e83 --- /dev/null +++ b/plugins/backup-restore/backup-restore.c @@ -0,0 +1,122 @@ +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <gtk/gtk.h> +#include <libgnome/gnome-i18n.h> +#include "shell/es-menu.h" + +void org_gnome_backup_restore_backup (EPlugin *ep, ESMenuTargetShell *target); +void org_gnome_backup_restore_restore (EPlugin *ep, ESMenuTargetShell *target); + +static void +backup (const char *filename, gboolean restart) +{ + if (restart) + execl (EVOLUTION_TOOLSDIR "/backup", "backup", "--backup", "--restart", filename, NULL); + else + execl (EVOLUTION_TOOLSDIR "/backup", "backup", "--backup", filename, NULL); +} + +static void +restore (const char *filename, gboolean restart) +{ + if (restart) + execl (EVOLUTION_TOOLSDIR "/backup", "backup", "--restore", "--restart", filename, NULL); + else + execl (EVOLUTION_TOOLSDIR "/backup", "backup", "--restore", filename, NULL); +} + +static gboolean +sanity_check (const char *filename) +{ + char *command; + int result; + + command = g_strdup_printf ("%s/backup --check %s", EVOLUTION_TOOLSDIR, filename); + result = system (command); + g_free (command); + + g_message ("Sanity check result %d:%d", WIFEXITED (result), WEXITSTATUS (result)); + + return WIFEXITED (result) && (WEXITSTATUS (result) == 0); +} + +void +org_gnome_backup_restore_backup (EPlugin *ep, ESMenuTargetShell *target) +{ + GtkWidget *dlg; + GtkWidget *vbox, *check; + int response; + + dlg = gtk_file_chooser_dialog_new (_("Select name of Evolution archive"), GTK_WINDOW (target->target.widget), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); + + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dlg), "evolution-backup.tar.gz"); + + vbox = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox); + + check = gtk_check_button_new_with_mnemonic (_("_Restart Evolution after backup")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE); + gtk_widget_show (check); + + gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0); + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dlg), vbox); + + response = gtk_dialog_run (GTK_DIALOG (dlg)); + if (response == GTK_RESPONSE_OK) { + char *filename; + + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg)); + + backup (filename, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check))); + + g_free (filename); + } + + gtk_widget_destroy (dlg); +} + +void +org_gnome_backup_restore_restore (EPlugin *ep, ESMenuTargetShell *target) +{ + GtkWidget *dlg; + GtkWidget *vbox, *check; + int response; + + dlg = gtk_file_chooser_dialog_new (_("Select Evolution archive to restore"), GTK_WINDOW (target->target.widget), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); + + vbox = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox); + + check = gtk_check_button_new_with_mnemonic (_("_Restart Evolution after restore")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE); + gtk_widget_show (check); + + gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, TRUE, 0); + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dlg), vbox); + + response = gtk_dialog_run (GTK_DIALOG (dlg)); + if (response == GTK_RESPONSE_OK) { + char *filename; + + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg)); + + if (sanity_check (filename)) { + restore (filename, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check))); + } else { + g_message ("Invalid archive"); + } + + g_free (filename); + } + + gtk_widget_destroy (dlg); +} + + |