Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }