예제 #1
0
 // private Dictionary<string,FileSystemWatcher> _directoriesFileSystemWatchers = new Dictionary<string, FileSystemWatcher>();
 public DirectoryWatcher(TopViewModel top,IDirectoryViewModel root, PathHelper pathHelper, Dispatcher dispatcher)
 {
     Top = top;
     _pathHelper = pathHelper;
     _dispatcher = dispatcher;
     root.SubDirectories.CollectionLoaded += SubDirectories_CollectionLoaded;
 }
예제 #2
0
        public static IDirectoryViewModel ClearNotExistDirectories(IDirectoryViewModel directory)
        {
            IDirectoryViewModel noExistDirectory = null;
            IDirectoryViewModel currentDirectory = directory;

            while (currentDirectory.Parent != null)
            {
                if (currentDirectory.Path == "" || Directory.Exists(currentDirectory.Path))
                {
                    if (noExistDirectory != null)
                    {
                        currentDirectory.SubDirectories.Remove(noExistDirectory);
                    }
                    return(currentDirectory);
                }
                DirectoryWatcher.DeleteFileSystemWatcher(currentDirectory);
                currentDirectory.SubDirectories.Clear();
                currentDirectory.Files.Clear();
                noExistDirectory = currentDirectory;
                currentDirectory = currentDirectory.Parent;
            }
            // only this pc
            if (currentDirectory.Path == "")
            {
                if (noExistDirectory != null)
                {
                    currentDirectory.SubDirectories.Remove(noExistDirectory);
                }
                return(currentDirectory);
            }

            return(null);
        }
예제 #3
0
        public IDirectoryViewModel GetDirectory(string path, out IDirectoryViewModel parent)
        {
            IDirectoryViewModel child        = null;
            IDirectoryViewModel findedParent = null;

            findedParent = Root;
            child        = findedParent;
            parent       = null;
            do
            {
                findedParent = child;
                child        = findedParent.SubDirectories.FirstOrDefault(model => Contains(NormalizePath(path), NormalizePath(model.Path)));
                if (child == null)
                {
                    if (NormalizePath(findedParent.Path) == NormalizePath(Directory.GetParent(path).FullName))
                    {
                        parent = findedParent;
                    }
                    return(null);
                }
            } while (NormalizePath(child.Path) != NormalizePath(path));
            if (child != null)
            {
                parent = child.Parent;
            }
            return(child);
        }
예제 #4
0
        private void AddDirectoryToWatch(IDirectoryViewModel directory)
        {
            var drive = DriveInfoEx.IsDrive(directory.Path);

            if (drive != null && !drive.IsReady)
            {
                return;
            }
            /* if (!drive.IsReady) return;*/
            FileSystemWatcher directoryFileSystemWatcher = new FileSystemWatcher();

            directoryFileSystemWatcher.Path = directory.Path;

            /* Watch for changes in LastAccess and LastWrite times, and
             * the renaming of files or directories. */
            directoryFileSystemWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;
            // Add event handlers.
            directoryFileSystemWatcher.Changed += OnChanged;
            directoryFileSystemWatcher.Created += OnChanged;
            directoryFileSystemWatcher.Deleted += OnChanged;
            directoryFileSystemWatcher.Renamed += OnRenamed;
            // Begin watching.
            directoryFileSystemWatcher.EnableRaisingEvents = true;

            directory.FileSystemWatcher = directoryFileSystemWatcher;
            directory.SubDirectories.CollectionLoaded += SubDirectories_CollectionLoaded;
        }
