protected virtual void ProcessUpdate() { SetLastError(string.Empty); UpdateStarted?.Invoke(this, EventArgs.Empty); DirectoryScanStarted?.Invoke(this, EventArgs.Empty); LocalFileMap.Clear(); BuildLocalFileMap(RootDir); DirectoryScanEnded?.Invoke(this, EventArgs.Empty); if (!GetRemoteFileList()) { FailThread(); return; } if (FilesToDownload.Count > 0) { SyncFiles(); } else { FileSyncNotNeeded?.Invoke(this, EventArgs.Empty); } lock (GUILocker) { Worker = null; InProgress = false; } UpdateComplete?.Invoke(this, EventArgs.Empty); }
private void scanDirectory(DirectoryEntry <Metadata> directory, string path) { var directoryInfo = new DirectoryInfo(path); if (!directoryInfo.Exists) { DirectoryScanNotFound?.Invoke(this, directory); return; } directory.Data.BeginScan(); DirectoryScanStarted?.Invoke(this, directory); // if other process removes the scanned directory, to this process the directory // remains existing and files and subdirectories enumeration continues normally foreach (var info in directoryInfo.EnumerateFiles("*", SearchOption.TopDirectoryOnly)) { if (_interruptScanningDirectory) { break; } entryFound(new Find(EntryType.File, info.FullName)); } if (_interruptScanningDirectory) { directory.Data.ResetScanningTime(); DirectoryScanInterrupted?.Invoke(this, directory); return; } directoryInfo.Refresh(); if (!directoryInfo.Exists) { directory.Data.ResetScanningTime(); DirectoryScanNotFound?.Invoke(this, directory); return; } foreach (var info in directoryInfo.EnumerateDirectories("*", SearchOption.TopDirectoryOnly)) { if (_interruptScanningDirectory) { break; } entryFound(new Find(EntryType.Directory, info.FullName)); } if (_interruptScanningDirectory) { directory.Data.ResetScanningTime(); DirectoryScanInterrupted?.Invoke(this, directory); return; } directory.Data.EndScan(); DirectoryScanFinished?.Invoke(this, directory); }