Esempio n. 1
0
 public FolderViewModel(IProviderViewModel provider, FolderModel folder)
 {
     Provider = provider;
     _folder  = folder;
     Children = folder.Children != null && folder.Children.Any()
         ? folder.Children.Select(f => new FolderViewModel(provider, f))
         : Enumerable.Empty <IFolderViewModel>();
 }
Esempio n. 2
0
 public FileViewModel(IProviderViewModel provider, FileModel file)
 {
     Provider = provider;
     _file    = file;
 }
Esempio n. 3
0
        public RenameFileViewModel(RenameFileState state, IProviderViewModel owner, IProvider provider)
        {
            _oldName = owner
                       .WhenAnyValue(x => x.SelectedFile.Name)
                       .ToProperty(this, x => x.OldName);

            this.ValidationRule(x => x.NewName,
                                name => !string.IsNullOrWhiteSpace(name),
                                "New name shouldn't be empty.");

            var oldRule = this.ValidationRule(x => x.OldName,
                                              name => !string.IsNullOrWhiteSpace(name),
                                              "Old name shouldn't be empty.");

            Rename = ReactiveCommand.CreateFromTask(
                () => provider.RenameFile(owner.SelectedFile.Path, NewName),
                this.IsValid());

            _isLoading = Rename
                         .IsExecuting
                         .ToProperty(this, x => x.IsLoading);

            var canInteract = owner
                              .WhenAnyValue(x => x.CanInteract)
                              .Skip(1)
                              .StartWith(true);

            var canOpen = this
                          .WhenAnyValue(x => x.IsVisible)
                          .Select(visible => !visible)
                          .CombineLatest(
                canInteract,
                oldRule.WhenAnyValue(x => x.IsValid),
                (visible, interact, old) => visible && old && interact);

            var canClose = this
                           .WhenAnyValue(x => x.IsVisible)
                           .Select(visible => visible);

            Open  = ReactiveCommand.Create(() => {}, canOpen);
            Close = ReactiveCommand.Create(() => {}, canClose);

            Open.Select(unit => true)
            .Merge(Close.Select(unit => false))
            .Subscribe(visible => IsVisible = visible);

            Close.Subscribe(x => NewName = string.Empty);
            Rename.InvokeCommand(Close);

            _hasErrorMessage = Rename
                               .ThrownExceptions
                               .Select(exception => true)
                               .Merge(Close.Select(x => false))
                               .ToProperty(this, x => x.HasErrorMessage);

            _errorMessage = Rename
                            .ThrownExceptions
                            .Select(exception => exception.Message)
                            .Log(this, $"Rename file error occured in {provider.Name} for {OldName}")
                            .Merge(Close.Select(x => string.Empty))
                            .ToProperty(this, x => x.ErrorMessage);

            NewName = state.NewName;
            this.WhenAnyValue(x => x.NewName)
            .Subscribe(name => state.NewName = name);
        }
Esempio n. 4
0
        public RenameFileViewModel(
            IProviderViewModel providerViewModel,
            IProvider provider,
            IScheduler current,
            IScheduler main)
        {
            _oldName = providerViewModel
                       .WhenAnyValue(x => x.SelectedFile)
                       .Select(file => file?.Name)
                       .ToProperty(this, x => x.OldName, scheduler: current);

            var canInteract = providerViewModel
                              .WhenAnyValue(x => x.CanInteract);

            var oldNameValid = this
                               .WhenAnyValue(x => x.OldName)
                               .Select(old => !string.IsNullOrWhiteSpace(old));

            var canOpen = this
                          .WhenAnyValue(x => x.IsVisible)
                          .Select(visible => !visible)
                          .CombineLatest(oldNameValid, (visible, old) => visible && old)
                          .CombineLatest(canInteract, (open, interact) => open && interact);

            _open = ReactiveCommand.Create(
                () => { IsVisible = true; },
                canOpen, main);

            var canClose = this
                           .WhenAnyValue(x => x.IsVisible)
                           .Select(visible => visible);

            _close = ReactiveCommand.Create(
                () => { IsVisible = false; },
                canClose, main);

            var canRename = this
                            .WhenAnyValue(x => x.NewName)
                            .Select(name => !string.IsNullOrWhiteSpace(name))
                            .CombineLatest(oldNameValid, (old, name) => old && name);

            _rename = ReactiveCommand.CreateFromTask(
                () => provider.RenameFile(providerViewModel.SelectedFile.Path, NewName),
                canRename, main);

            _isLoading = _rename
                         .IsExecuting
                         .ToProperty(this, x => x.IsLoading, scheduler: current);

            _hasErrors = _rename
                         .ThrownExceptions
                         .Select(exception => true)
                         .Merge(_close.Select(x => false))
                         .ToProperty(this, x => x.HasErrors, scheduler: current);

            _errorMessage = _rename
                            .ThrownExceptions
                            .Select(exception => exception.Message)
                            .Log(this, $"Rename file error occured in {provider.Name} for {OldName}")
                            .Merge(_close.Select(x => string.Empty))
                            .ToProperty(this, x => x.ErrorMessage, scheduler: current);

            _rename.InvokeCommand(_close);
            _close.Subscribe(x => NewName = string.Empty);
        }