예제 #5
0
        private void OnRenamed(object source, RenamedEventArgs e)
        {
            IDirectoryViewModel parent;
            IDirectoryViewModel child = _pathHelper.GetDirectory(e.FullPath, out parent);
            bool isFile;
            int  index = -1;

            isFile = Path.HasExtension(e.FullPath);
            if (isFile)
            {
                if (!parent.Files.IsLoaded)
                {
                    return;
                }
            }
            else
            {
                if (!parent.SubDirectories.IsLoaded)
                {
                    parent.UpdateHasItems();
                    return;
                }
            }
            _dispatcher.Invoke(() =>
            {
                Delete(isFile, parent, child, e.OldFullPath);
                Create(isFile, parent, e.FullPath);
            });
        }
 public DirectoryViewModelBase(INativeSystemInfo nativeSystemInfo, IDirectoryViewModel parent)
 {
     NativeSystemInfo = nativeSystemInfo;
     Parent = parent;
     OpenCommand = new RelayCommand(Open);
     Size = -1;
 }
예제 #7
0
        public static IDirectoryViewModel ClearNotExistDirectories(IDirectoryViewModel directory)
        {
            IDirectoryViewModel noExistDirectory = null;
            IDirectoryViewModel currentDirectory = directory;
            while (currentDirectory.Parent!=null)
            {

                if (currentDirectory.Path == "" || Directory.Exists(currentDirectory.Path))
                {
                    if (noExistDirectory != null)
                    {
                        currentDirectory.SubDirectories.Remove(noExistDirectory);
                    }
                    return currentDirectory;
                }
                DirectoryWatcher.DeleteFileSystemWatcher(currentDirectory);
                currentDirectory.SubDirectories.Clear();
                currentDirectory.Files.Clear();
                noExistDirectory = currentDirectory;
                currentDirectory = currentDirectory.Parent;
            }
            // only this pc
            if (currentDirectory.Path == "")
            {
                if (noExistDirectory != null)
                {
                    currentDirectory.SubDirectories.Remove(noExistDirectory);
                }
                return currentDirectory;
            }

            return null;
        }
예제 #8
0
        // private Dictionary<string,FileSystemWatcher> _directoriesFileSystemWatchers = new Dictionary<string, FileSystemWatcher>();

        public DirectoryWatcher(TopViewModel top, IDirectoryViewModel root, PathHelper pathHelper, Dispatcher dispatcher)
        {
            Top         = top;
            _pathHelper = pathHelper;
            _dispatcher = dispatcher;
            root.SubDirectories.CollectionLoaded += SubDirectories_CollectionLoaded;
        }
예제 #9
0
        private async void performMove(IEntityViewModel entity, IDirectoryViewModel targetDirectory)
        {
            var targetVirtualDirectory = targetDirectory.VirtualFileSystem.GetDirectory(targetDirectory.DirectoryPath);

            switch (entity.Type)
            {
            case EntityType.Directory:
                var virtualDirectory = entity.VirtualFileSystem.GetDirectory(entity.FullName);
                try
                {
                    await _longOperationsManager.StartLongOperation(targetDirectory.VirtualFileSystem,
                                                                    operation => virtualDirectory.MoveTo(targetVirtualDirectory, operation.SetState,
                                                                                                         operation.CancellationTokenSource.Token));
                }
                catch (Exception e)
                {
                    _windowsManager.ReportError("Directory move error", e);
                }
                break;

            case EntityType.File:
                var virtualFile = entity.VirtualFileSystem.GetFile(entity.FullName);
                try
                {
                    await _longOperationsManager.StartLongOperation(targetDirectory.VirtualFileSystem,
                                                                    operation => virtualFile.MoveTo(targetVirtualDirectory, operation.SetState,
                                                                                                    operation.CancellationTokenSource.Token));
                }
                catch (Exception e)
                {
                    _windowsManager.ReportError("File move error", e);
                }
                break;
            }
        }
