public void CleanDatabase() { using (var db = new BackupDbEntities()) { var files = db.Files.ToList(); db.Files.RemoveRange(files); db.SaveChanges(); var directories = db.Directories.ToList(); db.Directories.RemoveRange(directories); db.SaveChanges(); } }
private void CheckFileDiff(BackupDbEntities db, File file) { var fileInfo = new FileInfo(file.FullPath); if (file.LastWriteTime != fileInfo.LastWriteTime.Ticks) { var crc = GetCrc(file.FullPath); if (crc != file.Crc) { file.IsNew = (long)StatusFlag.Changed; db.SaveChanges(); } } }
public Directory GetDirectory(string path) { using (var db = new BackupDbEntities()) { var directory = db.Directories.FirstOrDefault(dir => dir.FullPath == path); if (directory == null) { var di = new DirectoryInfo(path); directory = new Directory { FullPath = path, IsNew = 1, Name = di.Name }; db.Directories.Add(directory); Logger.Info($"Creating folder: {di.Name}"); db.SaveChanges(); } return(directory); } }
public async Task DeleteFiles(Configuration config) { await Task.Yield(); using (var db = new BackupDbEntities()) { if (config.DeleteFiles) { var deletedFiles = db.Files.Where(x => x.IsNew == (long)StatusFlag.Deleted).ToList(); foreach (var deletedFile in deletedFiles.AsParallel()) { await Task.Yield(); //TODO delete file Logger.Info($"We should delete file: {deletedFile.FullPath}"); db.Files.Remove(deletedFile); } db.SaveChanges(); } } }
public async Task CopyFiles(Configuration config) { await Task.Yield(); using (var db = new BackupDbEntities()) { var remoteFolder = new DirectoryInfo(config.RemoteDirectory); var rootDirectory = new DirectoryInfo(config.RootDirectory); var changedFiles = db.Files.Where(x => x.IsNew == (long)StatusFlag.Changed).ToList(); var progress = new ProgressWorker(changedFiles); var rand = new Random(DateTime.Now.Millisecond); foreach (var changedFile in changedFiles.OrderBy(f => rand.Next()).AsParallel()) { try { var fi = new FileInfo(changedFile.FullPath); var directoryFullPath = fi.Directory.FullName; string dirDiff = directoryFullPath.Replace(rootDirectory.FullName, ""); var remoteDir = remoteFolder.FullName + dirDiff; if (!System.IO.Directory.Exists(remoteDir)) { System.IO.Directory.CreateDirectory(remoteDir); } var destinationPath = Path.Combine(remoteDir, fi.Name); System.IO.File.Copy(changedFile.FullPath, destinationPath, true); progress.SetFileCopied(changedFile); changedFile.IsNew = (long)StatusFlag.Unchanged; } catch (Exception ex) { Logger.Warn($"We were not able to upload file: {changedFile.FullPath}, {ex.Message}"); } } db.SaveChanges(); } }