Ejemplo n.º 1
0
 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();
     }
 }
Ejemplo n.º 2
0
        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();
                }
            }
        }
Ejemplo n.º 3
0
 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);
     }
 }
Ejemplo n.º 4
0
        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();
                }
            }
        }
Ejemplo n.º 5
0
        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();
            }
        }