예제 #10
0
        public DirectoryViewModel(DirectoryInfo directoryInfo, IDirectoryViewModel parent)
            : base(new NativeFileInfo(directoryInfo.FullName, true), parent)
        {
            _directoryInfo = directoryInfo;
            var directoryProvider = new SubDirectoriesProvider(_directoryInfo, this);

            Path        = Environment.ExpandEnvironmentVariables(_directoryInfo.FullName);
            DisplayName = _directoryInfo.Name;
            if (Parent != null)
            {
                VisualPath = Parent.VisualPath + "\\" + DisplayName;
            }
            Files                = new AsyncLoadCollection <ISystemObjectViewModel>(new FilesProvider(directoryInfo, this));
            SubDirectories       = new AsyncLoadCollection <IDirectoryViewModel>(directoryProvider);
            Children             = new UnionCollectionEx <IDirectoryViewModel, ISystemObjectViewModel, ISystemObjectViewModel>(SubDirectories, Files);
            LastModificationDate = _directoryInfo.LastWriteTime;
            try
            {
                UpdateHasItems();
            }
            catch (UnauthorizedAccessException ex)
            {
                NoAccess = true;
            }
        }
예제 #11
0
 public DirectoryViewModelBase(INativeSystemInfo nativeSystemInfo, IDirectoryViewModel parent)
 {
     NativeSystemInfo = nativeSystemInfo;
     Parent           = parent;
     OpenCommand      = new RelayCommand(Open);
     Size             = -1;
 }
예제 #12
0
 public FileViewModel(FileInfo info, IDirectoryViewModel parent)
 {
     Info = info;
     Parent = parent;
     Path = VisualPath = info.FullName;
     OpenCommand = new RelayCommand(() => Open());
     _nativeFileInfo = new NativeFileInfo(Info.FullName);
 }
예제 #13
0
 public FileViewModel(FileInfo info, IDirectoryViewModel parent)
 {
     Info            = info;
     Parent          = parent;
     Path            = VisualPath = info.FullName;
     OpenCommand     = new RelayCommand(() => Open());
     _nativeFileInfo = new NativeFileInfo(Info.FullName);
 }
예제 #14
0
        private void OnCurrentPathSet()
        {
            _cancellationTokenSource.Cancel();
            _cancellationTokenSource = new CancellationTokenSource();
            Task.Run(() =>
            {
                try
                {
                    var child = PathHelper.GetAndLoadDirectory(CurrentPath, _cancellationTokenSource.Token);
                    try
                    {
                        child.Wait();
                    }
                    catch (AggregateException ex)
                    {
                        if (ex.InnerExceptions.FirstOrDefault(exception => exception.GetType() == typeof(OperationCanceledException)) != null)
                        {
                            return;
                        }
                        if (!_currentPathBroken)
                        {
                            _currentPathBroken = true;
                            _positionHistory--;
                            ClearAfterPosition();
                        }
                        MessageBoxService.Instance.ShowError(ex.InnerExceptions.OfType <Exception>().First().Message);
                        return;
                    }

                    if (child.IsCanceled)
                    {
                        return;
                    }
                    if (child.IsFaulted)
                    {
                        throw child.Exception;
                    }

                    if (child.Result.NoAccess)
                    {
                        MessageBoxService.Instance.ShowError(AccessDirectoryDeniedException.Msg);
                        return;
                    }

                    if (SelectedDirectory.VisualPath == child.Result.VisualPath)
                    {
                        return;
                    }
                    SelectedDirectory = child.Result;
                    AddToHistory(CurrentPath);
                }
                catch (Exception exception)
                {
                    MessageBoxService.Instance.ShowError(exception.Message);
                }
            }, _cancellationTokenSource.Token);
        }
예제 #15
0
        private void performOperation(IEntityViewModel entity, IDirectoryViewModel targetDirectory, bool isCutOperation)
        {
            if (entity.VirtualFileSystem == targetDirectory.VirtualFileSystem)
            {
                performPaste(entity, targetDirectory, isCutOperation);
                return;
            }

            performImport(entity, targetDirectory);
        }
예제 #16
0
        private void performPaste(IEntityViewModel entity, IDirectoryViewModel targetDirectory, bool isCutOperation)
        {
            if (isCutOperation)
            {
                performMove(entity, targetDirectory);
                return;
            }

            performCopy(entity, targetDirectory);
        }
