Exemplo n.º 1
0
        public FeedGroupViewModel(
            Func <Article, FeedItemViewModel> factory,
            INavigationService navigationService,
            IFeedStoreService feedStoreService,
            ISettingManager settingManager,
            Category category)
        {
            var showRead = true;
            var cache    = new ReactiveList <FeedItemViewModel> {
                ChangeTrackingEnabled = true
            };

            Items = cache.CreateDerivedCollection(x => x, x => !(!showRead && x.Read));
            Items.CountChanged.Subscribe(x => IsEmpty = x == 0);
            Title = category.Title;

            Modify = ReactiveCommand.CreateFromTask(() => navigationService.Navigate <ChannelViewModel>());
            Fetch  = ReactiveCommand.CreateFromTask(async() =>
            {
                IsLoading      = true;
                var settings   = await settingManager.Read();
                var response   = await feedStoreService.LoadAsync(category.Channels);
                var viewModels = response.Select(factory).ToList();
                showRead       = settings.Read;
                cache.Clear();
                cache.AddRange(viewModels);
                IsLoading = false;
            });
        }
Exemplo n.º 2
0
 public FeedCategoryViewModel(
     INavigationService navigationService,
     IFeedStoreService feedStoreService,
     IFactoryService factoryService,
     Category category)
 {
     Title = category.Title;
     (IsLoading, IsEmpty) = (true, false);
     Items       = new ObservableCollection <ArticleViewModel>();
     OpenSources = new ObservableCommand(navigationService.Navigate <ChannelsViewModel>);
     Fetch       = new ObservableCommand(async() =>
     {
         IsLoading.Value = true;
         var sources     = category.Channels;
         var response    = await feedStoreService.LoadAsync(sources);
         Items.Clear();
         foreach (var article in response.Item2)
         {
             Items.Add(factoryService.CreateInstance <
                           ArticleViewModel>(article));
         }
         IsEmpty.Value   = Items.Count == 0;
         IsLoading.Value = false;
     });
 }
Exemplo n.º 3
0
 public BackgroundService(
     INotificationService notificationService,
     IFeedStoreService feedStoreService,
     ICategoryManager categoryManager,
     ISettingManager settingManager)
 {
     _notificationService = notificationService;
     _feedStoreService    = feedStoreService;
     _categoryManager     = categoryManager;
     _settingManager      = settingManager;
 }
Exemplo n.º 4
0
 public BackgroundService(
     ICategoriesRepository categoriesRepository,
     INotificationService notificationService,
     IFeedStoreService feedStoreService,
     ISettingsService settingsService)
 {
     _categoriesRepository = categoriesRepository;
     _notificationService  = notificationService;
     _feedStoreService     = feedStoreService;
     _settingsService      = settingsService;
 }
Exemplo n.º 5
0
        public FeedGroupViewModel(
            Func <Article, FeedItemViewModel> factory,
            INavigationService navigationService,
            IFeedStoreService feedStoreService,
            ISettingManager settingManager,
            Category category)
        {
            _source = new ReactiveList <FeedItemViewModel> {
                ChangeTrackingEnabled = true
            };
            _navigationService = navigationService;
            _feedStoreService  = feedStoreService;
            _settingManager    = settingManager;
            _category          = category;
            _factory           = factory;

            Modify = ReactiveCommand.CreateFromTask(_navigationService.Navigate <ChannelViewModel>);
            Fetch  = ReactiveCommand.CreateFromTask(() => _feedStoreService.Load(_category.Channels));
            Items  = _source.CreateDerivedCollection(x => x, x => !(!ShowRead && x.Read));

            Fetch.Select(articles => articles.Select(_factory))
            .ObserveOn(RxApp.MainThreadScheduler)
            .Do(articles => _source.Clear())
            .Subscribe(_source.AddRange);
            Items.IsEmptyChanged
            .Subscribe(x => IsEmpty = x);

            Fetch.IsExecuting.Skip(1)
            .Subscribe(x => IsLoading = x);
            Fetch.IsExecuting
            .Where(executing => executing)
            .SelectMany(x => _settingManager.Read())
            .Select(settings => settings.Read)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(x => ShowRead = x);

            Fetch.IsExecuting
            .Where(executing => executing)
            .Select(executing => false)
            .Subscribe(x => HasErrors = x);
            Fetch.ThrownExceptions
            .Select(exception => true)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(x => HasErrors = x);

            Activator = new ViewModelActivator();
            this.WhenActivated((CompositeDisposable disposables) =>
                               Fetch.Execute().Subscribe());
        }
Exemplo n.º 6
0
        public FeedGroupViewModel(
            Func <Article, FeedItemViewModel> factory,
            INavigationService navigationService,
            IFeedStoreService feedStoreService,
            ISettingManager settingManager,
            Category category)
        {
            _source = new ReactiveList <FeedItemViewModel> {
                ChangeTrackingEnabled = true
            };
            _navigationService = navigationService;
            _feedStoreService  = feedStoreService;
            _settingManager    = settingManager;
            _category          = category;
            _factory           = factory;

            Modify = ReactiveCommand.CreateFromTask(_navigationService.Navigate <ChannelViewModel>);
            Fetch  = ReactiveCommand.CreateFromTask(() => _feedStoreService.Load(_category.Channels));
            Items  = _source.CreateDerivedCollection(x => x, x => !(!ShowRead && x.Read));

            Fetch.Select(articles => articles.Select(_factory))
            .ObserveOn(RxApp.MainThreadScheduler)
            .Do(articles => _source.Clear())
            .Subscribe(_source.AddRange);
            Fetch.IsExecuting
            .Where(executing => executing)
            .SelectMany(x => _settingManager.Read())
            .Select(settings => settings.Read)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(x => ShowRead = x);
            Items.IsEmptyChanged
            .Subscribe(x => IsEmpty = x);
            Fetch.IsExecuting
            .Skip(1)
            .Subscribe(x => IsLoading = x);

            Error = new Interaction <Exception, bool>();
            Fetch.ThrownExceptions
            .ObserveOn(RxApp.MainThreadScheduler)
            .SelectMany(Error.Handle)
            .Where(retry => retry)
            .Select(x => Unit.Default)
            .InvokeCommand(Fetch);
        }
Exemplo n.º 7
0
        public FeedGroupViewModel(
            Func <Article, FeedItemViewModel> factory,
            INavigationService navigationService,
            IFeedStoreService feedStoreService,
            ISettingManager settingManager,
            Category category)
        {
            _navigationService = navigationService;
            _feedStoreService  = feedStoreService;
            _settingManager    = settingManager;
            _category          = category;
            _factory           = factory;

            _source = new ReactiveList <FeedItemViewModel> {
                ChangeTrackingEnabled = true
            };
            Items  = _source.CreateDerivedCollection(x => x, x => !(!ShowRead && x.Read));
            Modify = ReactiveCommand.CreateFromTask(
                () => _navigationService.Navigate <ChannelViewModel>()
                );

            Fetch = ReactiveCommand.CreateFromTask(DoFetch);
            Fetch.IsExecuting.Skip(1)
            .Subscribe(x => IsLoading = x);
            Items.CountChanged
            .Select(count => count == 0)
            .Subscribe(x => IsEmpty = x);

            Error = new Interaction <Exception, bool>();
            Fetch.ThrownExceptions
            .ObserveOn(RxApp.MainThreadScheduler)
            .SelectMany(error => Error.Handle(error))
            .Where(retryRequested => retryRequested)
            .Select(x => Unit.Default)
            .InvokeCommand(Fetch);
        }