Example #1
0
        public override void Backup(object objPstFileToSave)
        {
            PSTRegistryEntry pstFileToSave = (PSTRegistryEntry)objPstFileToSave;
            BackupResultInfo backupResult  = new BackupResultInfo(pstFileToSave);

            backupResult.IsCompressed = AppSettings.FilesAndFoldersCompressFiles;
            try
            {
                Logger.Write(30015, "Starting to backup " + pstFileToSave.SourcePath + " to file system with full method\r\n", Logger.MessageSeverity.Debug);
                // Backup to SMB destination
                backupResult = backupResult.IsCompressed ? BackupWithCompression(pstFileToSave, backupResult) : BackupWithoutCompression(pstFileToSave, backupResult);

                backupResult.ErrorCode             = BackupResultInfo.BackupResult.Success;
                backupResult.ErrorMessage          = String.Empty;
                pstFileToSave.LastSuccessfulBackup = DateTime.UtcNow;
            }
            catch (BackupCanceledException ex)
            {
                Logger.Write(24, "Backup of " + ex.PstFilename + " have been canceled by the user", Logger.MessageSeverity.Warning);
            }
            catch (NotEnoughEstimatedDiskSpace ex)
            {
                Logger.Write(10002, "Not enough estimated disk space on " + ex.Destination, Logger.MessageSeverity.Warning, System.Diagnostics.EventLogEntryType.Warning);
                backupResult.ErrorCode    = BackupResultInfo.BackupResult.Failed;
                backupResult.ErrorMessage = "Not enough estimated disk space on " + ex.Destination;
            }
            catch (Exception ex)
            {
                Logger.Write(20025, "An error occurs while saving a PST file with full method\r\n" + ex.Message, Logger.MessageSeverity.Error, System.Diagnostics.EventLogEntryType.Error);
                backupResult.ErrorCode    = BackupResultInfo.BackupResult.Failed;
                backupResult.ErrorMessage = ex.Message;
            }
            if (!base.IsCancelRequired)
            {
                backupResult.EndTime = DateTime.UtcNow;
                pstFileToSave.Save();
                BackupFinished(new BackupFinishedEventArgs(pstFileToSave, backupResult));
            }
        }
        public override void Backup(object objPstFileToSave)
        {
            try
            {
                PSTRegistryEntry pstFileToSave = (PSTRegistryEntry)objPstFileToSave;
                BackupResultInfo backupResult  = new BackupResultInfo(pstFileToSave);
                backupResult.IsCompressed = false;

                Logger.Write(30011, "Starting to backup " + pstFileToSave.SourcePath + " to file system with differential method", Logger.MessageSeverity.Debug);

                int           fileId       = CheckPrerequisitesForSmbBackup(pstFileToSave.SourcePath);
                string        backupFile   = _clientDb.GetBackupFilePath(pstFileToSave.SourcePath);
                List <string> remoteChunks = _clientDb.GetHashes(fileId);
                backupResult.ChunkCount = SynchonizeLocalAndRemoteFile(fileId, pstFileToSave.SourcePath, backupFile, remoteChunks);

                string backupFileNewName = FileSystem.GetNewName(backupFile);
                FileSystem.RenameFile(backupFile, backupFileNewName);
                _clientDb.RenameBackupFile(pstFileToSave.SourcePath, backupFileNewName);
                pstFileToSave.LastSuccessfulBackup = DateTime.Now;
                pstFileToSave.Save();
                backupResult.RemotePath     = backupFileNewName;
                backupResult.CompressedSize = 0;
                backupResult.ErrorCode      = BackupResultInfo.BackupResult.Success;
                backupResult.ErrorMessage   = String.Empty;
                backupResult.EndTime        = DateTime.UtcNow;
                Logger.Write(30012, pstFileToSave + " have been successfuly saved", Logger.MessageSeverity.Debug);

                if (!base.IsCancelRequired)
                {
                    BackupFinished(new BackupFinishedEventArgs(pstFileToSave, backupResult));
                }
            }
            catch (Exception ex)
            {
                Logger.Write(20024, "An error occurs while backuping a PST file with differential method\r\n" + ex.Message, Logger.MessageSeverity.Error, System.Diagnostics.EventLogEntryType.Error);
            }
        }
Example #3
0
 /// <summary>
 /// Create an instance of the event args
 /// </summary>
 /// <param name="pstRegistryEntry">A reference to the PstRegistryEntry</param>
 /// <param name="backupResult">A reference to the Result of the backup</param>
 public BackupFinishedEventArgs(PSTRegistryEntry pstRegistryEntry, BackupResultInfo backupResult)
 {
     PstRegistryEntry = pstRegistryEntry;
     Result           = backupResult;
 }
Example #4
0
        private BackupResultInfo BackupWithoutCompression(PSTRegistryEntry pstFileToSave, BackupResultInfo backupResult)
        {
            FileInfo sourceFile             = new FileInfo(pstFileToSave.SourcePath);
            string   finalDestinationFolder = FileSystem.ExpandDestinationFolder(AppSettings.FilesAndFoldersDestinationPath);

            CopyFile(sourceFile.FullName, Path.Combine(finalDestinationFolder, sourceFile.Name + ".temp"), false);
            FileSystem.RenameFile(Path.Combine(finalDestinationFolder, sourceFile.Name + ".temp"), Path.Combine(finalDestinationFolder, sourceFile.Name));
            backupResult.RemotePath     = Path.Combine(finalDestinationFolder, sourceFile.Name);
            backupResult.CompressedSize = backupResult.FileSize;

            return(backupResult);
        }
Example #5
0
        private BackupResultInfo BackupWithCompression(PSTRegistryEntry pstFileToSave, BackupResultInfo backupResult)
        {
            FileInfo sourceFile             = new FileInfo(pstFileToSave.SourcePath);
            string   finalDestinationFolder = FileSystem.ExpandDestinationFolder(AppSettings.FilesAndFoldersDestinationPath);

            DirectoryInfo compressionFolder = new DirectoryInfo(FileSystem.GetTemporaryFolder());

            if (HasEnoughDiskspace(compressionFolder, sourceFile.Length / 2))
            {
                string destinationFilePath = Path.Combine(compressionFolder.FullName, sourceFile.Name + ".gz.temp");
                CompressFile(sourceFile.FullName, destinationFilePath);
                CopyFile(destinationFilePath, Path.Combine(finalDestinationFolder, sourceFile.Name + ".gz.temp"), true);
                FileInfo compressedFile = new FileInfo(Path.Combine(finalDestinationFolder, sourceFile.Name + ".gz"));
                FileSystem.RenameFile(Path.Combine(finalDestinationFolder, sourceFile.Name + ".gz.temp"), compressedFile.FullName);
                backupResult.RemotePath     = compressedFile.FullName;
                backupResult.CompressedSize = compressedFile.Length;

                try
                {
                    compressionFolder.Delete(true);
                }
                catch (Exception) { }
            }
            else
            {
                throw new NotEnoughEstimatedDiskSpace(compressionFolder.FullName);
            }

            return(backupResult);
        }