예제 #17
0
        private void Create(bool isFile, IDirectoryViewModel parent, string path)
        {
            int index = 0;

            if (isFile)
            {
                if (parent == null)
                {
                    return;
                }
                if (!parent.Files.IsLoaded)
                {
                    return;
                }
                string name = Path.GetFileName(path);
                for (int i = 0; i < parent.Files.Count; i++)
                {
                    var file = parent.Files[i];
                    if (string.Compare(name, file.DisplayName, StringComparison.OrdinalIgnoreCase) < 0)
                    {
                        index = i;
                        break;
                    }
                }
                parent.Files.Insert(index, new FileViewModel(new FileInfo(path), parent));
            }
            else
            {
                if (parent != null)
                {
                    if (parent.SubDirectories.IsLoaded)
                    {
                        string name = Path.GetDirectoryName(path);
                        for (int i = 0; i < parent.SubDirectories.Count; i++)
                        {
                            var directory = parent.SubDirectories[i];
                            if (String.Compare(name, directory.DisplayName, StringComparison.OrdinalIgnoreCase) < 0)
                            {
                                index = i;
                                break;
                            }
                        }
                        var newDirectory = new DirectoryViewModel(new DirectoryInfo(path), parent);
                        parent.SubDirectories.Insert(index, newDirectory);
                        AddDirectoryToWatch(newDirectory);
                    }
                    else
                    {
                        parent.UpdateHasItems();
                    }
                    return;
                }
            }
        }
예제 #18
0
        public static bool OnOpenDirectory(IDirectoryViewModel e)
        {
            var args = new OpenDirectoryArgs(e);

            if (e.Path != "" && !Directory.Exists(e.Path))
            {
                OnNoExistDirectory(e);
                throw new DirectoryDoesExistException();
            }
            OpenDirectory?.Invoke(null, args);
            return(args.Cancel);
        }
예제 #19
0
 private int FindFileIndex(IDirectoryViewModel directoryViewModel, string path)
 {
     for (int i = 0; i < directoryViewModel.Files.Count; i++)
     {
         var file = directoryViewModel.Files[i];
         if (file.Path == path)
         {
             return(i);
         }
     }
     return(-1);
 }
예제 #20
0
        public Task <IDirectoryViewModel> GetAndLoadDirectory(string path, CancellationToken token)
        {
            return(Task.Run(() =>
            {
                IDirectoryViewModel child = null;
                IDirectoryViewModel findedParent = null;
                child = Root;

                //check first
                string trimedPath = Trim(path);
                bool isVisualPath = Contains(trimedPath, Trim(Root.VisualPath));
                while (Trim(child.VisualPath) != trimedPath)
                {
                    if (!child.SubDirectories.IsLoaded)
                    {
                        child.SubDirectories.LoadAsync(token).Wait(token);
                    }
                    findedParent = child;
                    child = findedParent.SubDirectories.FirstOrDefault(model => Contains(trimedPath, Trim(model.VisualPath)));
                    if (child == null)
                    {
                        break;
                    }
                    /*            child.IsExpanded = true;*/
                }

                if (child != null)
                {
                    return child;
                }

                if (isVisualPath || !Directory.Exists(trimedPath))
                {
                    throw new DirectoryDoesExistException();
                }

                child = Root;

                while (NormalizePath(child.Path) != NormalizePath(path))
                {
                    if (!child.SubDirectories.IsLoaded)
                    {
                        child.SubDirectories.LoadAsync(token).Wait(token);
                    }
                    findedParent = child;
                    child = findedParent.SubDirectories.First(model => Contains(NormalizePath(path), NormalizePath(model.Path)));
                }
                return child;
            }, token));
        }
예제 #21
0
 public static void DeleteFileSystemWatcher(IDirectoryViewModel directoryViewModel)
 {
     if (directoryViewModel.FileSystemWatcher != null)
     {
         directoryViewModel.FileSystemWatcher.EnableRaisingEvents = false;
         directoryViewModel.FileSystemWatcher.Dispose();
     }
     if (directoryViewModel.SubDirectories.Count != 0)
     {
         foreach (var directory in directoryViewModel.SubDirectories)
         {
             DeleteFileSystemWatcher(directory);
         }
     }
 }
