Example #1
0
        private static void RestoreBackup(string backupsDirectory, string restoredBackupName, string restorationDirectory)
        {
            var restorationProcess = new BackupRestorationProcess(backupsDirectory, restoredBackupName, restorationDirectory);
            var restorationMonitor = new RestorationProgressMonitor();

            var errors = new Queue <string>();

            restorationMonitor.ErrorReceived += (inputPath, outputPath, error, directory) =>
                                                errors.Enqueue($"Could not copy \"{inputPath}\" to \"{outputPath}\": {error.GetType()}");

            Console.WriteLine($"Restoring backup \"{restoredBackupName}\" to {restorationDirectory}");
            Console.WriteLine("Loading backup data...");

            try
            {
                restorationProcess.LoadBackupData();

                Console.WriteLine($"Restoring {restorationProcess.FilesToRestore} files, {restorationProcess.DirectoriesToRestore} directories");
                Console.WriteLine("Restoring files...");

                bool finishedRestoringFiles = false;
                var  loggerTask             = new Task(() =>
                {
                    while (!finishedRestoringFiles)
                    {
                        CommandLineExecution.RewindConsole();

                        while (errors.Count > 0)
                        {
                            Console.Error.WriteLine(errors.Dequeue());
                        }

                        Console.Write($"({restorationMonitor.FilesRestored} / {restorationProcess.FilesToRestore}) {restorationMonitor.LastRestored}");

                        Thread.Sleep(20);
                    }

                    CommandLineExecution.RewindConsole();
                    Console.WriteLine($"{restorationMonitor.FilesRestored} files restored");
                    Console.WriteLine($"Restored backup {restoredBackupName}");
                });
                loggerTask.Start();

                restorationProcess.RestoreBackup(restorationMonitor);
                finishedRestoringFiles = true;

                loggerTask.Wait();
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.ToString());
                Environment.Exit(1);
            }
        }
Example #2
0
 static void Main(string[] args)
 {
     if (args.Length == 0)
     {
         Application.SetHighDpiMode(HighDpiMode.SystemAware);
         Application.EnableVisualStyles();
         Application.SetCompatibleTextRenderingDefault(false);
         Application.Run(new MainMenu());
     }
     else
     {
         AttachConsole(-1);
         CommandLineExecution.Execute(args);
     }
 }
Example #3
0
        private static void CreateBackup(string backupSource, string backupsDestination, string backupId, string precedingBackupId)
        {

            var backupProcess = new BackupProcess(backupSource, backupsDestination);

            var scanMonitor = new DirectoryScanProgressMonitor();
            var backupMonitor = new BackupProgressMonitor();

            var errors = new Queue<string>();
            scanMonitor.ErrorReceived += (path, error, directory) =>
                errors.Enqueue($"Could not scan path \"{path}\": {error.GetType()}");

            var backupState = StatusDisplayState.LoadingReferenceData;

            var loggerTask = new Task(() => 
            {
                Console.WriteLine(string.IsNullOrEmpty(precedingBackupId) ? "Creating full backup..." : "Loading preceding backup...");
                while (backupState == StatusDisplayState.LoadingReferenceData) ;

                Console.WriteLine("Scanning source directory...");
                while (backupState == StatusDisplayState.ScanningSourceData)
                {
                    CommandLineExecution.RewindConsole();

                    while (errors.Count > 0)
                        Console.Error.WriteLine(errors.Dequeue());

                    Console.Write($"{scanMonitor.FilesScanned} files, {scanMonitor.FoldersScanned} directories found...");
                    Thread.Sleep(20);
                }
                CommandLineExecution.RewindConsole();
                Console.WriteLine($"{scanMonitor.FilesScanned} files, {scanMonitor.FoldersScanned} directories found");

                Console.WriteLine("Preparing backup data...");
                while (backupState == StatusDisplayState.PreparingBackupData) ;
                Console.WriteLine($"Detected {backupProcess.DetectedFileChanges} changed files");

                Console.WriteLine("Writing backup data...");

                while (backupState == StatusDisplayState.WritingBackupData)
                {
                    CommandLineExecution.RewindConsole();
                    Console.Write($"({backupMonitor.FilesCopied} / {backupProcess.DetectedFileChanges + 1}) {backupMonitor.LastCopied}");
                    Thread.Sleep(20);
                }

                CommandLineExecution.RewindConsole();
                Console.WriteLine($"{backupMonitor.FilesCopied} files created");
                Console.WriteLine($"Created backup {backupId}");
            });

            loggerTask.Start();

            try
            {
                if (string.IsNullOrEmpty(precedingBackupId))
                    backupProcess.UseEmptyReferenceData();
                else
                {
                    var referenceBackupDataFile = Path.Join(backupsDestination, precedingBackupId, BackupProcess.BackupDataFilename);
                    backupProcess.LoadReferenceData(referenceBackupDataFile);
                }

                backupState = StatusDisplayState.ScanningSourceData;
                backupProcess.LoadSourceData(scanMonitor);

                backupState = StatusDisplayState.PreparingBackupData;
                backupProcess.ProcessDataDifference();

                backupState = StatusDisplayState.WritingBackupData;
                backupProcess.CreateBackup(backupId, backupMonitor);

                backupState = StatusDisplayState.Done;
                loggerTask.Wait();
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.ToString());
                Environment.Exit(1);
            }

        }