protected void RegisterResultsEventHandlers(Models.Backup backup, TransferResults results) { BackupedFileRepository daoBackupedFile = new BackupedFileRepository(); results.DeleteCompleted += (object sender, DeletionArgs e) => { Int64?backupedFileId = (Int64?)e.UserData; // TODO(jweyrich): We could get rid of the SELECT and perform just the UPDATE. Models.BackupedFile backupedFile = daoBackupedFile.Get(backupedFileId.Value); backupedFile.TransferStatus = TransferStatus.PURGED; backupedFile.UpdatedAt = DateTime.UtcNow; daoBackupedFile.Update(backupedFile); //var message = string.Format("Purged {0}", e.FilePath); //Info(message); //OnUpdate(new BackupOperationEvent { Status = BackupOperationStatus.Updated, Message = message }); }; results.Failed += (object sender, TransferFileProgressArgs args) => { Models.BackupedFile backupedFile = daoBackupedFile.GetByBackupAndPath(backup, args.FilePath); backupedFile.TransferStatus = TransferStatus.FAILED; backupedFile.UpdatedAt = DateTime.UtcNow; daoBackupedFile.Update(backupedFile); var message = string.Format("Failed {0} - {1}", args.FilePath, args.Exception != null ? args.Exception.Message : "Unknown reason"); Warn(message); //StatusInfo.Update(BackupStatusLevel.ERROR, message); OnUpdate(new BackupOperationEvent { Status = BackupOperationStatus.Updated, Message = message, TransferStatus = TransferStatus.FAILED }); }; results.Canceled += (object sender, TransferFileProgressArgs args) => { Models.BackupedFile backupedFile = daoBackupedFile.GetByBackupAndPath(backup, args.FilePath); backupedFile.TransferStatus = TransferStatus.CANCELED; backupedFile.UpdatedAt = DateTime.UtcNow; daoBackupedFile.Update(backupedFile); var message = string.Format("Canceled {0} - {1}", args.FilePath, args.Exception != null ? args.Exception.Message : "Unknown reason"); Warn(message); //StatusInfo.Update(BackupStatusLevel.ERROR, message); OnUpdate(new BackupOperationEvent { Status = BackupOperationStatus.Updated, Message = message, TransferStatus = TransferStatus.CANCELED }); }; results.Completed += (object sender, TransferFileProgressArgs args) => { Models.BackupedFile backupedFile = daoBackupedFile.GetByBackupAndPath(backup, args.FilePath); backupedFile.TransferStatus = TransferStatus.COMPLETED; backupedFile.UpdatedAt = DateTime.UtcNow; daoBackupedFile.Update(backupedFile); var message = string.Format("Completed {0}", args.FilePath); Info(message); OnUpdate(new BackupOperationEvent { Status = BackupOperationStatus.Updated, Message = message, TransferStatus = TransferStatus.COMPLETED }); Models.BackupPlan plan = Backup.BackupPlan; //backupedFile.Backup.BackupPlan; if (plan.PurgeOptions != null && plan.PurgeOptions.IsTypeCustom && plan.PurgeOptions.EnabledKeepNumberOfVersions) { // Purge the oldest versioned files if the count of versions exceeds the maximum specified for the Backup Plan. IList <Models.BackupedFile> previousVersions = daoBackupedFile.GetCompleteByPlanAndPath(plan, args.FilePath); int found = previousVersions.Count; int keep = plan.PurgeOptions.NumberOfVersionsToKeep; int diff = found - keep; if (diff > 0) { // Delete the oldest Count-N versions. List <Models.BackupedFile> versionsToPurge = previousVersions.Skip(keep).ToList(); foreach (var vp in versionsToPurge) { DeleteVersionedFile(vp.File.Path, new FileVersion { Version = vp.Version }, vp.Id); } } } }; results.Started += (object sender, TransferFileProgressArgs args) => { Models.BackupedFile backupedFile = daoBackupedFile.GetByBackupAndPath(backup, args.FilePath); backupedFile.TransferStatus = TransferStatus.RUNNING; backupedFile.UpdatedAt = DateTime.UtcNow; daoBackupedFile.Update(backupedFile); var message = string.Format("Started {0}", args.FilePath); Info(message); OnUpdate(new BackupOperationEvent { Status = BackupOperationStatus.Updated, Message = message }); }; results.Progress += (object sender, TransferFileProgressArgs args) => { #if DEBUG var message = string.Format("Progress {0}% {1} ({2}/{3} bytes)", args.PercentDone, args.FilePath, args.TransferredBytes, args.TotalBytes); //Info(message); #endif OnUpdate(new BackupOperationEvent { Status = BackupOperationStatus.Updated, Message = null }); }; }