예제 #22
0
 public static void DeleteFileSystemWatcher(IDirectoryViewModel directoryViewModel)
 {
     if (directoryViewModel.FileSystemWatcher != null)
     {
         directoryViewModel.FileSystemWatcher.EnableRaisingEvents = false;
         directoryViewModel.FileSystemWatcher.Dispose();
     }
     if (directoryViewModel.SubDirectories.Count != 0)
     {
         foreach (var directory in directoryViewModel.SubDirectories)
         {
             DeleteFileSystemWatcher(directory);
         }
     }
 }
예제 #23
0
 private void Create(bool isFile, IDirectoryViewModel parent, string path)
 {
     int index = 0;
     if (isFile)
     {
         if (parent == null) return;
         if (!parent.Files.IsLoaded) return;
         string name = Path.GetFileName(path);
         for (int i = 0; i < parent.Files.Count; i++)
         {
             var file = parent.Files[i];
             if (string.Compare(name, file.DisplayName, StringComparison.OrdinalIgnoreCase) < 0)
             {
                 index = i;
                 break;
             }
         }
         parent.Files.Insert(index, new FileViewModel(new FileInfo(path), parent));
     }
     else
     {
         if (parent != null)
         {
             if (parent.SubDirectories.IsLoaded)
             {
                 string name = Path.GetDirectoryName(path);
                 for (int i = 0; i < parent.SubDirectories.Count; i++)
                 {
                     var directory = parent.SubDirectories[i];
                     if (String.Compare(name, directory.DisplayName, StringComparison.OrdinalIgnoreCase) < 0)
                     {
                         index = i;
                         break;
                     }
                 }
                 var newDirectory = new DirectoryViewModel(new DirectoryInfo(path), parent);
                 parent.SubDirectories.Insert(index, newDirectory);
                 AddDirectoryToWatch(newDirectory);
             }
             else
             {
                 parent.UpdateHasItems();
             }
             return;
         }
     }
 }
예제 #24
0
        private void OnChanged(object source, FileSystemEventArgs e)
        {
            try
            {
                IDirectoryViewModel parent;
                IDirectoryViewModel child = _pathHelper.GetDirectory(e.FullPath, out parent);
                bool isFile;
                int  index = -1;
                isFile = Path.HasExtension(e.FullPath);

                _dispatcher.Invoke(() =>
                {
                    switch (e.ChangeType)
                    {
                    case WatcherChangeTypes.Created:
                        Create(isFile, parent, e.FullPath);
                        break;

                    case WatcherChangeTypes.Changed:
                        if (isFile)
                        {
                            index = FindFileIndex(parent, e.FullPath);
                            if (index == -1)
                            {
                                return;
                            }
                            parent.Files[index].UpdateParameters();
                        }
                        else
                        {
                            if (child != null)
                            {
                                child.UpdateParameters();
                            }
                        }
                        break;

                    case WatcherChangeTypes.Deleted:
                        Delete(isFile, parent, child, e.FullPath);
                        break;
                    }
                });
            }
            catch (Exception) { }
        }
 public RootDirectoryViewModel(NativeDirectoryInfo nativeDirectoryInfo, IDirectoryViewModel parent)
     : base(nativeDirectoryInfo, parent)
 {
     NativeSystemInfo = nativeDirectoryInfo;
     var directoryUnfo = new DirectoryInfo(nativeDirectoryInfo.Path);
     var subDirectoryProvider = new SubDirectoriesProvider(directoryUnfo, this);
     var filesProvider = new FilesProvider(directoryUnfo,this);
     DisplayName = nativeDirectoryInfo.DisplayName;
     Path = nativeDirectoryInfo.Path;
     VisualPath = Parent.VisualPath + "\\" + DisplayName;
     //is drive?
     DriveInfo driveInfo =  Drives.FirstOrDefault(info => PathHelper.NormalizePath(info.Name) == PathHelper.NormalizePath(Path));
     HasItems = driveInfo?.IsReady ?? directoryUnfo.EnumerateDirectories().Any();
     SubDirectories = new AsyncLoadCollection<IDirectoryViewModel>(subDirectoryProvider);
     SubDirectories.CollectionChanged += _subDirectories_CollectionChanged;
     Files = new AsyncLoadCollection<ISystemObjectViewModel>(filesProvider);
     Children = new UnionCollectionEx<IDirectoryViewModel, ISystemObjectViewModel, ISystemObjectViewModel>(SubDirectories, Files);
 }
