diff options
Diffstat (limited to 'perl-install/standalone/drakbackup')
-rwxr-xr-x | perl-install/standalone/drakbackup | 5149 |
1 files changed, 0 insertions, 5149 deletions
diff --git a/perl-install/standalone/drakbackup b/perl-install/standalone/drakbackup deleted file mode 100755 index 7736a2e17..000000000 --- a/perl-install/standalone/drakbackup +++ /dev/null @@ -1,5149 +0,0 @@ -#!/usr/bin/perl -w -# -# Copyright (C) 2001 MandrakeSoft by Sebastien DUPONT <dupont_s@epita.fr> -# Redistribution of this file is permitted under the terms of the GNU -# Public License (GPL) -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -#________________________________________________________________ -# -# Description: -# -# Drakbackup is used to backup your system. -# During the configuration you can select -# - System files, -# - Users files, -# - Other files. -# or All your system ... and Other (like windows Partitions) -# -# Drakbackup allows you to backup your system on: -# - Harddrive. -# - NFS. -# - CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.). -# - FTP. -# - Rsync. -# - Webdav. -# - Tape. -# -# Drakbackup allows you to Restore your system on -# choosen directory. -# -# Per default all backup will be stored on your -# /var/lib/drakbackup directory -# -# Configuration file: -# /etc/drakconf/drakbackup/drakbakup.conf -# -#________________________________________________________________ -# -# Backup files formats: -# -# no incremental backup: -# backup_sys_date_hour.tar.* -# backup_user_toto_date_hour.tar.* -# backup_other_date_hour.tar.* -# -# first incremental backup: (if backup_base* does not exist ) -# -# backup_base_sys_date_hour.tar.* -# backup_base_user_toto_date_hour.tar.* -# backup_base_other_date_hour.tar.* -# -# other incremental backup: (if backup_base* already exist ) -# -# backup_incr_sys_date_hour.tar.* -# backup_incr_user_toto_date_hour.tar.* -# backup_incr_other_date_hour.tar.* -# -#________________________________________________________________ -# -# REQUIRE: cron if daemon -# cdrecord & mkisofs -# perl Net::FTP -# ssh-askpass -# -# BUGS : -# restore->other_media->next->previous => crash ... -# selection des sources a inclure dans le backup cd. -# help -> ok after install_rpm -# -# TODO: -# 1 - print ftp problem for user. -# 2 - calcul disk space. -# use quota. -# 3 - ssh & rsync -> expect or .identity.pub/authorized_keys -# 4 - write on cd --> ! change Joliet to HFS for Apple -# 5 - cd writer detection -> cdrw: /sys/dev/cdrom/info /scsi/host0/bus0/target4/lun0 -# /proc/sys/dev/cdrom/ -# 6 - total backup.( all partitions wanted, windows partitions for example!) -# dump use for total backup. -# 7 - custom deamon -# 8 - placer README dans $save_path -> prevenir des danger de supprimer la premier version -# explain configuration file variables (mainly for non X users) -# 9 - webdav -# 10- backend : --resore_all, --restore_sys, --restore_users -# --build_cd_autoinst -# --backup_now --backup_default_now -# 11- tape device support -# 12- cpio use !! -# 13- boot floppy disk (with dialog) -# 14- build autoboot with backup and install cd -# 15- use .backupignore like on CVS -# 16- afficher les modif dans un fichier texte du meme nom -# pour afficher durant le restore. -# 17- futur: could be possible to restore a specific file -# or directory at specific date. -# 18- possible all files each time from directory. -# -# DONE TODAY: -#________________________________________________________________ - -use Gtk; -use lib qw(/usr/lib/libDrakX ); - -use standalone - ; #- warning, standalone must be loaded very first, for 'explanations' - -use interactive; -use my_gtk qw(:helpers :wrappers); -use common; -use strict; -use Time::localtime; - -my $in = 'interactive'->vnew( '', 'default' ); -$::isEmbedded = ( $::XID, $::CCPID ) = "@ARGV" =~ /--embedded (\w+) (\w+)/; - -if ( "@ARGV" =~ /--help|-h/ ) { - print q(Backup and Restore application - ---default : save default directories. ---debug : show all debug messages. ---show-conf : list of files or directories to backup. ---daemon : use daemon configuration. ---help : show this message. ---version : show version name. -); - exit(0); -} - -if ( "@ARGV" =~ /--version/ ) { - print "DrakBakckup Version 1.0\n"; - exit(0); -} - -# Backend Options. -my $central_widget; -my $previous_widget; -my $current_widget; -my $interactive; -my $up_box; -my $advanced_box; -my $box2; -my $cfg_file_exist = 0; -my @all_user_list; -my $list_other; -my $DEBUG = 0; -my $restore_sys = 1; -my $restore_user = 1; -my $restore_other = 1; -my $restore_step_sys_date = ""; -my @user_backuped = (); -my @sys_backuped = (); -my $sys_backuped = 0; -my $other_backuped = 0; -my @user_list_to_restore = (); -my @sys_list_to_restore = (); -my $cd_devive_entry; -my $custom_help; -my $button_box; -my $button_box_tmp; -my $next_widget; -my $sav_next_widget; -my $system_state; -my $restore_state; -my $save_path_entry; -my $restore_find_path_entry; -my $pbar; -my $pbar1; -my $pbar2; -my $pbar3; -my $the_time; -my @user_list_to_restore2 = (); -my @data_backuped = (); -my $label_tail; -my @list_to_build_on_cd = (); -my $restore_path = "/"; -my $restore_other_path = 0; -my $restore_other_src; -my $path_to_find_restore; -my $other_media_hd; -my $backup_bef_restore = 0; -my $table; -my @user_list_backuped = (); -my @files_corrupted = (); -my $remove_user_before_restore = 1; -my @file_list_to_send_by_ftp = (); -my $results; - -# config. FILES -> Default PATH & Global variables. -my @sys_files = ("/etc"); -my @user_list; -my @list_other = (); -my $cfg_file = "/etc/drakxtools/drakbackup/drakbackup.conf"; -my $save_path = "/var/lib/drakbackup"; -my $comp_mode = 0; -my $backup_sys = 1; -my $backup_user = 1; -my $backup_daemon = 1; -my $backup_sys_versions = 1; -my $backup_user_versions = 1; -my $backup_other_versions = 0; -my $what_no_browser = 1; -my $cdrw = 0; -my $net_proto = ''; -my $host_path = ''; -my $login_user = ''; -my $daemon = 0; -my $ssh_daemon = 0; -my $ftp_daemon = 0; -my $hd_daemon = 0; -my $cd_daemon = 0; -my $hd_quota = 0; -my $where_net_ftp = 0; -my $where_net_ssh = 0; -my $where_net = 0; -my $where_hd = 1; -my $where_cd = 0; -my $where_tape = 0; -my $cd_time = 650; -my $when_space; -my $cd_with_install_boot = 0; -my $cd_devive = ''; -my $host_name = ''; -my $backupignore = 0; -my $auth_choice = 0; -my $remember_pass = 0; -my $passwd_user = ''; -my $save_device_tape = (); -my $cdrw_erase = 0; -my $no_critical_sys = 1; -my $send_mail = 0; -my $user_mail; -my @user_info; - -foreach (@ARGV) { - /--default/ and backend_mode(); - /--daemon/ and daemon_mode(); - /--show-conf/ and show_conf(); - /--debug/ and $DEBUG = 1, next; -} - -sub show_conf { - print "DrakBakckup configuration:\n\n"; - read_conf_file(); - system_state(); - print $system_state . "\n"; - exit(0); -} - -sub backend_mode { - build_backup_files(); - exit(0); -} - -sub daemon_mode { - $daemon = 1; - build_backup_files(); - exit(0); -} - -interactive_mode(); - -sub all_user_list { - my ( $uname, $uid ); - @all_user_list = (); - setpwent(); - do { - @user_info = getpwent(); - ( $uname, $uid ) = @user_info[ 0, 2 ]; - push ( @all_user_list, $uname ) - if ( $uid > 500 ) - and !( $uname eq "nobody" ); - } while (@user_info); -} - -sub the_time { - $the_time = "_"; - $the_time .= localtime->year() + 1900; - if ( localtime->mon() < 9 ) { $the_time .= "0"; } - $the_time .= localtime->mon() + 1; - if ( localtime->mday() < 10 ) { $the_time .= "0"; } - $the_time .= localtime->mday(); - $the_time .= "_"; - if ( localtime->hour() < 10 ) { $the_time .= "0"; } - $the_time .= localtime->hour(); - if ( localtime->min() < 10 ) { $the_time .= "0"; } - $the_time .= localtime->min(); - if ( localtime->sec() < 10 ) { $the_time .= "0"; } - $the_time .= localtime->sec(); -} - -sub save_conf_file { - my @cfg_list = ( - "SYS_FILES=@sys_files\n", "HOME_FILES=@user_list\n", - "OTHER_FILES=@list_other\n", "PATH_TO_SAVE=$save_path\n", - "HOST_PATH=$host_path\n", "NET_PROTO=$net_proto\n", - "CD_TIME=$cd_time\n", "USER_MAIL=$user_mail\n", - "DAEMON_TIME_SPACE=$when_space\n", "CDRW_DEVICE=$cd_devive\n", - "LOGIN=$login_user\n", "TAPE_DEVICE=$save_device_tape\n", - "HOST_NAME=$host_name\n" - ); - $no_critical_sys and push @cfg_list, "NO_CRITICAL_SYS\n"; - $no_critical_sys or push @cfg_list, "CRITICAL_SYS\n"; - $send_mail and push @cfg_list, "SEND_MAIL\n"; - $backup_sys_versions and push @cfg_list, "SYS_INCREMENTAL_BACKUPS\n"; - $backup_user_versions and push @cfg_list, "USER_INCREMENTAL_BACKUPS\n"; - $backup_other_versions and push @cfg_list, "OTHER_INCREMENTAL_BACKUPS\n"; - $cdrw_erase and push @cfg_list, "CDRW_ERASE\n"; - $where_net_ftp and push @cfg_list, "USE_NET_FTP\n"; - $where_net_ssh and push @cfg_list, "USE_NET_SSH\n"; - $remember_pass and push @cfg_list, "LOGIN=$login_user\n"; - $remember_pass and push @cfg_list, "PASSWD=$passwd_user\n"; - $remember_pass and push @cfg_list, "REMEMBER_PASS\n"; - $auth_choice or push @cfg_list, "AUTH_CHOICE=0\n"; - if ( $auth_choice == 1 ) { push @cfg_list, "AUTH_CHOICE=1\n"; } - if ( $auth_choice == 2 ) { push @cfg_list, "AUTH_CHOICE=2\n"; } - $cd_with_install_boot and push @cfg_list, "CD_WITH_INSTALL_BOOT\n"; - $ssh_daemon and push @cfg_list, "SSH_DAEMON\n"; - $ftp_daemon and push @cfg_list, "FTP_DAEMON\n"; - $hd_daemon and push @cfg_list, "HD_DAEMON\n"; - $cd_daemon and push @cfg_list, "CD_DAEMON\n"; - $hd_quota and push @cfg_list, "HD_QUOTA\n"; - $where_hd and push @cfg_list, "USE_HD\n"; - $where_cd and push @cfg_list, "USE_CD\n"; - $where_net and push @cfg_list, "USE_NET\n"; - $cdrw and push @cfg_list, "CDRW\n"; - $what_no_browser or push @cfg_list, "BROWSER_CACHE\n"; - $backup_sys or push @cfg_list, "NO_SYS_FILES\n"; - if ($comp_mode) { push @cfg_list, "OPTION_COMP=TAR.BZ2\n" } - else { push @cfg_list, "OPTION_COMP=TAR.GZ\n" } - output_p( $cfg_file, @cfg_list ); - system("chmod 600 $cfg_file"); - save_cron_files(); -} - -sub read_cron_files { - my $daemon_found = 0; - foreach (qw(hourly daily weekly monthly)) { - if ( -f "/etc/cron.$_/drakbackup" ) { - $when_space = $_; - $daemon_found = 1; - last; - } - - } - !$daemon_found and $backup_daemon = 0; -} - -sub save_cron_files { - my @cron_file = ( "#!/bin/sh\n", "\n", "/usr/sbin/drakbackup --daemon" ); - - if ($backup_daemon) { - foreach (qw(hourly daily weekly monthly)) { - -f "/etc/cron.$_/drakbackup" and rm_rf("/etc/cron.$_/drakbackup"); - } - output_p( "/etc/cron.$when_space/drakbackup", @cron_file ); - system("chmod +x /etc/cron.$when_space/drakbackup"); - } - else { - foreach (qw(hourly daily weekly monthly)) { - -f "/etc/cron.$_/drakbackup" and rm_rf("/etc/cron.$_/drakbackup"); - } - } -} - -sub read_conf_file { - if ( -e $cfg_file ) { - open( CONF_FILE, "<" . "$cfg_file" ) - || print "You must be root to read configuration file. \n"; - while (<CONF_FILE>) { - next unless /\S/; - next if /^#/; - chomp; - if (/^SYS_FILES/) { - s/^SYS_FILES=//gi; - @sys_files = split ( ' ', $_ ); - } - if (/^HOME_FILES/) { - s/^HOME_FILES=//gi; - @user_list = split ( ' ', $_ ); - } - if (/^OTHER_FILES/) { - s/^OTHER_FILES=//gi; - @list_other = split ( ' ', $_ ); - } - if (/^PATH_TO_SAVE/) { s/^PATH_TO_SAVE=//gi; $save_path = $_; } - if (/^NO_SYS_FILES/) { $backup_sys = 0; } - if (/^NO_USER_FILES/) { $backup_user = 0; } - if (/^OPTION_COMP/) { - s/^OPTION_COMP=//gi; - /TAR.GZ/ and $comp_mode = 0; - /TAR.BZ2/ and $comp_mode = 1; - } - if (/^BROWSER_CACHE/) { $what_no_browser = 0; } - if (/^CDRW/) { $cdrw = 1; } - if (/^NET_PROTO/) { s/^NET_PROTO=//gi; $net_proto = $_; } - if (/^HOST_PATH/) { s/^HOST_PATH=//gi; $host_path = $_; } - if (/^SSH_DAEMON/) { $ssh_daemon = 1; } - if (/^FTP_DAEMON/) { $ftp_daemon = 1; } - if (/^HD_DAEMON/) { $hd_daemon = 1; } - if (/^CD_DAEMON/) { $cd_daemon = 1; } - if (/^HD_QUOTA/) { $hd_quota = 1; } - if (/^USE_HD/) { $where_hd = 1; } - if (/^USE_CD/) { $where_cd = 1; } - if (/^USE_NET/) { $where_net = 1; } - if (/^USE_TAPE/) { $where_tape = 1; } - if (/^CD_TIME/) { s/^CD_TIME=//gi; $cd_time = $_; } - - if (/^DAEMON_TIME_SPACE/) { - s/^DAEMON_TIME_SPACE=//gi; - $when_space = $_; - } - if (/^CD_WITH_INSTALL_BOOT/) { $cd_with_install_boot = 1; } - if (/^CDRW_DEVICE/) { s/^CDRW_DEVICE=//gi; $cd_devive = $_; } - if (/^HOST_NAME/) { s/^HOST_NAME=//gi; $host_name = $_; } - if (/^AUTH_CHOICE/) { s/^AUTH_CHOICE=//gi; $auth_choice = $_; } - if (/^REMEMBER_PASS/) { $remember_pass = 1; } - if (/^LOGIN/) { - s/^LOGIN=//gi; - $login_user = $_; - $remember_pass = 1; - } - if (/^PASSWD/) { - s/^PASSWD=//gi; - $passwd_user = $_; - $remember_pass = 1; - } - if (/^USER_MAIL/) { s/^USER_MAIL=//gi; $user_mail = $_; } - if (/^USE_NET_FTP/) { $where_net_ftp = 1; } - if (/^SEND_MAIL/) { $send_mail = 1; } - if (/^USE_NET_SSH/) { $where_net_ssh = 1; } - if (/^TAPE_DEVICE/) { s/TAPE_DEVICE=//gi; $save_device_tape = $_; } - if (/^CDRW_ERASE/) { $cdrw_erase = 1; } - if (/^SYS_INCREMENTAL_BACKUPS/) { $backup_sys_versions = 1; } - if (/^USER_INCREMENTAL_BACKUPS/) { $backup_user_versions = 1; } - if (/^OTHER_INCREMENTAL_BACKUPS/) { $backup_other_versions = 1; } - if (/^NO_CRITICAL_SYS/) { $no_critical_sys = 1; } - if (/^CRITICAL_SYS/) { $no_critical_sys = 0; } - } - read_cron_files(); - $cfg_file_exist = 1; - } - else { $cfg_file_exist = 0; } - close CONF_FILE; -} - -sub complete_results { - system_state(); - $results .= -"***********************************************************************\n\n"; - $daemon or $results .= _("\n DrakBackup Report \n\n"); - $daemon - and $results .= - _("\n DrakBackup Daemon Report\n\n\n"); - $results .= -"***********************************************************************\n\n"; - $results .= $system_state; - $results .= -"\n\n***********************************************************************\n\n"; - $results .= _("\n DrakBackup Report Details\n\n\n"); - $results .= -"***********************************************************************\n\n"; -} - -sub ftp_client { - use Net::FTP; - my $ftp; - - $DEBUG - and print "file list to send : $_\n " foreach @file_list_to_send_by_ftp; - if ( $DEBUG && $interactive ) { - $ftp = Net::FTP->new( "$host_name", Debug => 1 ) or return (1); - } - elsif ($interactive) { - $ftp = Net::FTP->new( "$host_name", Debug => 0 ) or return (1); - } - else { $ftp = Net::FTP->new( "$host_name", Debug => 0 ) or return (1); } - $ftp->login( "$login_user", "$passwd_user" ); - $ftp->cwd("$host_path"); - foreach (@file_list_to_send_by_ftp) { - $pbar->set_value(0); - $interactive and progress( $pbar, 0.5, $_ ); - $interactive and $pbar->set_show_text($_); - $ftp->put("$_"); - $interactive and progress( $pbar, 0.5, $_ ); - $interactive and $pbar->set_show_text($_); - $interactive - and - progress( $pbar3, 1 / @file_list_to_send_by_ftp, _("total progess") ); - } - $ftp->quit; - return (0); -} - -sub ssh_client { - system("scp @file_list_to_send_by_ftp root\@petra:."); -} - -sub write_on_cd { - - # system("cdrecord "); -} - -sub build_iso { - - # system("mkisofs -r -J -T -v -V 'Drakbackup' -o drakbackup.iso /var/lib/drakbackup"); -} - -sub build_cd { - build_iso(); -} - -sub send_mail { - my ($result) = @_; - my $datem = `date`; - - open F, "|/usr/sbin/sendmail -f$user_mail $user_mail" or return (1); - print F "From: drakbackup\n"; - print F "To: $user_mail \n"; - print F "Subject: DrakBackup report on $datem \n"; - print F "\n"; - print F "$result\n"; - close F or return (1); - return (0); -} - -sub build_backup_files { - my $path_name; - my $tar_cmd; - my $more_recent; - my $tar_cmd_sys; - my $tar_cmd_user; - my $tar_cmd_other; - my $tar_ext; - my $vartemp; - my $base_sys_exist = 0; - my $base_user_exist = 0; - my $base_other_exist = 0; - my @list_temp = (); - my @list_other_; - my @dir_content = (); - my $file_date; - $results = ""; - - read_conf_file(); - the_time(); - $send_mail and complete_results(); - -d $save_path or mkdir_p($save_path); - if ($comp_mode) { - $DEBUG and $tar_cmd = "tar cv --use-compress-program /usr/bin/bzip2 "; - $DEBUG or $tar_cmd = "tar c --use-compress-program /usr/bin/bzip2 "; - $tar_ext = "tar.bz2"; - } - else { - $DEBUG and $tar_cmd = "tar cvpz "; - $DEBUG or $tar_cmd = "tar cpz "; - $tar_ext = "tar.gz"; - } - $tar_cmd_sys = $tar_cmd; - $tar_cmd_user = $tar_cmd; - $tar_cmd_other = $tar_cmd; - $no_critical_sys - and $tar_cmd_sys .= - "--exclude passwd --exclude fstab --exclude group --exclude mtab"; - $what_no_browser - and $tar_cmd_user .= "--exclude NewCache --exclude Cache --exclude cache"; - - -d $save_path and @dir_content = all($save_path); - grep ( /^backup\_base\_sys/, @dir_content ) and $base_sys_exist = 1; - - if ( ( $where_hd && !$daemon ) || ( $daemon && $hd_daemon ) ) { - $interactive and progress( $pbar, 0.5, _("Backup system files...") ); - if ($backup_sys) { - if ($backup_sys_versions) { - if ( grep /^backup\_incr\_sys/, @dir_content ) { - my @more_recent = grep /^backup\_incr\_sys/, - sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - system( -"find @sys_files -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_sys$the_time.txt" - ); - if ( !cat_("$save_path/list_incr_sys$the_time.txt") ) { - system("rm $save_path/list_incr_sys$the_time.txt"); - } - else { - system( -"$tar_cmd_sys -f $save_path/backup_incr_sys$the_time.$tar_ext -T $save_path/list_incr_sys$the_time.txt" - ); - push @file_list_to_send_by_ftp, - "$save_path/backup_incr_sys$the_time.$tar_ext"; - push @file_list_to_send_by_ftp, - "$save_path/list_incr_sys$the_time.txt"; - $results .= -"\nfile: $save_path/backup_incr_sys$the_time.$tar_ext\n"; - $results .= - cat_("$save_path/list_incr_sys$the_time.txt"); - } - } - elsif ( grep /^backup\_base\_sys/, @dir_content ) { - my @more_recent = grep /^backup\_base\_sys/, - sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - system( -"find @sys_files -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_sys$the_time.txt" - ); - if ( !cat_("$save_path/list_incr_sys$the_time.txt") ) { - system("rm $save_path/list_incr_sys$the_time.txt"); - } - else { - system( -"$tar_cmd_sys -f $save_path/backup_incr_sys$the_time.$tar_ext -T $save_path/list_incr_sys$the_time.txt" - ); - push @file_list_to_send_by_ftp, - "$save_path/backup_incr_sys$the_time.$tar_ext"; - push @file_list_to_send_by_ftp, - "$save_path/list_incr_sys$the_time.txt"; - $results .= -"\nfile: $save_path/backup_incr_sys$the_time.$tar_ext\n"; - $results .= - cat_("$save_path/list_incr_sys$the_time.txt"); - } - } - else { - system( -"$tar_cmd_sys -f $save_path/backup_base_sys$the_time.$tar_ext @sys_files" - ); - push @file_list_to_send_by_ftp, - "$save_path/backup_base_sys$the_time.$tar_ext"; - $results .= - "\nfile: $save_path/backup_base_sys$the_time.$tar_ext\n"; - } - } - else { - - # system("cd $save_path && rm -f backup_sys* backup_base_sys* backup_incr_sys*"); - system( -"$tar_cmd_sys -f $save_path/backup_sys$the_time.$tar_ext @sys_files" - ); - push @file_list_to_send_by_ftp, - "$save_path/backup_sys$the_time.$tar_ext"; - $results .= "\nfile: $save_path/backup_sys$the_time.$tar_ext\n"; - } - } - - $interactive and progress( $pbar, 0.5, _("Backup system files...") ); - $interactive - and progress( $pbar3, 0.3, _("Hard Disk Backup files...") ); - - if (@list_other) { - system("cd $save_path && rm -f backup_other* "); - system( -"$tar_cmd_other -f $save_path/backup_other$the_time.$tar_ext @list_other" - ); - push @file_list_to_send_by_ftp, - "$save_path/backup_other$the_time.$tar_ext"; - $results .= "\nfile: $save_path/backup_other$the_time.$tar_ext\n"; - - #old foreach (@list_other) { push @list_other_, $_ . "\n"; } - @list_other_ = map { "$_\n" } @list_other; - output_p( $save_path . '/list_other', @list_other_ ); - } - - $interactive and progress( $pbar1, 1, _("Backup User files...") ); - $interactive - and progress( $pbar3, 0.3, _("Hard Disk Backup Progress...") ); - - if ($backup_user) { - foreach (@user_list) { - my $user = $_; - $path_name = return_path($user); - if ($backup_user_versions) { - if ( grep( /^backup\_incr\_user\_$user\_/, @dir_content ) ) - { - my @more_recent = grep /^backup\_incr\_user\_$user\_/, - sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - system( -"find $path_name -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_user_$user$the_time.txt" - ); - if ( - !cat_( - "$save_path/list_incr_user_$user$the_time.txt" - ) - ) - { - system( -"rm $save_path/list_incr_user_$user$the_time.txt" - ); - } - else { - system( -"$tar_cmd_user -f $save_path/backup_incr_user_$user$the_time.$tar_ext -T $save_path/list_incr_user_$user$the_time.txt" - ); - push @file_list_to_send_by_ftp, -"$save_path/backup_incr_user_$user$the_time.$tar_ext"; - push @file_list_to_send_by_ftp, - "$save_path/list_incr_user_$user$the_time.txt"; - $results .= -" \nfile: $save_path/backup_incr_user_$user$the_time.$tar_ext\n"; - $results .= cat_( - "$save_path/list_incr_user_$user$the_time.txt"); - } - } - elsif ( grep /^backup\_base\_user\_$user\_/, @dir_content ) - { - my @more_recent = grep /^backup\_base\_user\_$user\_/, - sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - system( -"find $path_name -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_user_$user$the_time.txt" - ); - if ( - !cat_( - "$save_path/list_incr_user_$user$the_time.txt" - ) - ) - { - system( -"rm $save_path/list_incr_user_$user$the_time.txt" - ); - } - else { - system( -"$tar_cmd_user -f $save_path/backup_incr_user_$user$the_time.$tar_ext -T $save_path/list_incr_user_$user$the_time.txt" - ); - push @file_list_to_send_by_ftp, -"$save_path/backup_incr_user_$user$the_time.$tar_ext"; - push @file_list_to_send_by_ftp, - "$save_path/list_incr_user_$user$the_time.txt"; - $results .= -"\nfile: $save_path/backup_incr_user_$user$the_time.$tar_ext\n"; - $results .= cat_( - "$save_path/list_incr_user_$user$the_time.txt"); - } - } - else { - system( -"$tar_cmd_user -f $save_path/backup_base_user_$user$the_time.$tar_ext $path_name" - ); - push @file_list_to_send_by_ftp, - "$save_path/backup_base_user_$user$the_time.$tar_ext"; - $results .= -"\nfile: $save_path/backup_base_user_$user$the_time.$tar_ext\n"; - } - } - else { - system( -"cd $save_path && rm -f backup_user_$_* backup_base_user_$_* backup_incr_user_$_*" - ); - system( -"$tar_cmd_user -f $save_path/backup_user_$_$the_time.$tar_ext $path_name" - ); - push @file_list_to_send_by_ftp, - "$save_path/backup_user_$_$the_time.$tar_ext"; - $results .= -"\nfile: $save_path/backup_user_$user$the_time.$tar_ext\n"; - } - } - } - $interactive and progress( $pbar2, 1, _("Backup Other files...") ); - $interactive - and progress( $pbar3, 0.4, _("Hard Disk Backup files...") ); - } - - if ( ( $where_net_ssh && !$daemon ) || ( $daemon && $ssh_daemon ) ) { - - #ssh_client(); - } - if ( ( $where_net_ftp && !$daemon ) || ( $daemon && $ftp_daemon ) ) { - $results .= _( "file list send by FTP : %s\n ", $_ ) - foreach @file_list_to_send_by_ftp; - $interactive and build_backup_ftp_status(); - if ( ftp_client() ) { - $results .= _( -"\n FTP connexion problem: It was not possible to send your backup files by FTP.\n" - ); - $interactive and client_ftp_pb(); - } - } - if ( ( $where_cd && !$daemon ) || ( $daemon && $cd_daemon ) ) { - build_cd(); - } - if ($send_mail) { - if ( send_mail("$results") ) { - $interactive and send_mail_pb(); - $interactive or print _(" Error during mail sending. \n"); - } - } -} - -my @list_of_rpm_to_install; - -sub require_rpm { - my $all_rpms_found = 1; - my $res; - my @file_cache = cat_("/var/log/rpmpkgs"); - @list_of_rpm_to_install = (); - - # my($pkg) = @_; - foreach my $pkg (@_) { - $res = grep /$pkg/, @file_cache; - - # $res = system("rpm -qa | grep $_"); - if ( $res == 0 ) { - $all_rpms_found = 0; - push @list_of_rpm_to_install, $pkg; - } - } - return ($all_rpms_found); -} - -sub list_remove { - my ( $widget, $list ) = @_; - my @to_remove; - push @to_remove, $list->child_position($_) foreach ( $list->selection ); - splice @list_other, $_, 1 foreach ( reverse sort @to_remove ); - $list->remove_items( $list->selection ); -} - -sub file_ok_sel { - my ( $widget, $file_selection ) = @_; - my $file_name = $file_selection->get_filename(); - if ( !member( $file_name, @list_other ) ) { - push ( @list_other, $file_name ); - $list_other->add( gtkshow( new Gtk::ListItem($file_name) ) ); - } -} - -sub filedialog_where_hd { - my $file_dialog; - - $file_dialog = gtksignal_connect( - new Gtk::FileSelection( _("File Selection") ), - destroy => sub { $file_dialog->destroy(); } - ); - $file_dialog->ok_button->signal_connect( - clicked => sub { - $save_path_entry->set_text( $file_dialog->get_filename() ); - $file_dialog->destroy(); - } - ); - $file_dialog->cancel_button->signal_connect( - clicked => sub { $file_dialog->destroy() } ); - $file_dialog->show(); -} - -sub filedialog_restore_find_path { - my $file_dialog; - - $file_dialog = gtksignal_connect( - new Gtk::FileSelection( _("File Selection") ), - destroy => sub { $file_dialog->destroy(); } - ); - $file_dialog->ok_button->signal_connect( - clicked => sub { - $restore_find_path_entry->set_text( $file_dialog->get_filename() ); - $file_dialog->destroy(); - } - ); - $file_dialog->cancel_button->signal_connect( - clicked => sub { $file_dialog->destroy() } ); - $file_dialog->show(); -} - -sub filedialog { - my $file_dialog; - - $file_dialog = gtksignal_connect( - new Gtk::FileSelection( _("File Selection") ), - destroy => sub { $file_dialog->destroy(); } - ); - $file_dialog->ok_button->signal_connect( - clicked => \&file_ok_sel, - $file_dialog - ); - $file_dialog->ok_button->child->set( _("Add") ); - $file_dialog->cancel_button->signal_connect( - clicked => sub { $file_dialog->destroy() } ); - $file_dialog->cancel_button->child->set( _("Close") ); - $file_dialog->set_filename( - _("Select the files or directories and click on 'Add'") ); - $file_dialog->show(); -} - -################################################ ADVANCED ################################################ - -sub check_list { - foreach (@_) { - my $ref = $_->[1]; - gtksignal_connect( - gtkset_active( $_->[0], ${$ref} ), - toggled => sub { invbool $ref } - ); - } -} - -sub fonction_env { - ( - $central_widget, $current_widget, $previous_widget, - $custom_help, $next_widget - ) - = @_; -} - -# sub redraw_during_check { -# my ($tmp1, $tmp2) = @_; -# gtksignal_connect(gtkset_active($tmp1, $tmp2), toggled => sub { -# # invbool \$tmp2; -# print "tmp2 bef = $tmp2\n"; -# $tmp2 = $tmp2 ? 0 : 1; -# ${$central_widget}->destroy(); -# print "tmp2 after = $tmp2\n"; -# $current_widget->(); -# return ($tmp2); -# }); -# } - -sub advanced_what_sys { - my $box_what_sys; - - gtkpack( - $advanced_box, - $box_what_sys = gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - _("\nPlease check all options that you need.\n"), - 1, - _( -"These options can backup and restore all files in your /etc directory.\n" - ), - 0, - my $check_what_sys = new Gtk::CheckButton( - _("Backup your System files. ( /etc directory )") - ), - 0, - my $check_what_versions = new Gtk::CheckButton( - _("Use incremental backup (do not replace old backups)") - ), - 0, - my $check_what_critical = new Gtk::CheckButton( - _("Do not include critical files (passwd, group, fstab)") - ), - 0, - _( -"With this option you will be able to restore any version\n of your /etc directory." - ), - 1, - new Gtk::VBox( 0, 15 ), - ), - ); - check_list( - [ $check_what_sys, \$backup_sys ], - [ $check_what_critical, \$no_critical_sys ], - [ $check_what_versions, \$backup_sys_versions ] - ); - fonction_env( \$box_what_sys, \&advanced_what_sys, \&advanced_what, - "what" ); - $up_box->show_all(); -} - -sub advanced_what_user { - my ($previous_function) = @_, my $box_what_user; - my %check_what_user; - - all_user_list(); - gtkpack( - $advanced_box, - $box_what_user = gtkpack_( - new Gtk::VBox( 0, 15 ), - 0, - _( -"Please check all users that you want to include in your backup." - ), - 0, - new Gtk::HSeparator, - 1, - createScrolledWindow( - gtkpack__( - new Gtk::VBox( 0, 0 ), - map { - my $name = $_; - my @user_list_tmp; - my $b = new Gtk::CheckButton($name); - if ( grep /^$name$/, @user_list ) { - $check_what_user{$_}[1] = 1; - gtkset_active( $b, 1 ); - } - else { - $check_what_user{$_}[1] = 0; - gtkset_active( $b, 0 ); - } - $b->signal_connect( - toggled => sub { - if ( $check_what_user{$name}[1] ) { - $check_what_user{$name}[1] = 0; - @user_list_tmp = - grep( !/^$name$/, @user_list ); - @user_list = @user_list_tmp; - } - else { - $check_what_user{$name}[1] = 1; - if ( !member( $name, @user_list ) ) { - push @user_list, $name; - } - } - } - ); - $b - } (@all_user_list) - ), - ), - 0, - my $check_what_browser = - new Gtk::CheckButton( _("Do not include the browser cache") ), - 0, - my $check_what_user_versions = new Gtk::CheckButton( - _("Use Incremental Backups (do not replace old backups)") - ), - ), - ); - check_list( - [ $check_what_browser, \$what_no_browser ], - [ $check_what_user_versions, \$backup_user_versions ] - ); - if ($previous_function) { - fonction_env( \$box_what_user, \&advanced_what_user, - \&$previous_function, "what", \&$previous_function ); - } - else { - fonction_env( \$box_what_user, \&advanced_what_user, \&advanced_what, - "what" ); - } - $up_box->show_all(); -} - -sub advanced_what_other { - my $box_what_other; - $list_other = new Gtk::List(); - $list_other->set_selection_mode( -extended ); - $list_other->add( gtkshow( new Gtk::ListItem($_) ) ) foreach (@list_other); - - gtkpack( - $advanced_box, - $box_what_other = gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - gtkpack_( - new Gtk::HBox( 0, 4 ), - 1, createScrolledWindow($list_other), - ), - 0, - gtkadd( - gtkset_layout( new Gtk::HButtonBox, -spread ), - gtksignal_connect( - new Gtk::Button( _("Add") ), - clicked => sub { filedialog() } - ), - gtksignal_connect( - new Gtk::Button( _("Remove Selected") ), - clicked => \&list_remove, - $list_other - ), - ), - 0, - gtkset_sensitive( - my $check_what_other_versions = new Gtk::CheckButton( - _("Use Incremental Backups (do not replace old backups)") - ), - 0 - ), - ), - ); - check_list( [ $check_what_other_versions, \$backup_other_versions ] ); - fonction_env( \$box_what_other, \&advanced_what_other, \&advanced_what, - "what" ); - $up_box->show_all(); -} - -sub advanced_what_entire_sys { - my $box_what; - - my ( $pix_user_map, $pix_user_mask ) = gtkcreate_png("user"); - my ( $pix_other_map, $pix_other_mask ) = gtkcreate_png("net_u"); - my ( $pix_sys_map, $pix_sys_mask ) = gtkcreate_png("bootloader"); - - gtkpack( - $advanced_box, - $box_what = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtksignal_connect( - my $button_what_other = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - message_underdevel(); - } - ), - 1, - gtksignal_connect( - my $button_what_all = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - message_underdevel(); - } - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - $button_what_other->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_sys_map, $pix_sys_mask ), - new Gtk::Label( _("Linux") ), - new Gtk::HBox( 0, 5 ) - ) - ); - $button_what_all->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_user_map, $pix_user_mask ), - new Gtk::Label( _("Windows (FAT32)") ), - new Gtk::HBox( 0, 5 ) - ) - ); - fonction_env( \$box_what, \&advanced_what_entire_sys, \&advanced_what, "" ); - $up_box->show_all(); -} - -sub advanced_what { - my $box_what; - my ( $pix_user_map, $pix_user_mask ) = gtkcreate_png("ic82-users-40"); - my ( $pix_other_map, $pix_other_mask ) = gtkcreate_png("ic82-others-40"); - my ( $pix_sys_map, $pix_sys_mask ) = gtkcreate_png("ic82-system-40"); - my ( $pix_sysp_map, $pix_sysp_mask ) = gtkcreate_png("ic82-systemeplus-40"); - - gtkpack( - $advanced_box, - $box_what = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtksignal_connect( - my $button_what_sys = new Gtk::Button(), - clicked => - sub { $box_what->destroy(); advanced_what_sys(); } - ), - 1, - gtksignal_connect( - my $button_what_user = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - advanced_what_user(); - } - ), - 1, - gtksignal_connect( - my $button_what_other = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - advanced_what_other(); - } - ), - - # 1, gtksignal_connect(my $button_what_all = new Gtk::Button(), - # clicked => sub { ${$central_widget}->destroy(); advanced_what_entire_sys(); }), - 1, - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - $button_what_sys->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_sys_map, $pix_sys_mask ), - new Gtk::Label( _("System") ), - new Gtk::HBox( 0, 5 ) - ) - ); - $button_what_user->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_user_map, $pix_user_mask ), - new Gtk::Label( _("Users") ), - new Gtk::HBox( 0, 5 ) - ) - ); - $button_what_other->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_other_map, $pix_other_mask ), - new Gtk::Label( _("Other") ), - new Gtk::HBox( 0, 5 ) - ) - ); - - # $button_what_all->add(gtkpack(new Gtk::HBox(0,10), - # new Gtk::Pixmap($pix_sysp_map, $pix_sysp_mask), - # new Gtk::Label(_("An Entire System")), - # new Gtk::HBox(0, 5) - # )); - - fonction_env( \$box_what, \&advanced_what, \&advanced_box, "" ); - $up_box->show_all(); -} - -sub advanced_where_net_ftp { - my ($previous_function) = @_, my $box_where_net; - - gtkpack( - $advanced_box, - $box_where_net = gtkpack_( - new Gtk::VBox( 0, 15 ), - 0, - new Gtk::HSeparator, - 0, - my $check_where_net_ftp = - new Gtk::CheckButton( _("Use FTP connection to backup") ), - 0, - new Gtk::HSeparator, - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( _("Please enter the host name or IP.") ), - $where_net_ftp - ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - my $host_name_entry = new Gtk::Entry(), - $where_net_ftp - ), - ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please enter the directory to\n put the backup on this host." - ) - ), - $where_net_ftp - ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - my $host_path_entry = new Gtk::Entry(), - $where_net_ftp - ), - ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( _("Please enter your login") ), - $where_net_ftp - ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - my $login_user_entry = new Gtk::Entry(), - $where_net_ftp - ), - ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( _("Please enter your password") ), - $where_net_ftp - ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - my $passwd_user_entry = new Gtk::Entry(), - $where_net_ftp - ), - ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - my $check_remember_pass = - new Gtk::CheckButton( _("Remember this password") ), - $where_net_ftp - ), - ), - ), - ); - $passwd_user_entry->set_visibility(0); - $passwd_user_entry->set_text($passwd_user); - $passwd_user_entry->signal_connect( 'changed', - sub { $passwd_user = $passwd_user_entry->get_text() } ); - $host_path_entry->set_text($host_path); - $host_name_entry->set_text($host_name); - $login_user_entry->set_text($login_user); - $host_name_entry->signal_connect( 'changed', - sub { $host_name = $host_name_entry->get_text() } ); - $host_path_entry->signal_connect( 'changed', - sub { $host_path = $host_path_entry->get_text() } ); - $login_user_entry->signal_connect( 'changed', - sub { $login_user = $login_user_entry->get_text() } ); - check_list( [ $check_remember_pass, \$remember_pass ] ); - gtksignal_connect( - gtkset_active( $check_where_net_ftp, $where_net_ftp ), - toggled => sub { - invbool \$where_net_ftp; - ${$central_widget}->destroy(); - $current_widget->(); - } - ); - if ($previous_function) { - fonction_env( \$box_where_net, \&advanced_where_net_ftp, - \&$previous_function, "ftp" ); - } - else { - fonction_env( \$box_where_net, \&advanced_where_net_ftp, - \&advanced_where, "ftp" ); - } - $up_box->show_all(); -} - -sub advanced_where_net_ssh { - my ($previous_function) = @_, my $box_where_ssh; - - gtkpack( - $advanced_box, - $box_where_ssh = gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - gtkpack( - new Gtk::HBox( 0, 15 ), - new Gtk::VBox( 0, 15 ), - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtksignal_connect( - new Gtk::Button("rsync"), - clicked => sub { - ${$central_widget}->destroy(); - message_underdevel(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button("WebDav"), - clicked => sub { - ${$central_widget}->destroy(); - message_underdevel(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button("scp"), - clicked => sub { - ${$central_widget}->destroy(); - message_underdevel(); - } - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - new Gtk::VBox( 0, 15 ), - ), - ), - ); - - # test si x11 - #print system("xterm -fn 7x14 -bg black -fg white -e ssh-keygen -f ~/.ssh/identity-backup && scp") . "\n"; - - if ($previous_function) { - fonction_env( \$box_where_ssh, \&advanced_where_net_ssh, - \&$previous_function, "ssh" ); - } - else { - fonction_env( \$box_where_ssh, \&advanced_where_net_ssh, - \&advanced_where, "ssh" ); - } - $up_box->show_all(); -} - -sub advanced_where_net { - my ($previous_function) = @_, my $box_where_net; - - gtkpack( - $advanced_box, - $box_where_net = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - new Gtk::VBox( 0, 10 ), - 1, - gtksignal_connect( - new Gtk::Button( _("FTP Connection") ), - clicked => sub { - $box_where_net->destroy(); - if ($previous_function) { - advanced_where_net_ftp( \&$previous_function ); - } - else { - advanced_where_net_ftp(); - } - } - ), - if_( - 0, - 1, - gtksignal_connect( - new Gtk::Button( _("Secure Connection") ), - clicked => sub { - $box_where_net->destroy(); - if ($previous_function) { - advanced_where_net_ssh( \&$previous_function ); - } - else { - advanced_where_net_ssh(); - } - } - ) - ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - new Gtk::VBox( 0, 10 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - if ($previous_function) { - fonction_env( \$box_where_net, \&advanced_where_net, - \&$previous_function, "remote" ); - } - else { - fonction_env( - \$box_where_net, \&advanced_where_net, - \&advanced_where, "remote" - ); - } - $up_box->show_all(); -} - -sub advanced_where_cd { - my ($previous_function) = @_, my $box_where_cd; - my $combo_where_cd_time = new Gtk::Combo(); - $combo_where_cd_time->set_popdown_strings( "650", "700", "750", "800" ); - - gtkpack( - $advanced_box, - $box_where_cd = gtkpack_( - new Gtk::VBox( 0, 6 ), - 0, - my $check_where_cd = - new Gtk::CheckButton( _("Use CD/DVDROM to backup") ), - 0, - new Gtk::HSeparator, - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( _("Please choose your CD space") ), - $where_cd - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_sensitive( - gtkset_usize( $combo_where_cd_time, 200, 20 ), $where_cd - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _("Please check if you are using CDRW media") - ), - $where_cd - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_sensitive( - my $check_cdrw = new Gtk::CheckButton(), $where_cd - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _("Please check if you want to erase your CDRW before") - ), - $cdrw && $where_cd - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_sensitive( - my $check_cdrw_erase = new Gtk::CheckButton(), - $cdrw && $where_cd - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please check if you want to include\n install boot on your CD." - ) - ), - $where_cd - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_sensitive( - my $check_cd_with_install_boot = new Gtk::CheckButton(), - $where_cd - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please enter your CD Writer device name\n ex: 0,1,0" - ) - ), - $where_cd - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_usize( - gtkset_sensitive( - $cd_devive_entry = new Gtk::Entry(), $where_cd - ), - 200, 20 - ), - ), - ), - ); - - foreach ( [ $check_cdrw_erase, \$cdrw_erase ], - [ $check_cd_with_install_boot, \$cd_with_install_boot ] ) - { - my $ref = $_->[1]; - gtksignal_connect( gtkset_active( $_->[0], ${$ref} ), - toggled => sub { ${$ref} = ${$ref} ? 0 : 1; } ); - } - gtksignal_connect( - gtkset_active( $check_where_cd, $where_cd ), - toggled => sub { - $where_cd = $where_cd ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - } - ); - gtksignal_connect( - gtkset_active( $check_cdrw, $cdrw ), - toggled => sub { - $cdrw = $cdrw ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - } - ); - $cd_devive_entry->set_text($cd_devive); - $cd_devive_entry->signal_connect( 'changed', - sub { $cd_devive = $cd_devive_entry->get_text(); } ); - $combo_where_cd_time->entry->set_text($cd_time); - $combo_where_cd_time->entry->signal_connect( 'changed', - sub { $cd_time = $combo_where_cd_time->entry->get_text() } ); - - if ($previous_function) { - fonction_env( \$box_where_cd, \&advanced_where_cd, \&$previous_function, - "" ); - } - else { - fonction_env( \$box_where_cd, \&advanced_where_cd, \&advanced_where, - "" ); - } - $up_box->show_all(); -} - -sub advanced_where_tape { - my ($previous_function) = @_, my $box_where_tape; - my $button; - my $adj = new Gtk::Adjustment 550.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - my ( $pix_fs_map, $pix_fs_mask ) = gtkcreate_png("filedialog"); - - gtkpack( - $advanced_box, - $box_where_tape = gtkpack_( - new Gtk::VBox( 0, 6 ), - 0, - new Gtk::HSeparator, - 0, - my $check_where_tape = - new Gtk::CheckButton( _("Use tape to backup") ), - 0, - new Gtk::HSeparator, - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _("Please enter the device name to use for backup") - ), - $where_tape - ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_usize( - gtkset_sensitive( - my $save_device_tape_entry = new Gtk::Entry(), - $where_tape - ), - 200, 20 - ), - ), - 0, - new Gtk::VBox( 0, 6 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please enter the maximum size\n allowed for Drakbackup" - ) - ), - $where_tape - ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_usize( - gtkset_sensitive( - my $spinner = new Gtk::SpinButton( $adj, 0, 0 ), - $where_tape - ), - 200, 20 - ), - ), - 0, - gtkpack_( new Gtk::HBox( 0, 10 ), ), - ), - ); - gtksignal_connect( - gtkset_active( $check_where_tape, $where_tape ), - toggled => sub { - $where_tape = $where_tape ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - } - ); - $save_device_tape_entry->set_text($save_device_tape); - $save_device_tape_entry->signal_connect( 'changed', - sub { $save_device_tape = $save_device_tape_entry->get_text() } ); - if ($previous_function) { - fonction_env( \$box_where_tape, \&advanced_where_tape, - \&$previous_function, "" ); - } - else { - fonction_env( \$box_where_tape, \&advanced_where_tape, \&advanced_where, - "" ); - } - $up_box->show_all(); -} - -sub advanced_where_hd { - my ($previous_function) = @_, my $box_where_hd; - my $button; - my $adj = new Gtk::Adjustment 550.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - my ( $pix_fs_map, $pix_fs_mask ) = gtkcreate_png("ic82-dossier-32"); - - gtkpack( - $advanced_box, - $box_where_hd = gtkpack_( - new Gtk::VBox( 0, 6 ), - 0, new Gtk::HSeparator, - - # 0, my $check_where_hd = new Gtk::CheckButton( _("Use Hard Disk to backup") ), - # 0, new Gtk::HSeparator, - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( _("Please enter the directory to save:") ), - $where_hd - ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_usize( - gtkset_sensitive( - $save_path_entry = new Gtk::Entry(), $where_hd - ), - 152, 20 - ), - 0, - gtkset_sensitive( - $button = gtksignal_connect( - new Gtk::Button(), - clicked => sub { - filedialog_where_hd(); - } - ), - $where_hd - ), - ), - 0, - new Gtk::VBox( 0, 6 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please enter the maximum size\n allowed for Drakbackup" - ) - ), - $where_hd - ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_usize( - gtkset_sensitive( - my $spinner = new Gtk::SpinButton( $adj, 0, 0 ), - $where_hd - ), - 200, - 20 - ), - ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_sensitive( - my $check_where_hd_quota = - new Gtk::CheckButton( _("Use quota for backup files.") ), - $where_hd - ), - 0, - new Gtk::VBox( 0, 6 ), - ), - ), - ); - foreach ( [ $check_where_hd_quota, \$hd_quota ] ) { - my $ref = $_->[1]; - gtksignal_connect( gtkset_active( $_->[0], ${$ref} ), - toggled => sub { ${$ref} = ${$ref} ? 0 : 1; } ); - } - - # gtksignal_connect(gtkset_active($check_where_hd, $where_hd), toggled => sub { - # $where_hd = $where_hd ? 0 : 1; - # $where_hd = 1; - # ${$central_widget}->destroy(); - # $current_widget->(); - # }); - $button->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_fs_map, $pix_fs_mask ) - ) - ); - $save_path_entry->set_text($save_path); - $save_path_entry->signal_connect( 'changed', - sub { $save_path = $save_path_entry->get_text() } ); - if ($previous_function) { - fonction_env( \$box_where_hd, \&advanced_where_hd, \&$previous_function, - "" ); - } - else { - fonction_env( \$box_where_hd, \&advanced_where_hd, \&advanced_where, - "" ); - } - $up_box->show_all(); -} - -sub advanced_where { - my $box_where; - my ( $pix_net_map, $pix_net_mask ) = gtkcreate_png("ic82-network-40"); - my ( $pix_cd_map, $pix_cd_mask ) = gtkcreate_png("ic82-CD-40"); - my ( $pix_hd_map, $pix_hd_mask ) = gtkcreate_png("ic82-discdurwhat-40"); - my ( $pix_tape_map, $pix_tape_mask ) = gtkcreate_png("ic82-tape-40"); - - gtkpack( - $advanced_box, - $box_where = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtksignal_connect( - my $button_where_net = new Gtk::Button(), - clicked => sub { - - # $box_where->destroy(); advanced_where_net(); }), - $box_where->destroy(); - advanced_where_net_ftp(); - } - ), - - # 1, gtksignal_connect(my $button_where_cd = new Gtk::Button(), clicked => sub { - # ${$central_widget}->destroy(); - # if (require_rpm("mkisofs", "cdrecord", "toto")) { advanced_where_cd(); } - # else { - # print "have to install @list_of_rpm_to_install...\n"; - # ${$central_widget}->destroy(); - # install_rpm(\&advanced_where); - # } - # }), - 1, - gtksignal_connect( - my $button_where_hd = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - advanced_where_hd(); - } - ), - - # 1, gtksignal_connect(my $button_where_tape = new Gtk::Button(), clicked => sub { - # ${$central_widget}->destroy(); message_underdevel();}), #advanced_where_tape(); }), - 1, - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - $button_where_net->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_net_map, $pix_net_mask ), - new Gtk::Label( _("Network") ), - new Gtk::HBox( 0, 5 ) - ) - ); - - # $button_where_cd->add(gtkpack(new Gtk::HBox(0,10), - # new Gtk::Pixmap($pix_cd_map, $pix_cd_mask), - # new Gtk::Label(_("CDROM / DVDROM")), - # new Gtk::HBox(0, 5) - # )); - $button_where_hd->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_hd_map, $pix_hd_mask ), - new Gtk::Label( _("HardDrive / NFS") ), - new Gtk::HBox( 0, 5 ) - ) - ); - - # $button_where_tape->add(gtkpack(new Gtk::HBox(0,10), - # new Gtk::Pixmap($pix_tape_map, $pix_tape_mask), - # new Gtk::Label(_("Tape")), - # new Gtk::HBox(0, 5) - # )); - fonction_env( \$box_where, \&advanced_where, \&advanced_box, "" ); - $up_box->show_all(); -} - -sub advanced_when { - my $box_when; - my $check_where_cd_daemon; - my $check_where_hd_daemon; - my $check_where_ssh_daemon; - my $check_where_ftp_daemon; - my ( $pix_time_map, $pix_time_mask ) = gtkcreate_png("ic82-when-40"); - my $combo_when_space = new Gtk::Combo(); - my %trans = ( - _("hourly") => 'hourly', - _("daily") => 'daily', - _("weekly") => 'weekly', - _("monthly") => 'monthly' - ); - my %trans2 = ( - 'hourly' => _("hourly"), - 'daily' => _("daily"), - 'weekly' => _("weekly"), - 'monthly' => _("monthly") - ); - $combo_when_space->set_popdown_strings( _("hourly"), _("daily"), - _("weekly"), _("monthly") ); - - gtkpack( - $advanced_box, - $box_when = gtkpack_( - new Gtk::VBox( 0, 15 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 1, - new Gtk::HBox( 0, 10 ), - 1, - new Gtk::Pixmap( $pix_time_map, $pix_time_mask ), - 0, - my $check_when_daemon = new Gtk::CheckButton( _("Use daemon") ), - 1, - new Gtk::HBox( 0, 10 ), - ), - 0, - new Gtk::HSeparator, - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please choose the time \ninterval between each backup" - ) - ), - $backup_daemon - ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( $combo_when_space, $backup_daemon ), - ), - 0, - new Gtk::HBox( 0, 10 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( _("Please choose the\nmedia for backup.") ), - $backup_daemon - ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - gtkpack_( - new Gtk::VBox( 0, 10 ), - - # 0, gtkset_sensitive($check_where_cd_daemon = new Gtk::CheckButton(_("Use CD/DVDROM with daemon")), $backup_daemon), - 0, - gtkset_sensitive( - $check_where_hd_daemon = - new Gtk::CheckButton( - _("Use Hard Drive with daemon") ), - $backup_daemon - ), - - # 0, gtkset_sensitive($check_where_ssh_daemon = new Gtk::CheckButton( _("Use SSH with daemon")), $backup_daemon), - 0, - gtkset_sensitive( - $check_where_ftp_daemon = - new Gtk::CheckButton( _("Use FTP with daemon") ), - $backup_daemon - ), - ), - ), - 0, - new Gtk::HSeparator, - 1, - gtkset_sensitive( - new Gtk::Label( - _( -"Please be sure that the cron daemon is included in your services." - ) - ), - $backup_daemon - ), - ), - ); - - check_list( - [ $check_where_hd_daemon, \$hd_daemon ], - [ $check_where_ftp_daemon, \$ftp_daemon ] - ); - - # check_list([$check_where_hd_daemon, \$hd_daemon], [$check_where_ftp_daemon, \$ftp_daemon], - # [$check_where_cd_daemon, \$cd_daemon],[$check_where_ssh_daemon, \$ssh_daemon] ); - gtksignal_connect( - gtkset_active( $check_when_daemon, $backup_daemon ), - toggled => sub { - $backup_daemon = $backup_daemon ? 0 : 1; - ${$central_widget}->destroy(); - advanced_when(); - } - ); - $combo_when_space->entry->set_text( $trans2{$when_space} ); - $combo_when_space->entry->signal_connect( 'changed', - sub { $when_space = $trans{ $combo_when_space->entry->get_text() }; } ); - fonction_env( \$box_when, \&advanced_when, \&advanced_box, "" ); - $up_box->show_all(); -} - -sub advanced_options { - my $box_options; - my ( $pix_options_map, $pix_options_mask ) = - gtkcreate_png("ic82-moreoption-40"); - - gtkpack( - $advanced_box, - $box_options = gtkpack_( - new Gtk::VBox( 0, 15 ), - - # 0, gtkpack_(new Gtk::HBox(0,10), - # 1, new Gtk::VBox(0,10), - # 1, new Gtk::Pixmap($pix_options_map, $pix_options_mask), - # 1, _("Please choose correct options to backup."), - # 1, new Gtk::VBox(0,10), - # ), - # 0, new Gtk::HSeparator, - # 0, gtkpack_(new Gtk::VBox(0,10), - # 0, gtkset_sensitive(my $check_tar_bz2 = new Gtk::CheckButton( _("Use Tar and bzip2 (very slow) [Please be careful if you\n (un)select this option, as all your old backups will be deleted.]") ), 0), - # 0, gtkset_sensitive(my $check_backupignore = new Gtk::CheckButton( _("Use .backupignore files")), 0), - 0, - new Gtk::VBox( 0, 10 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - my $check_mail = new Gtk::CheckButton( - _("Send mail report after each backup to :") - ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - my $mail_entry = new Gtk::Entry(), - ), - - # ), - ), - ); - check_list( [ $check_mail, \$send_mail ] ); - - # check_list([$check_mail, \$send_mail], [$check_tar_bz2, \$comp_mode], [$check_backupignore, \$backupignore]); - $mail_entry->set_text($user_mail); - $mail_entry->signal_connect( 'changed', - sub { $user_mail = $mail_entry->get_text() } ); - fonction_env( \$box_options, \&advanced_options, \&advanced_box, - "options" ); - $up_box->show_all(); -} - -sub advanced_box { - my $box_adv; - my ( $pix_hd_map, $pix_hd_mask ) = gtkcreate_png("ic82-discdurwhat-40"); - my ( $pix_time_map, $pix_time_mask ) = gtkcreate_png("ic82-when-40"); - my ( $pix_net_map, $pix_net_mask ) = gtkcreate_png("ic82-where-40"); - my ( $pix_options_map, $pix_options_mask ) = - gtkcreate_png("ic82-moreoption-40"); - - gtkpack( - $advanced_box, - $box_adv = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtksignal_connect( - my $button_what = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - advanced_what(); - } - ), - 1, - gtksignal_connect( - my $button_where = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - advanced_where(); - } - ), - 1, - gtksignal_connect( - my $button_when = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - advanced_when(); - } - ), - 1, - gtksignal_connect( - my $button_options = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - advanced_options(); - } - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - $button_what->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_hd_map, $pix_hd_mask ), - new Gtk::Label( _("What") ), - new Gtk::HBox( 0, 5 ) - ) - ); - $button_where->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_net_map, $pix_net_mask ), - new Gtk::Label( _("Where") ), - new Gtk::HBox( 0, 5 ) - ) - ); - $button_when->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_time_map, $pix_time_mask ), - new Gtk::Label( _("When") ), - new Gtk::HBox( 0, 5 ) - ) - ); - $button_options->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_options_map, $pix_options_mask ), - new Gtk::Label( _("More Options") ), - new Gtk::HBox( 0, 5 ) - ) - ); - fonction_env( \$box_adv, \&advanced_box, \&interactive_mode_box, "" ); - $up_box->show_all(); -} - -################################################ WIZARD ################################################ - -sub wizard_step3 { - my $box2; - my $text = new Gtk::Text( undef, undef ); - system_state(); - gtktext_insert( $text, $system_state ); - button_box_restore_main(); - - gtkpack( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 10 ), 0, - _("Drakbackup Configuration"), 1, - createScrolledWindow($text), - ), - ), - ); - fonction_env( \$box2, \&wizard_step3, \&wizard_step2, "" ); - button_box_wizard_end(); - $up_box->show_all(); -} - -sub wizard_step2 { - my $box2; - - gtkpack( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - _("Please choose where you want to backup"), - 0, - gtkpack_( - new Gtk::HBox( 0, 15 ), - 0, - my $check_wizard_hd = - new Gtk::CheckButton( _("on Hard Drive") ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_sensitive( - gtksignal_connect( - new Gtk::Button( _("Configure") ), - clicked => sub { - ${$central_widget}->destroy(); - to_ok(); - advanced_where_hd( \&wizard_step2 ); - to_normal(); - } - ), - $where_hd - ), - ), - 0, - gtkpack_( - new Gtk::HBox( 0, 15 ), - 0, - my $check_wizard_net = - new Gtk::CheckButton( _("across Network") ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_sensitive( - gtksignal_connect( - new Gtk::Button( _("Configure") ), - clicked => sub { - ${$central_widget}->destroy(); - to_ok(); - advanced_where_net( \&wizard_step2 ); - to_normal(); - } - ), - $where_net - ), - ), - - # 0, gtkpack_(new Gtk::HBox(0, 15), - # 0, my $check_wizard_cd = new Gtk::CheckButton(_("on CDROM")), - # 1, new Gtk::VBox(0, 5), - # 0, gtkset_sensitive(gtksignal_connect(new Gtk::Button(_("Configure")), - # clicked => sub { - # ${$central_widget}->destroy(); - # advanced_where_cd(\&wizard_step2); - # }), $where_cd ), - # ), - # 0, gtkpack_(new Gtk::HBox(0, 15), - # 0, my $check_wizard_tape = new Gtk::CheckButton(_("on Tape Device")), - # 1, new Gtk::VBox(0, 5), - # 0, gtkset_sensitive(gtksignal_connect(new Gtk::Button(_("Configure")), - # clicked => sub { - # ${$central_widget}->destroy(); - # advanced_where_tape(\&wizard_step2); - # }), $where_tape), - # ), - 1, - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - $where_net = $where_net_ssh || $where_net_ftp; - foreach ( - [ $check_wizard_hd, \$where_hd ], - - # [$check_wizard_cd, \$where_cd], - # [$check_wizard_tape, \$where_tape], - [ $check_wizard_net, \$where_net ] - ) - { - my $ref = $_->[1]; - gtksignal_connect( - gtkset_active( $_->[0], ${$ref} ), - toggled => sub { - ${$ref} = ${$ref} ? 0 : 1; - $where_hd = 1; - if ( !$where_hd && !$where_cd && !$where_net ) { - $next_widget = \&message_noselect_box; - } - else { $next_widget = \&wizard_step3; } - if ( !$where_net ) { $where_net_ssh = 0; $where_net_ftp = 0; } - else { $where_net_ftp = 1; } - ${$central_widget}->destroy(); - wizard_step2(); - } - ); - } - if ( !$where_hd && !$where_cd && !$where_net ) { - fonction_env( \$box2, \&wizard_step2, \&wizard, "", - \&message_noselect_box ); - } - else { - fonction_env( \$box2, \&wizard_step2, \&wizard, "", \&wizard_step3 ); - } - button_box_wizard(); - $up_box->show_all(); -} - -sub wizard { - my $box2; - - gtkpack( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - _("Please choose what you want to backup"), - 0, - my $check_wizard_sys = - new Gtk::CheckButton( _("Backup system") ), - 0, - my $check_wizard_user = - new Gtk::CheckButton( _("Backup Users") ), - 0, - gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtksignal_connect( - new Gtk::Button( _("Select user manually") ), - clicked => sub { - ${$central_widget}->destroy(); - advanced_what_user( \&wizard ); - } - ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - foreach ( - [ $check_wizard_sys, \$backup_sys ], - [ $check_wizard_user, \$backup_user ] - ) - { - my $ref = $_->[1]; - gtksignal_connect( - gtkset_active( $_->[0], ${$ref} ), - toggled => sub { - ${$ref} = ${$ref} ? 0 : 1; - if ( $backup_sys || $backup_user && @user_list ) { - $next_widget = \&wizard_step2; - } - else { $next_widget = \&message_noselect_what_box; } - } - ); - } - if ( $backup_sys || $backup_user && @user_list ) { - fonction_env( \$box2, \&wizard, \&interactive_mode_box, "", - \&wizard_step2 ); - } - else { - fonction_env( \$box2, \&wizard, \&interactive_mode_box, "", - \&message_noselect_what_box ); - } - button_box_wizard(); - $up_box->show_all(); -} - -################################################ RESTORE ################################################ - -sub find_backup_to_restore { - - # fixme: - # faire test existance cd - # faire reponse si non existance de $path_to_find_restore - my @list_backup = (); - my @list_backup_tmp2 = (); - my $to_put; - @sys_backuped = (); - my @list_backup_tmp; - my @user_backuped_tmp; - - @user_backuped = (); - -d $path_to_find_restore and @list_backup_tmp2 = all($path_to_find_restore); - foreach (@list_backup_tmp2) { - s/\_base//gi; - s/\_incr//gi; - push @list_backup, $_; - } - if ( grep /^backup_other/, @list_backup ) { $other_backuped = 1; } - if ( grep /^backup_sys/, @list_backup ) { $sys_backuped = 1; } - foreach ( grep /^backup_sys_/, @list_backup ) { - chomp; - s/^backup_sys_//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my ( $date, $heure ) = /^(.*)_([^_]*)$/; - my $year = substr( $date, 0, 4 ); - my $month = substr( $date, 4, 2 ); - my $day = substr( $date, 6, 2 ); - my $hour = substr( $heure, 0, 2 ); - my $min = substr( $heure, 2, 2 ); - $to_put = "$day/$month/$year $hour:$min $_"; - push @sys_backuped, $to_put; - } - $restore_step_sys_date = $to_put; - foreach ( grep /^backup_user_/, @list_backup ) { - chomp; - s/^backup_user_//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my ( $nom, $date, $heure ) = /^(.*)_([^_]*)_([^_]*)$/; - my $year = substr( $date, 0, 4 ); - my $month = substr( $date, 4, 2 ); - my $day = substr( $date, 6, 2 ); - my $hour = substr( $heure, 0, 2 ); - my $min = substr( $heure, 2, 2 ); - - # my $to_put = " $nom, (date: $date, hour: $heure)"; - $to_put = - "$_ user: $nom, date: $day/$month/$year, hour: $hour:$min"; - push @user_backuped, $to_put; - grep ( /^$nom$/, @user_list_backuped ) - or push @user_list_backuped, $nom; - } -} - -sub system_state { - $system_state = (); - - if ($cfg_file_exist) { - $system_state .= _("\nBackup Sources: \n"); - $backup_sys and $system_state .= _("\n- System Files:\n"); - $backup_sys and $system_state .= "\t\t$_\n" foreach @sys_files; - $backup_user and $system_state .= _("\n- User Files:\n"); - $backup_user and $system_state .= "\t\t$_\n" foreach @user_list; - @list_other and $system_state .= _("\n- Other Files:\n"); - @list_other and $system_state .= "\t\t$_\n" foreach @list_other; - $where_hd - and $system_state .= - _( "\n- Save on Hard drive on path : %s\n", $save_path ); - $where_net_ftp - and $system_state .= - _( "\n- Save on FTP on host : %s\n", $host_name ); - $where_net_ftp - and $system_state .= _( "\t\t user name: %s\n\t\t on path: %s \n", - $login_user, $host_path ); - $system_state .= _("\n- Options:\n"); - $backup_sys or $system_state .= _("\tDo not include System Files\n"); - if ($comp_mode) { $system_state .= _("\tBackups use tar and bzip2\n"); } - else { $system_state .= _("\tBackups use tar and gzip\n"); } - $system_state .= _( "\n- Daemon (%s) include :\n", $when_space ); - $hd_daemon and $system_state .= _("\t-Hard drive.\n"); - $cd_daemon and $system_state .= _("\t-CDROM.\n"); - $ftp_daemon and $system_state .= _("\t-Network by FTP.\n"); - $ssh_daemon and $system_state .= _("\t-Network by SSH.\n"); - } - else { - $system_state = - _("No configuration, please click Wizard or Advanced.\n"); - } -} - -sub restore_state { - my @tmp = split ( ' ', $restore_step_sys_date ); - $restore_state = _("List of data to restore:\n\n"); - if ($restore_sys) { - $restore_state .= "- Restore System Files.\n"; - $restore_state .= " - from date: $tmp[0] $tmp[1]\n"; - } - if ($restore_user) { - $restore_state .= "- Restore User Files: \n"; - $restore_state .= "\t\t$_\n" foreach @user_list_to_restore2; - push @user_list_to_restore, - ( split ( ',', $_ ) )[0] foreach @user_list_to_restore2; - } - if ($restore_other) { - $restore_state .= "- Restore Other Files: \n"; - -f "$path_to_find_restore/list_other" - and $restore_state .= "\t\t$_\n" foreach - split ( "\n", cat_("$path_to_find_restore/list_other") ); - } - if ($restore_other_path) { - $restore_state .= "- Path to Restore: $restore_path \n"; - } -} - -sub select_most_recent_selected_of { - my ($user_name) = @_; - my @list_tmp2; - my @tmp = sort @user_list_to_restore2; - foreach ( grep /$user_name\_/, sort @tmp ) { push @list_tmp2, $_; } - return pop @list_tmp2; -} - -sub select_user_data_to_restore { - my $var_eq = 1; - my @list_backup = (); - my @list_tmp = (); - my @list_tmp2 = (); - @user_list_to_restore = (); - - -d $path_to_find_restore - and my @list_backup_tmp2 = grep /^backup/, all($path_to_find_restore); - @list_tmp2 = @list_backup_tmp2; - foreach (@list_backup_tmp2) { - s/\_base//gi; - s/\_incr//gi; - push @list_backup, $_; - } - foreach my $var_tmp (@user_list_backuped) { - $var_eq = 1; - my $more_recent = - ( split ( ' ', select_most_recent_selected_of($var_tmp) ) )[0]; - foreach ( grep /^backup\_user\_$var_tmp\_/, sort @list_backup ) { - s/.tar.gz//gi; - s/.tar.bz2//gi; - if ($more_recent) { - if ( $_ =~ /$more_recent/ ) { - push @list_tmp, $_; - $var_eq = 0; - } - else { $var_eq and push @list_tmp, $_; } - } - } - } - foreach my $var_to_restore (@list_tmp) { - $var_to_restore =~ s/backup_//gi; - foreach my $var_exist ( sort @list_tmp2 ) { - if ( $var_exist =~ /$var_to_restore/ ) { - push @user_list_to_restore, $var_exist; - } - } - } - $DEBUG - and print "(incremental restore) real user list to restore : $_ \n" - foreach (@user_list_to_restore); -} - -sub select_sys_data_to_restore { - my $var_eq = 1; - my @list_tmp = (); - @sys_list_to_restore = (); - - -d $path_to_find_restore - and @list_tmp = grep /^backup/, all($path_to_find_restore); - my @more_recent = split ( ' ', $restore_step_sys_date ); - my $more_recent = pop @more_recent; - foreach my $var_exist ( grep /\_sys\_/, sort @list_tmp ) { - if ( $var_exist =~ /$more_recent/ ) { - push @sys_list_to_restore, $var_exist; - $var_eq = 0; - } - else { $var_eq and push @sys_list_to_restore, $var_exist; } - } - $DEBUG - and print "sys list to restore: $_\n " foreach (@sys_list_to_restore); -} - -sub valid_backup_test { - my (@files_list) = @_; - @files_corrupted = (); - my $is_corrupted = 0; - foreach (@files_list) { - if ( system("gzip -l $path_to_find_restore/$_") > 1 ) { - push @files_corrupted, $_; - $is_corrupted = -1; - } - } - return $is_corrupted; -} - -sub restore_aff_backup_problems { - my $do_restore; - my $button_restore; - my $text = new Gtk::Text( undef, undef ); - my ( $pix_warn_map, $pix_warn_mask ) = gtkcreate_png('warning'); - my $restore_pbs_state = _("List of data corrupted:\n\n"); - $restore_pbs_state .= "\t\t$_\n" foreach @files_corrupted; - $restore_pbs_state .= _("Please uncheck or remove it on next time."); - gtktext_insert( $text, $restore_pbs_state ); - button_box_restore_main(); - - gtkpack( - $advanced_box, - $do_restore = gtkpack_( - new Gtk::VBox( 0, 10 ), - 0, - new Gtk::VBox( 0, 10 ), - 1, - gtkpack_( - new Gtk::HBox( 0, 15 ), 1, - new Gtk::VBox( 0, 5 ), 0, - new Gtk::Pixmap( $pix_warn_map, $pix_warn_mask ), 0, - _("Backup files are corrupted"), 1, - new Gtk::VBox( 0, 5 ), - ), - 0, - new Gtk::VBox( 0, 10 ), - 1, - createScrolledWindow($text), - ), - ); - button_box_restore_pbs_end(); - fonction_env( \$do_restore, \&restore_aff_backup_problems, - "", "restore_pbs" ); - $up_box->show_all(); -} - -sub restore_aff_result { - my $do_restore; - my $text = new Gtk::Text( undef, undef ); - gtktext_insert( $text, $restore_state ); - button_box_restore_main(); - - gtkpack( - $advanced_box, - $do_restore = gtkpack_( - new Gtk::VBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 10 ), - 0, - _(" All your selectionned data have been "), - 0, - _( " Successfuly Restored on %s ", $restore_path ), - 1, - new Gtk::VBox( 0, 10 ), - ), - ); - button_box_build_backup_end(); - $central_widget = \$do_restore; - $up_box->show_all(); - -} - -sub return_path { - my ($username) = @_; - my $usr; - my $home_dir; - my $passwdfile = "/etc/passwd"; - open( PASSWD, $passwdfile ) or exit 1; - while ( defined( my $line = <PASSWD> ) ) { - chomp($line); - ( $usr, $home_dir ) = ( split ( /:/, $line ) )[ 0, 5 ]; - last if ( $usr eq $username ); - } - close(PASSWD); - return $home_dir; -} - -sub restore_backend { - my $untar_cmd; - my $exist_problem = 0; - my $user_dir; - if ( grep /tar.gz$/, all($path_to_find_restore) ) { $untar_cmd = 0; } - else { $untar_cmd = 1; } - if ($restore_user) { - if ($backup_user_versions) { - select_user_data_to_restore(); - if ( valid_backup_test(@user_list_to_restore) == -1 ) { - $exist_problem = 1; - restore_aff_backup_problems(); - } - else { - foreach (@user_list_to_restore) { - my ( $tnom, $username, $theure2 ) = - /^(\w+\_\w+\_user_)(.*)_(\d+\_\d+.*)$/; - $DEBUG - and print -"user name to restore: $username, user directory: $user_dir\n"; - if ($remove_user_before_restore) { - $user_dir = return_path($username); - -d $user_dir and rm_rf($user_dir); - } - $untar_cmd - or system( - " tar xfz $path_to_find_restore/$_ -C $restore_path"); - $untar_cmd - and system( -"/usr/bin/bzip2 -cd $path_to_find_restore/$_ | tar xf -C $restore_path " - ); - } - } - } - } - if ($restore_sys) { - if ($backup_sys_versions) { - select_sys_data_to_restore(); - if ( valid_backup_test(@sys_list_to_restore) == -1 ) { - $exist_problem = 1; - restore_aff_backup_problems(); - } - else { - $untar_cmd - or - system("tar xfz $path_to_find_restore/$_ -C $restore_path ") - foreach @sys_list_to_restore; - $untar_cmd - and system( -"/usr/bin/bzip2 -cd $path_to_find_restore/$_ | tar xf -C $restore_path " - ) foreach @sys_list_to_restore; - } - } - else { - $untar_cmd - or system( -"tar xfz $path_to_find_restore/backup_sys.tar.gz -C $restore_path " - ); - $untar_cmd - and system( -"/usr/bin/bzip2 -cd $path_to_find_restore/backup_sys.tar.bz2 | tar xf -C $restore_path " - ); - } - } - if ($restore_other) { - $untar_cmd - or system( -"tar xfz $path_to_find_restore/backup_other.tar.gz -C $restore_path " - ); - $untar_cmd - and system( -"/usr/bin/bzip2 -cd $path_to_find_restore/backup_other.tar.bz2 | tar xf -C $restore_path " - ); - } - $exist_problem or restore_aff_result(); -} - -sub restore_do { - if ($backup_bef_restore) { - if ($restore_sys) { $backup_sys = 1; } - else { $backup_sys = 0; } - if ($restore_user) { - $backup_user = 1; - @user_list = @user_list_to_restore; - } - else { $backup_user = 0; } - build_backup_status(); - read_conf_file(); - build_backup_files(); - $table->destroy(); - } - restore_do2(); -} - -sub restore_do2 { - my $do_restore; - my $button_restore; - my $text = new Gtk::Text( undef, undef ); - restore_state(); - gtktext_insert( $text, $restore_state ); - button_box_restore_main(); - - gtkpack( - $advanced_box, - $do_restore = gtkpack_( - new Gtk::VBox( 0, 10 ), 0, - _(" Restore Configuration "), 1, - createScrolledWindow($text), - ), - ); - button_box_restore_end(); - fonction_env( \$do_restore, \&restore_do2, \&restore_box, "restore" ); - $up_box->show_all(); -} - -sub restore_step_other { - my $retore_step_other; - my $text = new Gtk::Text( undef, undef ); - my $other_rest = cat_("$path_to_find_restore/list_other"); - gtktext_insert( $text, $other_rest ); - gtkpack( - $advanced_box, - $retore_step_other = gtkpack_( - new Gtk::VBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 10 ), - 1, - createScrolledWindow($text), - 0, - my $check_restore_other_sure = - new Gtk::CheckButton( _("OK to restore the other files.") ), - 1, - new Gtk::VBox( 0, 10 ), - ), - ); - check_list( [ $check_restore_other_sure, \$restore_other ] ); - fonction_env( \$retore_step_other, \&restore_step_other, \&restore_step2, - "restore", \&restore_do ); - $up_box->show_all(); -} - -my %check_user_to_restore; - -sub restore_step_user { - my $retore_step_user; - my @tmp_list = sort @user_backuped; - @user_backuped = @tmp_list; - - gtkpack( - $advanced_box, - $retore_step_user = gtkpack_( - new Gtk::VBox( 0, 10 ), - 0, - new Gtk::VBox( 0, 10 ), - 0, - _( -"User list to restore (only the most recent date per user is important)" - ), - 1, - createScrolledWindow( - gtkpack__( - new Gtk::VBox( 0, 0 ), - map { - my $name; - my $var2; - my $name_complet = $_; - $name = ( split ( ' ', $name_complet ) )[0]; - my @user_list_tmp = (); - - my $b = new Gtk::CheckButton($name_complet); - if ( grep $name_complet, @user_list_to_restore2 ) { - gtkset_active( $b, 1 ); - $check_user_to_restore{$name_complet}[1] = 1; - } - else { - gtkset_active( $b, 0 ); - $check_user_to_restore{$name_complet}[1] = 0; - } - $b->signal_connect( - toggled => sub { - if ( !$check_user_to_restore{$name_complet}[1] ) - { - $check_user_to_restore{$name_complet}[1] = - 1; - if ( - !grep ( /$name/, - @user_list_to_restore2 ) ) - { - push @user_list_to_restore2, - $name_complet; - } - } - else { - $check_user_to_restore{$name_complet}[1] = - 0; - foreach (@user_list_to_restore2) { - $var2 = ( split ( ' ', $_ ) )[0]; - if ( $name ne $var2 ) { - push @user_list_tmp, $_; - } - } - @user_list_to_restore2 = @user_list_tmp; - } - } - ); - $b - } (@user_backuped) - ), - ), - ), - ); - if ($restore_other) { - fonction_env( \$retore_step_user, \&restore_step_user, "", "restore", - \&restore_step_other ); - } - else { - fonction_env( \$retore_step_user, \&restore_step_user, "", "restore", - \&restore_do ); - } - $up_box->show_all(); -} - -sub restore_step_sys { - my $restore_step_sys; - my $combo_restore_step_sys = new Gtk::Combo(); - $combo_restore_step_sys->set_popdown_strings(@sys_backuped); - - gtkpack( - $advanced_box, - $restore_step_sys = gtkpack_( - new Gtk::VBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 10 ), - 0, - my $check_backup_before = - new Gtk::CheckButton( _("Backup the system files before:") ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), 1, - _("please choose the date to restore"), 0, - $combo_restore_step_sys, 0, - new Gtk::HBox( 0, 10 ), - ), - 1, - new Gtk::VBox( 0, 10 ), - ), - ); - $combo_restore_step_sys->entry->signal_connect( - 'changed', - sub { - $restore_step_sys_date = $combo_restore_step_sys->entry->get_text(); - } - ); - $combo_restore_step_sys->entry->set_text($restore_step_sys_date); - fonction_env( \$restore_step_sys, \&restore_step_sys, "", "restore", ); - if ($restore_user) { - fonction_env( \$restore_step_sys, \&restore_step_sys, "", "restore", - \&restore_step_user ); - } - elsif ($restore_other) { - fonction_env( \$restore_step_sys, \&restore_step_sys, "", "restore", - \&restore_step_other ); - } - else { - fonction_env( \$restore_step_sys, \&restore_step_sys, "", "restore", - \&restore_do ); - } - $up_box->show_all(); -} - -sub restore_other_media_hd { - my ($previous_function) = @_, my $box_where_hd; - my $button; - my $adj = new Gtk::Adjustment 550.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - my ( $pix_fs_map, $pix_fs_mask ) = gtkcreate_png("ic82-dossier-32"); - - gtkpack( - $advanced_box, - $box_where_hd = gtkpack_( - new Gtk::VBox( 0, 6 ), - 0, - new Gtk::HSeparator, - 0, - my $check_where_hd = - new Gtk::CheckButton( _("Use Hard Disk to backup") ), - 0, - new Gtk::HSeparator, - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( _("Please enter the directory to save:") ), - $where_hd - ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_usize( - gtkset_sensitive( - $save_path_entry = new Gtk::Entry(), $where_hd - ), - 152, 20 - ), - 0, - gtkset_sensitive( - $button = gtksignal_connect( - new Gtk::Button(), - clicked => sub { - filedialog_where_hd(); - } - ), - $where_hd - ), - ), - 0, - new Gtk::VBox( 0, 6 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please enter the maximum size\n allowed for Drakbackup" - ) - ), - $where_hd - ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_usize( - gtkset_sensitive( - my $spinner = new Gtk::SpinButton( $adj, 0, 0 ), - $where_hd - ), - 200, - 20 - ), - ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_sensitive( - my $check_where_hd_quota = - new Gtk::CheckButton( _("Use quota for backup files.") ), - $where_hd - ), - 0, - new Gtk::VBox( 0, 6 ), - ), - ), - ); - check_list( [ $check_where_hd_quota, \$hd_quota ] ); - gtksignal_connect( - gtkset_active( $check_where_hd, $where_hd ), - toggled => sub { - $where_hd = $where_hd ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - } - ); - $button->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_fs_map, $pix_fs_mask ) - ) - ); - $save_path_entry->set_text($save_path); - $save_path_entry->signal_connect( 'changed', - sub { $save_path = $save_path_entry->get_text() } ); - if ($previous_function) { - fonction_env( \$box_where_hd, \&advanced_where_hd, \&$previous_function, - "" ); - } - else { - fonction_env( \$box_where_hd, \&advanced_where_hd, \&advanced_where, - "" ); - } - $up_box->show_all(); -} - -sub restore_find_net { - my ($previous_function) = @_, my $box_where_net; - - gtkpack( - $advanced_box, - $box_where_net = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - new Gtk::VBox( 0, 10 ), - 1, - gtksignal_connect( - new Gtk::Button( _("FTP Connection") ), - clicked => sub { - $box_where_net->destroy(); - if ($previous_function) { - message_underdevel(); - - # advanced_where_net_ftp(\&$previous_function); - } - else { - advanced_where_net_ftp(); - } - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Secure Connection") ), - clicked => sub { - $box_where_net->destroy(); - if ($previous_function) { - advanced_where_net_ssh( \&$previous_function ); - } - else { - advanced_where_net_ssh(); - } - } - ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - new Gtk::VBox( 0, 10 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - if ($previous_function) { - fonction_env( \$box_where_net, \&advanced_where_net, - \&$previous_function, "" ); - } - else { - fonction_env( \$box_where_net, \&advanced_where_net, \&advanced_where, - "" ); - } - $up_box->show_all(); -} - -sub restore_other_media { - my $box_find_restore; - my $button; - my $adj = new Gtk::Adjustment 550.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - my ( $pix_fs_map, $pix_fs_mask ) = gtkcreate_png("ic82-dossier-32"); - - gtkpack( - $advanced_box, - $box_find_restore = gtkpack_( - new Gtk::VBox( 0, 6 ), - 0, - new Gtk::HSeparator, - 0, - my $check_other_media_hd = - new Gtk::CheckButton( _("Restore from Hard Disk.") ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please enter the directory where backups are stored" - ) - ), - $other_media_hd - ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_usize( - gtkset_sensitive( - $restore_find_path_entry = new Gtk::Entry(), - $other_media_hd - ), - 152, 20 - ), - 0, - gtkset_sensitive( - $button = gtksignal_connect( - new Gtk::Button(), - clicked => sub { - filedialog_restore_find_path(); - } - ), - $other_media_hd - ), - ), - 1, - new Gtk::VBox( 0, 6 ), - - # 0, new Gtk::HSeparator, - # 0, my $check_other_media_net = new Gtk::CheckButton( _("Restore from Network") ), - # 0, new Gtk::VBox(0, 6), - # 1, gtkpack(new Gtk::HBox(0,10), - # new Gtk::VBox(0, 6), - # gtkset_sensitive(gtksignal_connect(new Gtk::Button("Network"), clicked => sub { - # ${$central_widget}->destroy(); - # restore_find_net(\&restore_other_media);}), !$other_media_hd ), - # new Gtk::VBox(0, 6), - # ), - # 1, new Gtk::VBox(0, 6), - # 0, new Gtk::HSeparator, - 0, - new Gtk::VBox( 0, 6 ), - ), - ); - gtksignal_connect( - gtkset_active( $check_other_media_hd, $other_media_hd ), - toggled => sub { - $other_media_hd = $other_media_hd ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - } - ); - - # gtksignal_connect(gtkset_active($check_other_media_net, !$other_media_hd), toggled => sub { - # $other_media_hd = $other_media_hd ? 0 : 1; - # ${$central_widget}->destroy(); - # $current_widget->(); - # }); - $button->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_fs_map, $pix_fs_mask ) - ) - ); - $restore_find_path_entry->set_text($path_to_find_restore); - $restore_find_path_entry->signal_connect( 'changed', - sub { $path_to_find_restore = $restore_find_path_entry->get_text() } ); - fonction_env( - \$box_find_restore, \&restore_other_media, - \&restore_step2, "other_media" - ); - $up_box->show_all(); -} - -sub restore_step2 { - my $retore_step2; - my $other_exist; - my $sys_exist; - my $user_exist; - - if ( -f "$save_path/backup_other*" ) { $other_exist = 1; } - else { my $other_exist = 0; $restore_other = 0; } - if ( grep /\_sys\_/, grep /^backup/, all("$save_path/") ) { - $sys_exist = 1; - } - else { my $sys_exist = 0; $restore_sys = 0; } - if ( grep /\_user\_/, grep /^backup/, all("$save_path/") ) { - $user_exist = 1; - } - else { my $user_exist = 0; $restore_user = 0; } - $backup_sys_versions || $backup_user_versions and $backup_bef_restore = 1; - - gtkpack( - $advanced_box, - $retore_step2 = gtkpack_( - new Gtk::VBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 10 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - my $check_restore_other_src = - new Gtk::CheckButton( - _("Select another media to restore from") ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - gtksignal_connect( - new Gtk::Button( _("Other Media") ), - clicked => sub { - ${$central_widget}->destroy(); - restore_other_media(); - } - ), - $restore_other_src - ), - ), - 0, - gtkset_sensitive( - my $check_restore_sys = - new Gtk::CheckButton( _("Restore system") ), - $sys_exist - ), - 0, - gtkset_sensitive( - my $check_restore_user = - new Gtk::CheckButton( _("Restore Users") ), - $user_exist - ), - 0, - gtkset_sensitive( - my $check_restore_other = - new Gtk::CheckButton( _("Restore Other") ), - $other_exist - ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - my $check_restore_other_path = new Gtk::CheckButton( - _("select path to restore (instead of / )") - ), - 1, - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - my $restore_path_entry = new Gtk::Entry(), - $restore_other_path - ), - ), - 0, - gtkset_sensitive( - my $check_backup_bef_restore = new Gtk::CheckButton( - _( -"Do new backup before restore (only for incremental backups.)" - ) - ), - $backup_sys_versions || $backup_user_versions - ), - 0, - gtkset_sensitive( - my $check_remove_user_dir = new Gtk::CheckButton( - _("Remove user directories before restore.") - ), - $sys_exist - ), - 1, - new Gtk::VBox( 0, 10 ), - ), - ); - foreach ( - [ $check_restore_sys, \$restore_sys ], - [ $check_backup_bef_restore, \$backup_bef_restore ], - [ $check_restore_user, \$restore_user ], - [ $check_remove_user_dir, \$remove_user_before_restore ], - [ $check_restore_other, \$restore_other ] - ) - { - my $ref = $_->[1]; - gtksignal_connect( - gtkset_active( $_->[0], ${$ref} ), - toggled => sub { - ${$ref} = ${$ref} ? 0 : 1; - if ( !$restore_sys && !$restore_user && !$restore_other ) { - $next_widget = \&message_norestore_box; - } - elsif ( $restore_sys && $backup_sys_versions ) { - $next_widget = \&restore_step_sys; - } - elsif ($restore_user) { $next_widget = \&restore_step_user; } - elsif ($restore_other) { $next_widget = \&restore_step_other; } - else { $next_widget = \&restore_do; } - } - ); - } - gtksignal_connect( - gtkset_active( $check_restore_other_path, $restore_other_path ), - toggled => sub { - $restore_other_path = $restore_other_path ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - } - ); - gtksignal_connect( - gtkset_active( $check_restore_other_src, $restore_other_src ), - toggled => sub { - $restore_other_src = $restore_other_src ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - } - ); - fonction_env( \$retore_step2, \&restore_step2, \&restore_box, "restore" ); - if ( !$restore_sys && !$restore_user && !$restore_other ) { - $next_widget = \&message_norestore_box; - } - elsif ( $restore_sys && $backup_sys_versions ) { - $next_widget = \&restore_step_sys; - } - elsif ($restore_user) { $next_widget = \&restore_step_user; } - elsif ($restore_other) { $next_widget = \&restore_step_other; } - else { $next_widget = \&restore_do; } - $restore_path_entry->set_text($restore_path); - $restore_path_entry->signal_connect( 'changed', - sub { $restore_path = $restore_path_entry->get_text(); } ); - $up_box->show_all(); -} - -sub restore_box { - my $retore_box; - my $retore_box3; - my $check_restore_sys; - my $check_restore_user; - my $check_restore_other; - $path_to_find_restore = $save_path; - find_backup_to_restore(); - button_box_restore_main(); - - if ( $other_backuped || $sys_backuped || @user_backuped ) { - gtkpack( - $advanced_box, - $retore_box = gtkpack_( - new Gtk::HBox( 0, 1 ), - 1, - new Gtk::VBox( 0, 10 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 10 ), - 1, - gtksignal_connect( - new Gtk::Button( _("Restore all backups") ), - clicked => sub { - $retore_box->destroy(); - button_box_restore(); - @user_list_to_restore2 = sort @user_backuped; - $restore_sys = 1; - $restore_other = 1; - $restore_user = 1; - restore_do(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Custom Restore") ), - clicked => sub { - $retore_box->destroy(); - button_box_restore(); - restore_step2(); - } - ), - 1, - new Gtk::VBox( 0, 10 ), - 1, - new Gtk::VBox( 0, 10 ), - ), - 1, - new Gtk::HBox( 0, 10 ), - ), - ); - } - else { - gtkpack( - $advanced_box, - $retore_box = - gtkpack_( new Gtk::HBox( 0, 1 ), message_norestorefile_box(), ), - ), - ; - } - fonction_env( \$retore_box, \&restore_box, \&interactive_mode_box, - "restore" ); - $up_box->show_all(); -} - -################################################ BUTTON_BOX ################################################ - -# sub generic_button_box { -# # 1-n - [button name, fonctions associated] -# $button_box_tmp->destroy(); -# gtkpack($button_box, -# $button_box_tmp = gtkpack_(new Gtk::HButtonBox, -# 0, gtksignal_connect(new Gtk::Button($_->[0]), clicked => sub {$_->[1]}) foreach (@_), -# } ), ); -# } - -sub button_box_adv { - $button_box_tmp->destroy(); - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - new Gtk::HButtonBox, - 0, - gtksignal_connect( - new Gtk::Button( _("Cancel") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&$current_widget, $custom_help ); - } - ), - 1, - new Gtk::HBox( 0, 1 ), - 0, - gtksignal_connect( - new Gtk::Button( _("Previous") ), - clicked => sub { - ${$central_widget}->destroy(); - $previous_widget->(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Save") ), - clicked => sub { - ${$central_widget}->destroy(); - save_conf_file(); - $previous_widget->(); - } - ), - ), - ); -} - -# sub button_box_adv { -# generic_button_box(["cancel", ${$central_widget}->destroy() ]); -# } - -sub button_box_restore_main { - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - gtkpack_( - new Gtk::HButtonBox, - 0, - gtksignal_connect( - new Gtk::Button( _("Cancel") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&$current_widget, $custom_help ); - } - ), - 1, - new Gtk::HBox( 0, 1 ), - 0, - gtksignal_connect( - new Gtk::Button( _("Previous") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Ok") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - ), - ), - ); -} - -sub button_box_backup_end { - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - new Gtk::HButtonBox, - 0, - gtksignal_connect( - new Gtk::Button( _("Cancel") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&$current_widget, $custom_help ); - } - ), - 1, - new Gtk::HBox( 0, 1 ), - 0, - gtksignal_connect( - new Gtk::Button( _("Previous") ), - clicked => sub { - ${$central_widget}->destroy(); - $previous_widget->(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Build Backup") ), - clicked => sub { - ${$central_widget}->destroy(); - build_backup_status(); - build_backup_files(); - } - ), - ), - ); -} - -sub button_box_wizard_end { - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - new Gtk::HButtonBox, - 0, - gtksignal_connect( - new Gtk::Button( _("Cancel") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&$current_widget, $custom_help ); - } - ), - 1, - new Gtk::HBox( 0, 1 ), - 0, - gtksignal_connect( - new Gtk::Button( _("Previous") ), - clicked => sub { - ${$central_widget}->destroy(); - $previous_widget->(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Save") ), - clicked => sub { - ${$central_widget}->destroy(); - save_conf_file(); - interactive_mode_box(); - } - ), - ), - ); -} - -sub button_box_restore_end { - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - new Gtk::HButtonBox, - 0, - gtksignal_connect( - new Gtk::Button( _("Cancel") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&$current_widget, $custom_help ); - } - ), - 1, - new Gtk::HBox( 0, 1 ), - 0, - gtksignal_connect( - new Gtk::Button( _("Previous") ), - clicked => sub { - ${$central_widget}->destroy(); - $previous_widget->(); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Restore") ), - clicked => sub { - ${$central_widget}->destroy(); - restore_backend(); - } - ), - ), - ); -} - -sub button_box_build_backup_end { - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - new Gtk::HButtonBox, - 1, - new Gtk::HBox( 0, 5 ), - 1, - new Gtk::HBox( 0, 5 ), - 0, - gtksignal_connect( - new Gtk::Button( _("Ok") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - - ), - ); -} - -sub button_box_restore_pbs_end { - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - new Gtk::HButtonBox, - 1, - new Gtk::HBox( 0, 5 ), - 1, - new Gtk::HBox( 0, 5 ), - 1, - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&$current_widget, $custom_help ); - } - ), - 0, - gtksignal_connect( - new Gtk::Button( _("Ok") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - - ), - ); -} - -sub button_box_build_backup { - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - new Gtk::HButtonBox, - 1, - gtksignal_connect( - new Gtk::Button( _("Cancel") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&$current_widget, $custom_help ); - } - ), - 1, - new Gtk::HBox( 0, 0 ), - 0, - gtksignal_connect( - new Gtk::Button( _("Previous") ), - clicked => sub { - ${$central_widget}->destroy(); - $previous_widget->(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Next") ), - clicked => sub { - ${$central_widget}->destroy(); - $next_widget->(); - } - ), - ), - ); -} - -sub button_box_restore { - - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - new Gtk::HButtonBox, - 1, - gtksignal_connect( - new Gtk::Button( _("Cancel") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&$current_widget, $custom_help ); - } - ), - 1, - new Gtk::HBox( 0, 0 ), - 0, - gtksignal_connect( - new Gtk::Button( _("Previous") ), - clicked => sub { - ${$central_widget}->destroy(); - $previous_widget->(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Next") ), - clicked => sub { - ${$central_widget}->destroy(); - $next_widget->(); - } - ), - ), - ); -} - -sub button_box_wizard { - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack_( - new Gtk::HButtonBox, - 1, - gtksignal_connect( - new Gtk::Button( _("Cancel") ), - clicked => sub { - ${$central_widget}->destroy(); - interactive_mode_box(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&$current_widget, $custom_help ); - } - ), - 1, - new Gtk::HBox( 0, 0 ), - 0, - gtksignal_connect( - new Gtk::Button( $next_widget ? _("Previous") : _("OK") ), - clicked => sub { - ${$central_widget}->destroy(); - $previous_widget ? $previous_widget->() : $next_widget->(); - } - ), - if_( - $next_widget, - 1, - gtksignal_connect( - new Gtk::Button( _("Next") ), - clicked => sub { - ${$central_widget}->destroy(); - $next_widget ? $next_widget->() : $previous_widget->(); - } - ) - ), - ), - ); -} - -sub button_box_main { - $button_box_tmp->destroy(); - - gtkpack( - $button_box, - $button_box_tmp = gtkpack( - gtkset_layout( new Gtk::HButtonBox, -start ), - gtksignal_connect( - new Gtk::Button( _("Close") ), - clicked => sub { - Gtk->main_quit(); - } - ), - gtksignal_connect( - new Gtk::Button( _("Help") ), - clicked => sub { - ${$central_widget}->destroy(); - adv_help( \&interactive_mode_box, $custom_help ); - } - ), - ), - ); -} - -################################################ MESSAGES ################################################ - -sub message_norestorefile_box { - $box2->destroy(); - my ( $pix_warn_map, $pix_warn_mask ) = gtkcreate_png('warning'); - - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack( - new Gtk::HBox( 0, 15 ), - new Gtk::VBox( 0, 5 ), - new Gtk::Pixmap( $pix_warn_map, $pix_warn_mask ), - _( -"Please Build backup before to restore it...\n or verify that your path to save is correct." - ), - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - button_box_restore_main(); - $central_widget = \$box2; - $up_box->show_all(); -} - -sub send_mail_pb { - $table->destroy(); - my ( $pix_warn_map, $pix_warn_mask ) = gtkcreate_png('warning'); - - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 15 ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - new Gtk::Pixmap( $pix_warn_map, $pix_warn_mask ), - 0, - _( - "Error durind sendmail - your report mail was not sent - Please configure sendmail" - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - button_box_restore_main(); - $custom_help = "mail_pb"; - $central_widget = \$box2; - $up_box->show_all(); -} - -sub install_rpm { - my ($previous_function) = @_, my $box_what_user; - - gtkpack( - $advanced_box, - $box_what_user = gtkpack_( - new Gtk::VBox( 0, 15 ), - 0, - _("Package List to Install"), - 0, - new Gtk::HSeparator, - 0, - createScrolledWindow( - gtkpack__( - new Gtk::VBox( 0, 0 ), - map { my $b = new Gtk::Button($_); } - (@list_of_rpm_to_install) - ), - ), - ), - ); - fonction_env( \$box_what_user, \&install_rpm, \&$previous_function, - "what" ); - $up_box->show_all(); -} - -sub client_ftp_pb { - $table->destroy(); - my ( $pix_warn_map, $pix_warn_mask ) = gtkcreate_png('warning'); - - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 15 ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - new Gtk::Pixmap( $pix_warn_map, $pix_warn_mask ), - 0, - _( - "Error durind sending file via FTP. - Please correct your FTP configuration." - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - button_box_restore_main(); - $custom_help = "mail_pb"; - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_norestore_box { - $box2->destroy(); - my ( $pix_warn_map, $pix_warn_mask ) = gtkcreate_png('warning'); - - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack( - new Gtk::HBox( 0, 15 ), - new Gtk::VBox( 0, 5 ), - new Gtk::Pixmap( $pix_warn_map, $pix_warn_mask ), - _("Please select data to restore..."), - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - button_box_restore_main(); - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_noselect_box { - $box2->destroy(); - my ( $pix_warn_map, $pix_warn_mask ) = gtkcreate_png('warning'); - - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack( - new Gtk::HBox( 0, 15 ), - new Gtk::VBox( 0, 5 ), - new Gtk::Pixmap( $pix_warn_map, $pix_warn_mask ), - _("Please select media for backup..."), - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - $previous_widget = \&wizard_step2; - $next_widget = \&wizard_step2; - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_noselect_what_box { - $box2->destroy(); - my ( $pix_warn_map, $pix_warn_mask ) = gtkcreate_png('warning'); - - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack( - new Gtk::HBox( 0, 15 ), - new Gtk::VBox( 0, 5 ), - new Gtk::Pixmap( $pix_warn_map, $pix_warn_mask ), - _("Please select data to backup..."), - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - $previous_widget = \&wizard; - $next_widget = \&wizard; - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_noconf_box { - $box2->destroy(); - my ( $pix_warn_map, $pix_warn_mask ) = gtkcreate_png('warning'); - - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack( - new Gtk::HBox( 0, 15 ), - new Gtk::VBox( 0, 5 ), - new Gtk::Pixmap( $pix_warn_map, $pix_warn_mask ), - _( -"No configuration file found \nplease click Wizard or Advanced." - ), - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - button_box_restore_main(); - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_underdevel { - $box2->destroy(); - my ( $pix_warn_map, $pix_warn_mask ) = gtkcreate_png('warning'); - - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack( - new Gtk::HBox( 0, 15 ), - new Gtk::VBox( 0, 5 ), - new Gtk::Pixmap( $pix_warn_map, $pix_warn_mask ), - _("Under Devel ... please wait."), - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - $central_widget = \$box2; - $up_box->show_all(); -} - -################################################ BUILD_BACKUP ################################################ - -sub progress { - my ( $progressbar, $incr, $label_text ) = @_; - my ($new_val) = $progressbar->get_current_percentage; - $new_val += $incr; - if ( $new_val > 1 ) { $new_val = 1 } - $progressbar->update($new_val); - $progressbar->{label}->set($label_text); - Gtk->main_iteration while Gtk->events_pending; -} - -sub find_backup_to_put_on_cd { - my @list_backup_tmp; - my @data_backuped_tmp; - @data_backuped = (); - -d $save_path and my @list_backup = all($save_path); - foreach ( grep /^backup_other/, @list_backup ) { - $other_backuped = 1; - chomp; - my $tail = ( split ( ' ', `du $save_path/$_` ) )[0]; - s/^backup_other//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my @user_date = split ( /\_20/, $_ ); - my @user_date2 = split ( /\_/, $user_date[1] ); - my $to_put = -" other_data, (tail: $tail ko, date: 20$user_date2[0], hour: $user_date2[1])"; - push @data_backuped, $to_put; - } - foreach ( grep /_sys_/, @list_backup ) { - $sys_backuped = 1; - chomp; - my $tail = ( split ( ' ', `du $save_path/$_` ) )[0]; - s/^backup_other//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my @user_date = split ( /\_20/, $_ ); - my @user_date2 = split ( /\_/, $user_date[1] ); - my $to_put = -" system, (tail: $tail ko, date: 20$user_date2[0], hour: $user_date2[1])"; - push @data_backuped, $to_put; - } - foreach ( grep /user_/, @list_backup ) { - chomp; - my $tail = ( split ( ' ', `du $save_path/$_` ) )[0]; - s/^backup_user_//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my @user_date = split ( /\_20/, $_ ); - my @user_date2 = split ( /\_/, $user_date[1] ); - my $to_put = -" $user_date[0], (tail: $tail ko, date: 20$user_date2[0], hour: $user_date2[1])"; - push @data_backuped, $to_put; - } -} - -sub build_backup_status { - $pbar = new Gtk::ProgressBar; - $pbar1 = new Gtk::ProgressBar; - $pbar2 = new Gtk::ProgressBar; - $pbar3 = new Gtk::ProgressBar; - button_box_build_backup_end(); - gtkpack( - $advanced_box, - $table = create_packtable( - { col_spacings => 10, row_spacings => 5 }, - [""], - [""], - [""], - [""], - [""], - [""], - [""], - [""], - [ _("Backup system files") ], - [ $pbar, $pbar->{label} = new Gtk::Label(' ') ], - [ _("Backup user files") ], - [ $pbar1, $pbar1->{label} = new Gtk::Label(' ') ], - [ _("Backup other files") ], - [ $pbar2, $pbar2->{label} = new Gtk::Label(' ') ], - [ _("Total Progress") ], - [ $pbar3, $pbar3->{label} = new Gtk::Label(' ') ], - ), - ); - $custom_help = "options"; - $central_widget = \$table; - $up_box->show_all(); - Gtk->main_iteration while Gtk->events_pending; -} - -sub build_backup_ftp_status { - $pbar = new Gtk::ProgressBar; - $pbar3 = new Gtk::ProgressBar; - $table->destroy(); - button_box_build_backup_end(); - $pbar->set_value(0); - $pbar3->set_value(0); - - gtkpack( - $advanced_box, - $table = gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - _("files sending by FTP"), - 1, - new Gtk::VBox( 0, 15 ), - 1, - create_packtable( - { col_spacings => 10, row_spacings => 5 }, - - # [ $pbar->set_show_text( $show_text ); - [ _("Sending files...") ], - [""], - [ $pbar->{label} = new Gtk::Label(' ') ], - [$pbar], - [""], - [ _("Total Progress") ], - [ $pbar3->{label} = new Gtk::Label(' ') ], - [$pbar3], - ), - 1, - new Gtk::VBox( 0, 15 ), - ), - ); - $custom_help = "options"; - $central_widget = \$table; - $up_box->show_all(); - Gtk->main_iteration while Gtk->events_pending; -} - -sub build_backup_box_see_conf { - my $box2; - my $text = new Gtk::Text( undef, undef ); - system_state(); - gtktext_insert( $text, $system_state ); - button_box_restore_main(); - - gtkpack( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 10 ), 0, - _("Drakbackup Configuration"), 1, - createScrolledWindow($text), - ), - ), - ); - button_box_backup_end(); - $custom_help = ""; - $central_widget = \$box2; - $current_widget = \&build_backup_box_see_conf; - $previous_widget = \&build_backup_box; - $up_box->show_all(); -} - -sub build_backup_box_progress { - - # build_backup_files(); -} - -sub aff_total_tail { - my @toto = (); - my $total = 0; - push @toto, ( split ( ",", $_ ) )[1] foreach @list_to_build_on_cd; - foreach (@toto) { - s/\s+\(tail://gi; - s/\s+//gi; - s/ko//gi; - $total += $_; - } - $label_tail->set("total tail: $total ko"); -} - -my %check_data_to_backup_cd; - -sub build_backup_cd_select_data { - my $retore_step_user; - find_backup_to_put_on_cd(); - @list_to_build_on_cd = sort @data_backuped; - @data_backuped = @list_to_build_on_cd; - - gtkpack( - $advanced_box, - $retore_step_user = gtkpack_( - new Gtk::VBox( 0, 10 ), - 0, - new Gtk::VBox( 0, 10 ), - 0, - _("Data list to include on CDROM."), - 1, - createScrolledWindow( - gtkpack__( - new Gtk::VBox( 0, 0 ), - map { - my $name = $_; - my @user_list_tmp = (); - my $b = new Gtk::CheckButton($name); - if ( grep $name, @list_to_build_on_cd ) { - gtkset_active( $b, 1 ); - } - else { - gtkset_active( $b, 0 ); - } - $b->signal_connect( - toggled => sub { - if ( !$check_data_to_backup_cd{$name}[1] ) { - $check_data_to_backup_cd{$name}[1] = 1; - if ( - !grep ( /$name$/, @list_to_build_on_cd ) - ) - { - push @list_to_build_on_cd, $name; - } - } - else { - $check_data_to_backup_cd{$name}[1] = 0; - foreach (@list_to_build_on_cd) { - if ( $name ne $_ ) { - push @user_list_tmp, $_; - } - } - @list_to_build_on_cd = @user_list_tmp; - } - aff_total_tail(); - } - ); - $b - } (@data_backuped) - ), - ), - 0, - new Gtk::HSeparator, - 0, - $label_tail = new Gtk::Label(" "), - 0, - new Gtk::HSeparator, - ), - ); - aff_total_tail(); - fonction_env( \$retore_step_user, \&restore_step_user, - \&build_backup_cd_box, "restore", \&build_backup_box_see_conf ); - $up_box->show_all(); -} - -sub build_backup_cd_box { - my $box_build_backup_cd; - my $combo_where_cd_time = new Gtk::Combo(); - my $adj = new Gtk::Adjustment 4.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - $combo_where_cd_time->set_popdown_strings( "650", "700", "750", "800" ); - - button_box_build_backup(); - gtkpack( - $advanced_box, - $box_build_backup_cd = gtkpack_( - new Gtk::VBox( 0, 6 ), - 0, - my $check_where_cd = - new Gtk::CheckButton( _("Use CD/DVDROM to backup") ), - 0, - new Gtk::HSeparator, - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( _("Please choose your CD space") ), - $where_cd - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_usize( - gtkset_sensitive( $combo_where_cd_time, $where_cd ), - 100, 20 - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( _("Please enter the cd writer speed") ), - $where_cd - ), - 1, - new Gtk::VBox( 0, 6 ), - 0, - gtkset_usize( - gtkset_sensitive( - my $spinner = new Gtk::SpinButton( $adj, 0, 0 ), - $where_cd - ), - 100, 20 - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _("Please check if you are using CDRW media") - ), - $where_cd - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_sensitive( - my $check_cdrw = new Gtk::CheckButton(), $where_cd - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _("Please check if you want to erase your CDRW before") - ), - $cdrw && $where_cd - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_sensitive( - my $check_cdrw_erase = new Gtk::CheckButton(), - $cdrw && $where_cd - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please enter your CD Writer device name (ex: 0,1,0)" - ) - ), - $where_cd - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_usize( - gtkset_sensitive( - $cd_devive_entry = new Gtk::Entry(), $where_cd - ), - 100, 20 - ), - ), - 0, - new Gtk::VBox( 0, 5 ), - 0, - gtkpack_( - new Gtk::HBox( 0, 10 ), - 0, - gtkset_sensitive( - new Gtk::Label( - _( -"Please check if you want to include install boot on your CD." - ) - ), - 0 - ), - 1, - new Gtk::VBox( 0, 5 ), - 0, - gtkset_sensitive( - my $check_cd_with_install_boot = new Gtk::CheckButton(), 0 - ), - ), - ), - ); - foreach ( [ $check_cdrw_erase, \$cdrw_erase ], - [ $check_cd_with_install_boot, \$cd_with_install_boot ] ) - { - my $ref = $_->[1]; - gtksignal_connect( gtkset_active( $_->[0], ${$ref} ), - toggled => sub { ${$ref} = ${$ref} ? 0 : 1; } ); - } - gtksignal_connect( - gtkset_active( $check_where_cd, $where_cd ), - toggled => sub { - $where_cd = $where_cd ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - if ($where_cd) { $next_widget = \&build_backup_cd_select_data; } - else { $next_widget = \&build_backup_cd_box; } - } - ); - gtksignal_connect( - gtkset_active( $check_cdrw, $cdrw ), - toggled => sub { - $cdrw = $cdrw ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - } - ); - if ($where_cd) { $next_widget = \&build_backup_cd_select_data; } - else { $next_widget = \&build_backup_cd_box; } - $cd_devive_entry->set_text($cd_devive); - $cd_devive_entry->signal_connect( 'changed', - sub { $cd_devive = $cd_devive_entry->get_text(); } ); - $combo_where_cd_time->entry->set_text($cd_time); - $combo_where_cd_time->entry->signal_connect( 'changed', - sub { $cd_time = $combo_where_cd_time->entry->get_text() } ); - fonction_env( \$box_build_backup_cd, \&build_backup_cd_box, - \&build_backup_box, "" ); - $up_box->show_all(); -} - -sub build_backup_box { - $box2->destroy(); - my ( $pix_cd_map, $pix_cd_mask ) = gtkcreate_png("ic82-CD-40"); - my ( $pix_hd_map, $pix_hd_mask ) = gtkcreate_png("ic82-discdurwhat-40"); - my ( $pix_options_map, $pix_options_mask ) = - gtkcreate_png("ic82-moreoption-40"); - - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtksignal_connect( - my $button_from_conf_file = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - build_backup_box_see_conf(); - } - ), - 0, - new Gtk::VBox( 0, 5 ), - - # 1, gtksignal_connect(my $button_on_cd = new Gtk::Button(), - # clicked => sub { ${$central_widget}->destroy(); - # $where_cd = 1; - # build_backup_cd_box(); - # }), - # 0, new Gtk::VBox(0, 5), - 1, - gtksignal_connect( - my $button_see_conf = new Gtk::Button(), - clicked => sub { - ${$central_widget}->destroy(); - build_backup_box_see_conf(); - } - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - - $button_from_conf_file->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_hd_map, $pix_hd_mask ), - new Gtk::Label( _("Backup Now from configuration file") ), - new Gtk::HBox( 0, 5 ) - ) - ); - - # $button_on_cd->add(gtkpack(new Gtk::HBox(0,10), - # new Gtk::Pixmap($pix_cd_map, $pix_cd_mask), - # new Gtk::Label(_("Backup Now on CDROM")), - # new Gtk::HBox(0, 5) - # )); - $button_see_conf->add( - gtkpack( - new Gtk::HBox( 0, 10 ), - new Gtk::Pixmap( $pix_options_map, $pix_options_mask ), - new Gtk::Label( _("View Backup Configuration.") ), - new Gtk::HBox( 0, 5 ) - ) - ); - - button_box_restore_main(); - fonction_env( \$box2, \&build_backup_box, \&interactive_mode_box, - "options" ); - $up_box->show_all(); -} - -################################################ INTERACTIVE ################################################ - -sub interactive_mode_box { - $box2->destroy(); - - read_conf_file(); - gtkadd( - $advanced_box, - $box2 = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtkpack_( - new Gtk::VBox( 0, 15 ), - 1, - new Gtk::VBox( 0, 5 ), - 1, - gtksignal_connect( - new Gtk::Button( _("Wizard Configuration") ), - clicked => sub { - ${$central_widget}->destroy(); - read_conf_file(); - wizard(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Advanced Configuration") ), - clicked => sub { - button_box_adv(); - ${$central_widget}->destroy(); - advanced_box(); - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Backup Now") ), - clicked => sub { - ${$central_widget}->destroy(); - if ($cfg_file_exist) { build_backup_box(); } - else { message_noconf_box(); } - } - ), - 1, - gtksignal_connect( - new Gtk::Button( _("Restore") ), - clicked => - sub { ${$central_widget}->destroy(); restore_box(); } - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - 1, - new Gtk::VBox( 0, 5 ), - ), - ); - button_box_main(); - $custom_help = "main"; - $central_widget = \$box2; - $up_box->show_all(); -} - -sub interactive_mode { - $interactive = 1; - my $box; - my $window1 = - $::isEmbedded ? new Gtk::Plug($::XID) : new Gtk::Window -toplevel; - init Gtk; - $window1->signal_connect( delete_event => sub { Gtk->exit(0) } ); - $window1->set_position(1); - $window1->set_title( _("Drakbackup") ); - my ( $pix_u_map, $pix_u_mask ) = gtkcreate_png("drakbackup.540x57"); - read_conf_file(); - - gtkadd( - $window1, - gtkpack( - new Gtk::VBox( 0, 0 ), - gtkpack( - gtkset_usize( $up_box = new Gtk::VBox( 0, 5 ), 540, 400 ), - $box = gtkpack_( - new Gtk::VBox( 0, 3 ), - 0, - new Gtk::Pixmap( $pix_u_map, $pix_u_mask ), - 1, - gtkpack_( - new Gtk::HBox( 0, 3 ), - 1, - gtkpack_( - new Gtk::HBox( 0, 15 ), - 0, - new Gtk::HBox( 0, 5 ), - 1, - $advanced_box = gtkpack_( - new Gtk::HBox( 0, 15 ), - 1, $box2 = gtkpack_( new Gtk::VBox( 0, 15 ), ), - ), - 0, - new Gtk::HBox( 0, 5 ), - ), - ), - 0, - new Gtk::HSeparator, - 0, - $button_box = gtkpack( - new Gtk::VBox( 0, 15 ), - $button_box_tmp = gtkpack( new Gtk::VBox( 0, 0 ), ), - ), - ), - ), - ), - ); - interactive_mode_box(); - $custom_help = "main"; - button_box_main(); - $central_widget = \$box2; - $window1->show_all; - $window1->realize; - $window1->show_all(); - Gtk->main; - Gtk->exit(0); -} - -################################################ HELP & ABOUT ################################################ - -sub adv_help { - my ( $function, $custom_help ) = @_, - my $text = new Gtk::Text( undef, undef ); - my $advanced_box_help; - -################################################ help definition ############################################## - - my %custom_helps = ( - "options" => _( - "options description: - - In this step Drakbackup allow you to change: - - - The compression mode: - - If you check bzip2 compression, you will compress - your data better than gzip (about 2-10 %). - This option is not checked by default because - this compression mode needs more time ( about 1000% more). - - - The update mode: - - This option will update your backup, but this - option is not really useful because you need to - decompress your backup before you can update it. - - - the .backupignore mode: - - Like with cvs, Drakbackup will ignore all references - included in .backupignore files in each directories. - ex: - #> cat .backupignore - *.o - *~ - ... - - -" - ), - "mail_pb" => _( " - Some errors during sendmail are caused by - a bad configuration of postfix. To solve it you have to - set myhostname or mydomain in /etc/postfix/main.cf - -" ), - - "what" => _( - "options description: - - - Backup system files: - - This option allows you to backup your /etc directory, - which contains all configuration files. Please be - careful during the restore step to not overwrite: - /etc/passwd - /etc/group - /etc/fstab - - - Backup User files: - - This option allows you select all users that you want - to backup. - To preserve disk space, it is recommended that you - do not include web browser's cache. - - - Backup Other files: - - This option allows you to add more data to save. - With the other backup it's not possible at the - moment to select select incremental backup. - - - Incremental Backups: - - The incremental backup is the most powerful - option for backup. This option allows you - to backup all your data the first time, and - only the changed afterward. - Then you will be able, during the restore - step, to restore your data from a specified - date. - If you have not selected this option all - old backups are deleted before each backup. - - -" - ), - "restore" => _( - "restore description: - -Only the most recent date will be used ,because with incremental -backups it is necesarry to restore one by one each older backups. - -So if you don't like to restore an user please unselect all his -check box. - -Otherwise, you are able to select only one of this - - - Incremental Backups: - - The incremental backup is the most powerfull - option to use backup, this option allow you - to backup all your data the first time, and - only the changed after. - So you will be able during the restore - step, to restore your data from a specified - date. - If you have not selected this options all - old backups are deleted before each backup. - - - -" - ), - "main" => _( -" Copyright (C) 2001 MandrakeSoft by DUPONT Sebastien <dupont_s\@epita.fr>" - ) - . "\n\n" - . _( -" This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." - ) - . "\n\n _____________________\n" - . _( - "Description: - - Drakbackup is used to backup your system. - During the configuration you can select: - - System files, - - Users files, - - Other files. - or All your system ... and Other (like Windows Partitions) - - Drakbackup allows you to backup your system on: - - Harddrive. - - NFS. - - CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.). - - FTP. - - Rsync. - - Webdav. - - Tape. - - Drakbackup allows you to restore your system to - a user selected directory. - - Per default all backup will be stored on your - /var/lib/drakbackup directory - - Configuration file: - /etc/drakconf/drakbackup/drakbakup.conf - - -Restore Step: - - During the restore step, DrakBackup will remove - your original directory and verify that all - backup files are not corrupted. It is recommended - you do a last backup before restoring. - - -" - ), - "ftp" => _( - "options description: - -Please be careful when you are using ftp backup, because only -backups that are already built are sent to the server. -So at the moment, you need to build the backup on your hard -drive before sending it to the server. - -" - ), - "restore_pbs" => _( " -Restore Backup Problems: - -During the restore step, Drakbackup will verify all your -backup files before restoring them. -Before the restore, Drakbackup will remove -your original directory, and you will loose all your -data. It is important to be careful and not modify the -backup data files by hand. -" ) - ); - - my $default_help = - _( -" Copyright (C) 2001 MandrakeSoft by DUPONT Sebastien <dupont_s\@epita.fr>" - ) - . "\n\n" - . _( - " This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." - ) - . "\n\n _____________________\n" - . _( - "Description: - - Drakbackup is used to backup your system. - During the configuration you can select - - System files, - - Users files, - - Other files. - or All your system ... and Other (like Windows Partitions) - - Drakbackup allows you to backup your system on: - - Harddrive. - - NFS. - - CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.). - - FTP. - - Rsync. - - Webdav. - - Tape. - - Drakbackup allows you to restore your system to - a user selected directory. - - Per default all backup will be stored on your - /var/lib/drakbackup directory - - Configuration file: - /etc/drakconf/drakbackup/drakbakup.conf - -Restore Step: - - During the restore step, Drakbackup will remove - your original directory and verify that all - backup files are not corrupted. It is recommended - you do a last backup before restoring. - - -" - ); - -################################################ help fonction ############################################## - - gtktext_insert( $text, $custom_helps{$custom_help} || $default_help ); - gtkpack( - $advanced_box, - $advanced_box_help = gtkpack_( - new Gtk::VBox( 0, 10 ), - 1, - gtkpack_( - new Gtk::HBox( 0, 0 ), 1, - $text, 0, - new Gtk::VScrollbar( $text->vadj ), - ), - 0, - gtkadd( - gtkset_layout( new Gtk::HButtonBox, -spread ), - gtksignal_connect( - new Gtk::Button( _("OK") ), - clicked => sub { - ${$central_widget}->destroy(); - $function->(); - } - ), - ), - ) - ); - $central_widget = \$advanced_box_help; - $up_box->show_all(); -} - -sub to_ok { - $sav_next_widget = $next_widget; - $next_widget = undef; - button_box_wizard(); -} - -sub to_normal { - $next_widget = $sav_next_widget; -} |