Example #1
0
        public MainViewModel(
            Func <IProvider, IFileManager, IAuthViewModel, IProviderViewModel> providerFactory,
            Func <IProvider, IAuthViewModel> authFactory,
            IProviderStorage providerStorage,
            IFileManager fileManager,
            IScheduler currentThread,
            IScheduler mainThread)
        {
            _loadProviders = ReactiveCommand.CreateFromTask(
                providerStorage.LoadProviders,
                outputScheduler: mainThread);

            _providers = _loadProviders
                         .Select(providers => providers
                                 .Select(x => providerFactory(x, fileManager, authFactory(x)))
                                 .ToList())
                         .StartWithEmpty()
                         .ToProperty(this, x => x.Providers, scheduler: currentThread);

            _isLoading = _loadProviders
                         .IsExecuting
                         .ToProperty(this, x => x.IsLoading, scheduler: currentThread);

            _isReady = _loadProviders
                       .IsExecuting
                       .Select(executing => !executing)
                       .Skip(1)
                       .ToProperty(this, x => x.IsReady, scheduler: currentThread);

            this.WhenAnyValue(x => x.Providers)
            .Where(providers => providers != null)
            .Select(providers => providers.FirstOrDefault())
            .Subscribe(x => SelectedProvider = x);

            Activator = new ViewModelActivator();
            this.WhenActivated(disposable =>
            {
                _loadProviders.Execute()
                .Subscribe(x => { })
                .DisposeWith(disposable);
            });
        }
Example #2
0
        public MainViewModel(
            ProviderViewModelFactory providerFactory,
            AuthViewModelFactory authFactory,
            IProviderStorage storage,
            IFileManager files,
            IScheduler current,
            IScheduler main)
        {
            _storage = storage;
            _refresh = ReactiveCommand.CreateFromTask(
                storage.Refresh,
                outputScheduler: main);

            var providers = storage.Providers();

            providers.Transform(x => providerFactory(x, files, authFactory(x)))
            .ObserveOn(RxApp.MainThreadScheduler)
            .StartWithEmpty()
            .Bind(out _providers)
            .Subscribe();

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

            _isReady = _refresh
                       .IsExecuting
                       .Skip(1)
                       .Select(executing => !executing)
                       .ToProperty(this, x => x.IsReady, scheduler: current);

            providers.Where(changes => changes.Any())
            .ObserveOn(RxApp.MainThreadScheduler)
            .OnItemAdded(x => SelectedProvider   = Providers.LastOrDefault())
            .OnItemRemoved(x => SelectedProvider = null)
            .Subscribe();

            var canRemove = this
                            .WhenAnyValue(x => x.SelectedProvider)
                            .Select(provider => provider != null);

            _remove = ReactiveCommand.CreateFromTask(
                () => storage.Remove(SelectedProvider.Id),
                canRemove);

            var canAddProvider = this
                                 .WhenAnyValue(x => x.SelectedSupportedType)
                                 .Select(type => !string.IsNullOrWhiteSpace(type));

            _add = ReactiveCommand.CreateFromTask(
                () => storage.Add(SelectedSupportedType),
                canAddProvider);

            _welcomeScreenVisible = this
                                    .WhenAnyValue(x => x.SelectedProvider)
                                    .Select(provider => provider == null)
                                    .ToProperty(this, x => x.WelcomeScreenVisible);

            _welcomeScreenCollapsed = this
                                      .WhenAnyValue(x => x.WelcomeScreenVisible)
                                      .Select(visible => !visible)
                                      .ToProperty(this, x => x.WelcomeScreenCollapsed);

            var canUnSelect = this
                              .WhenAnyValue(x => x.SelectedProvider)
                              .Select(provider => provider != null);

            _unselect = ReactiveCommand.Create(
                () => { SelectedProvider = null; },
                canUnSelect);

            Activator = new ViewModelActivator();
            this.WhenActivated(disposables =>
            {
                SelectedSupportedType = SupportedTypes.FirstOrDefault();
                _refresh.Execute()
                .Subscribe()
                .DisposeWith(disposables);
            });
        }
Example #3
0
 public ProviderLogic(IProviderStorage customerStorage)
 {
     _customerStorage = customerStorage;
 }
Example #4
0
 public ProviderLogic(IProviderStorage storage)
 {
     this.storage = storage;
 }
Example #5
0
 public ProviderLogic(IProviderStorage providerStorage)
 {
     _providerStorage = providerStorage;
 }