예제 #26
0
        public RootDirectoryViewModel(NativeDirectoryInfo nativeDirectoryInfo, IDirectoryViewModel parent) : base(nativeDirectoryInfo, parent)
        {
            NativeSystemInfo = nativeDirectoryInfo;
            var directoryUnfo        = new DirectoryInfo(nativeDirectoryInfo.Path);
            var subDirectoryProvider = new SubDirectoriesProvider(directoryUnfo, this);
            var filesProvider        = new FilesProvider(directoryUnfo, this);

            DisplayName = nativeDirectoryInfo.DisplayName;
            Path        = nativeDirectoryInfo.Path;
            VisualPath  = Parent.VisualPath + "\\" + DisplayName;
            //is drive?
            DriveInfo driveInfo = Drives.FirstOrDefault(info => PathHelper.NormalizePath(info.Name) == PathHelper.NormalizePath(Path));

            HasItems       = driveInfo?.IsReady ?? directoryUnfo.EnumerateDirectories().Any();
            SubDirectories = new AsyncLoadCollection <IDirectoryViewModel>(subDirectoryProvider);
            SubDirectories.CollectionChanged += _subDirectories_CollectionChanged;
            Files    = new AsyncLoadCollection <ISystemObjectViewModel>(filesProvider);
            Children = new UnionCollectionEx <IDirectoryViewModel, ISystemObjectViewModel, ISystemObjectViewModel>(SubDirectories, Files);
        }
예제 #27
0
        private void AddDirectoryToWatch(IDirectoryViewModel directory)
        {
            var drive = DriveInfoEx.IsDrive(directory.Path);

            if (drive != null && !drive.IsReady) return;
            /* if (!drive.IsReady) return;*/
            FileSystemWatcher directoryFileSystemWatcher = new FileSystemWatcher();
            directoryFileSystemWatcher.Path = directory.Path;
            /* Watch for changes in LastAccess and LastWrite times, and
               the renaming of files or directories. */
            directoryFileSystemWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;
            // Add event handlers.
            directoryFileSystemWatcher.Changed += OnChanged;
            directoryFileSystemWatcher.Created += OnChanged;
            directoryFileSystemWatcher.Deleted += OnChanged;
            directoryFileSystemWatcher.Renamed += OnRenamed;
            // Begin watching.
            directoryFileSystemWatcher.EnableRaisingEvents = true;

            directory.FileSystemWatcher = directoryFileSystemWatcher;
            directory.SubDirectories.CollectionLoaded += SubDirectories_CollectionLoaded;
        }
예제 #28
0
 public DirectoryViewModel(DirectoryInfo directoryInfo, IDirectoryViewModel parent)
     : base(new NativeFileInfo(directoryInfo.FullName,true), parent)
 {
     _directoryInfo = directoryInfo;
     var directoryProvider = new SubDirectoriesProvider(_directoryInfo, this);
     Path = Environment.ExpandEnvironmentVariables(_directoryInfo.FullName);
     DisplayName = _directoryInfo.Name;
     if (Parent != null)
         VisualPath = Parent.VisualPath + "\\" + DisplayName;
     Files = new AsyncLoadCollection<ISystemObjectViewModel>(new FilesProvider(directoryInfo,this));
     SubDirectories = new AsyncLoadCollection<IDirectoryViewModel>(directoryProvider);
     Children = new UnionCollectionEx<IDirectoryViewModel, ISystemObjectViewModel, ISystemObjectViewModel>(SubDirectories, Files);
     LastModificationDate = _directoryInfo.LastWriteTime;
     try
     {
         UpdateHasItems();
     }
     catch (UnauthorizedAccessException ex)
     {
         NoAccess = true;
     }
 }
