/// <summary> /// Inserts a ScannedFile into the storage backend /// </summary> /// <param name="scannedFile">The ScannedFile to insert</param> public async Task InsertScannedFileAsync(ScannedFile scannedFile) { if (!await ScannedFilesContains(scannedFile)) { _scannedFiles.InsertData(scannedFile); } }
public override bool Equals(object obj) { ScannedFileHashComparer comparer = new ScannedFileHashComparer(); ScannedFile otherScannedFile = obj as ScannedFile; bool isEqual = this.Name.Equals(otherScannedFile.Name) && this.Path.Equals(otherScannedFile.Path) && this.Length.Equals(otherScannedFile.Length) && comparer.Equals(this.Hash, otherScannedFile.Hash); return(isEqual); }
/// <summary> /// Iterate through the ScannedFiles to determine if there is an equal ScannedFile /// </summary> /// <param name="scannedFile">The ScannedFile to compare against the ScannedFiles in the data cache</param> /// <returns>true/false if the ScannedFile is contained in the data cache</returns> private async Task <bool> ScannedFilesContains(ScannedFile scannedFile) { Task <bool> task = Task.Run(() => { bool contains = false; foreach (ScannedFile contextScannedFile in _scannedFiles.ListData()) { contains |= contextScannedFile.Equals(scannedFile); } return(contains); }); return(await task); }
/// <summary> /// Scan a file to the storage backend and update the progress /// </summary> /// <param name="filePath">The location to add to the storage backend</param> /// <param name="progress">The IProgress to update the progress on. /// Progress is updated with the following formula: index * 100 / totalCount</param> internal async Task ScanFile(string filePath, IProgress <int> progress, int index, int totalCount) { if (_fileSystem.File.Exists(filePath)) { FileHash fileHash = new FileHash(_fileSystem); ScannedFile scannedFile = new ScannedFile(); scannedFile.Name = _fileSystem.Path.GetFileName(filePath); scannedFile.Path = _fileSystem.Path.GetFullPath(filePath); scannedFile.Hash = await fileHash.ComputeFileHashAsync(filePath); await _service.InsertScannedFileAsync(scannedFile); } if (progress != null) { progress.Report(index * 100 / totalCount); } }