Esempio n. 5
0
        public CreateFolderViewModel(CreateFolderState state, IProviderViewModel owner, IProvider provider)
        {
            _path = owner
                    .WhenAnyValue(x => x.CurrentPath)
                    .ToProperty(this, x => x.Path);

            this.ValidationRule(x => x.Name,
                                name => !string.IsNullOrWhiteSpace(name),
                                "Folder name shouldn't be empty.");

            var pathRule = this.ValidationRule(x => x.Path,
                                               path => !string.IsNullOrWhiteSpace(path),
                                               "Path shouldn't be empty");

            Create = ReactiveCommand.CreateFromTask(
                () => provider.CreateFolder(Path, Name),
                this.IsValid());

            _isLoading = Create.IsExecuting
                         .ToProperty(this, x => x.IsLoading);

            var canInteract = owner
                              .WhenAnyValue(x => x.CanInteract)
                              .Skip(1)
                              .StartWith(true);

            var canOpen = this
                          .WhenAnyValue(x => x.IsVisible)
                          .Select(visible => !visible)
                          .CombineLatest(
                canInteract,
                pathRule.WhenAnyValue(x => x.IsValid),
                (visible, interact, path) => visible && provider.CanCreateFolder && interact && path);

            var canClose = this
                           .WhenAnyValue(x => x.IsVisible)
                           .Select(visible => visible);

            Open  = ReactiveCommand.Create(() => {}, canOpen);
            Close = ReactiveCommand.Create(() => {}, canClose);

            Open.Select(unit => true)
            .Merge(Close.Select(unit => false))
            .Subscribe(visible => IsVisible = visible);

            Close.Subscribe(x => Name = string.Empty);
            Create.InvokeCommand(Close);

            _hasErrorMessage = Create
                               .ThrownExceptions
                               .Select(exception => true)
                               .Merge(Close.Select(unit => false))
                               .ToProperty(this, x => x.HasErrorMessage);

            _errorMessage = Create
                            .ThrownExceptions
                            .Select(exception => exception.Message)
                            .Log(this, $"Create folder error occured in {provider.Name}")
                            .Merge(Close.Select(unit => string.Empty))
                            .ToProperty(this, x => x.ErrorMessage);

            Name      = state.Name;
            IsVisible = state.IsVisible;

            this.WhenAnyValue(x => x.Name)
            .Subscribe(name => state.Name = name);
            this.WhenAnyValue(x => x.IsVisible)
            .Subscribe(visible => state.IsVisible = visible);
        }
        public CreateFolderViewModel(
            IProviderViewModel providerViewModel,
            IProvider provider,
            IScheduler current,
            IScheduler main)
        {
            _path = providerViewModel
                    .WhenAnyValue(x => x.CurrentPath)
                    .ToProperty(this, x => x.Path, scheduler: current);

            var canInteract = providerViewModel
                              .WhenAnyValue(x => x.CanInteract);

            var pathValid = this
                            .WhenAnyValue(x => x.Path)
                            .Select(path => !string.IsNullOrWhiteSpace(path));

            var canCreateFolder = this
                                  .WhenAnyValue(x => x.Name)
                                  .Select(name => !string.IsNullOrWhiteSpace(name))
                                  .CombineLatest(pathValid, (name, path) => name && path);

            _create = ReactiveCommand.CreateFromTask(
                () => provider.CreateFolder(Path, Name),
                canCreateFolder, main);

            var canCreate = Observable.Return(provider.CanCreateFolder);
            var canOpen   = this
                            .WhenAnyValue(x => x.IsVisible)
                            .Select(visible => !visible)
                            .CombineLatest(canCreate, pathValid, (visible, can, path) => visible && path && can)
                            .CombineLatest(canInteract, (open, interact) => open && interact);

            _open = ReactiveCommand.Create(
                () => { IsVisible = true; },
                canOpen, main);

            var canClose = this
                           .WhenAnyValue(x => x.IsVisible)
                           .Select(visible => visible);

            _close = ReactiveCommand.Create(
                () => { IsVisible = false; },
                canClose, main);

            _create.InvokeCommand(_close);
            _close.Subscribe(x => Name = string.Empty);

            _hasErrors = _create
                         .ThrownExceptions
                         .Select(exception => true)
                         .Merge(_close.Select(unit => false))
                         .ToProperty(this, x => x.HasErrors, scheduler: current);

            _errorMessage = _create
                            .ThrownExceptions
                            .Select(exception => exception.Message)
                            .Log(this, $"Create folder error occured in {provider.Name}")
                            .Merge(_close.Select(unit => string.Empty))
                            .ToProperty(this, x => x.ErrorMessage, scheduler: current);

            _isLoading = _create
                         .IsExecuting
                         .ToProperty(this, x => x.IsLoading, scheduler: current);
        }