예제 #29
0
        private void Delete(bool isFile, IDirectoryViewModel parent, IDirectoryViewModel child, string path)
        {
            int index;

            if (isFile)
            {
                if (parent != null)
                {
                    if (parent.Files.IsLoaded)
                    {
                        index = FindFileIndex(parent, path);
                        parent.Files.Remove(parent.Files[index]);
                    }
                }
            }
            else
            {
                if (child == null)
                {
                    if (parent != null)
                    {
                        parent.UpdateHasItems();
                        return;
                    }
                    return;
                }

                string selectedPathDirectory = PathHelper.NormalizePath(Top.SelectedDirectory.Path);
                string deletedPath           = PathHelper.NormalizePath(path);

                if (PathHelper.Contains(selectedPathDirectory, deletedPath))
                {
                    Top.SelectedDirectory = child.Parent;
                }

                child.Parent.SubDirectories.Remove(child);
                DeleteFileSystemWatcher(child);
            }
        }
예제 #30
0
        public void Paste(IDirectoryViewModel directory)
        {
            var entities       = _clipboardData.ToList();
            var isCutOperation = _isCutOperation;

            if (_isCutOperation)
            {
                clearClipboard();//allow continue copying as many times as user wants
            }
            _isCutOperation = false;
            HasItemsChanged?.Invoke(this, EventArgs.Empty);

            try
            {
                foreach (var entityInfo in entities)
                {
                    performOperation(entityInfo, directory, isCutOperation);
                }
            }
            catch (Exception e)
            {
                _windowsManager.ReportError("Paste error", e);
            }
        }
예제 #31
0
 public PathHelper(IDirectoryViewModel root)
 {
     Root = root;
 }
 public static void SetSelected(DependencyObject element, IDirectoryViewModel value)
 {
     element.SetValue(SelectedProperty, value);
 }
예제 #33
0
 public OpenDirectoryArgs(IDirectoryViewModel directory)
 {
     Directory = directory;
 }
 public static void OnNoExistDirectory(IDirectoryViewModel directoryViewModel)
 {
     NoExistDirectory?.Invoke(null, new NoExistDirectoryArgs(directoryViewModel));
 }
예제 #35
0
 public NoExistDirectoryArgs(IDirectoryViewModel directory)
 {
     Directory = directory;
 }
예제 #36
0
        private void OnCurrentPathSet()
        {
            _cancellationTokenSource.Cancel();
            _cancellationTokenSource = new CancellationTokenSource();
            Task.Run(() =>
            {
                try
                {
                    var child = PathHelper.GetAndLoadDirectory(CurrentPath, _cancellationTokenSource.Token);
                    try
                    {
                        child.Wait();
                    }
                    catch (AggregateException ex)
                    {
                        if (ex.InnerExceptions.FirstOrDefault(exception => exception.GetType() == typeof(OperationCanceledException)) != null) return;
                        if (!_currentPathBroken)
                        {
                            _currentPathBroken = true;
                            _positionHistory--;
                            ClearAfterPosition();
                        }
                        MessageBoxService.Instance.ShowError(ex.InnerExceptions.OfType<Exception>().First().Message);
                        return;
                    }

                    if (child.IsCanceled)
                    {
                        return;
                    }
                    if (child.IsFaulted)
                        throw child.Exception;

                    if (child.Result.NoAccess)
                    {
                        MessageBoxService.Instance.ShowError(AccessDirectoryDeniedException.Msg);
                        return;
                    }

                    if (SelectedDirectory.VisualPath == child.Result.VisualPath ) return;
                    SelectedDirectory = child.Result;
                    AddToHistory(CurrentPath);
                }
                catch (Exception exception)
                {
                    MessageBoxService.Instance.ShowError(exception.Message);
                }

            }, _cancellationTokenSource.Token);
        }
예제 #37
0
 public FilesProvider(DirectoryInfo directoryInfo, IDirectoryViewModel parent)
 {
     Parent         = parent;
     _directoryInfo = directoryInfo;
 }
예제 #38
0
 public IDirectoryViewModel GetDirectory(string path, out IDirectoryViewModel parent)
 {
     IDirectoryViewModel child = null;
     IDirectoryViewModel findedParent = null;
     findedParent = Root;
     child = findedParent;
     parent = null;
     do
     {
         findedParent = child;
         child = findedParent.SubDirectories.FirstOrDefault(model => Contains(NormalizePath(path), NormalizePath(model.Path)));
         if (child == null)
         {
             if (NormalizePath(findedParent.Path) == NormalizePath(Directory.GetParent(path).FullName))
             {
                 parent = findedParent;
             }
             return null;
         }
     } while (NormalizePath(child.Path) != NormalizePath(path));
     if (child != null)
     {
         parent = child.Parent;
     }
     return child;
 }
예제 #39
0
 public PathHelper(IDirectoryViewModel root)
 {
     Root = root;
 }
 public OpenDirectoryArgs(IDirectoryViewModel directory)
 {
     Directory = directory;
 }
 public NoExistDirectoryArgs(IDirectoryViewModel directory)
 {
     Directory = directory;
 }
 public static void SetSelected(DependencyObject element, IDirectoryViewModel value)
 {
     element.SetValue(SelectedProperty, value);
 }
예제 #43
0
 private void DirectoryViewModelBase_OpenDirectory(object sender, DirectoryViewModelBase.OpenDirectoryArgs e)
 {
     SelectedDirectory = e.Directory;
 }
예제 #44
0
 private void DirectoryViewModelBase_OpenDirectory(object sender, DirectoryViewModelBase.OpenDirectoryArgs e)
 {
     SelectedDirectory = e.Directory;
 }
예제 #45
0
 public static void OnNoExistDirectory(IDirectoryViewModel directoryViewModel)
 {
     NoExistDirectory?.Invoke(null, new NoExistDirectoryArgs(directoryViewModel));
 }
 public static bool OnOpenDirectory(IDirectoryViewModel e)
 {
     var args = new OpenDirectoryArgs(e);
     if (e.Path != "" && !Directory.Exists(e.Path))
     {
         OnNoExistDirectory(e);
         throw new DirectoryDoesExistException();
     }
     OpenDirectory?.Invoke(null, args);
     return args.Cancel;
 }
예제 #47
0
        private void Delete(bool isFile, IDirectoryViewModel parent, IDirectoryViewModel child, string path)
        {
            int index;
            if (isFile)
            {
                if (parent != null)
                {
                    if (parent.Files.IsLoaded)
                    {
                        index = FindFileIndex(parent, path);
                        parent.Files.Remove(parent.Files[index]);
                    }
                }
            }
            else
            {
                if (child == null)
                {
                    if (parent != null)
                    {
                        parent.UpdateHasItems();
                        return;
                    }
                    return;
                }

                string selectedPathDirectory = PathHelper.NormalizePath(Top.SelectedDirectory.Path);
                string deletedPath = PathHelper.NormalizePath(path);

                if (PathHelper.Contains(selectedPathDirectory, deletedPath))
                {
                    Top.SelectedDirectory = child.Parent;
                }

                child.Parent.SubDirectories.Remove(child);
                DeleteFileSystemWatcher(child);
            }
        }
예제 #48
0
 private int FindFileIndex(IDirectoryViewModel directoryViewModel, string path)
 {
     for (int i = 0; i < directoryViewModel.Files.Count; i++)
     {
         var file = directoryViewModel.Files[i];
         if (file.Path == path)
         {
             return i;
         }
     }
     return -1;
 }