Beispiel #1
0
        public ExplorerProvider(
            Target target,
            IExplorerTrigger trigger,
            IMessageLoader messageLoader,
            IMessageModelFactory messageModelFactory,
            IAvatarManager avatarManager
            )
        {
            _items = new SourceList <ItemModel>();

            var loadRequests = Observable.FromEventPattern <MessageLoadRequestedArgs>(
                h => trigger.MessageLoadRequested += h,
                h => trigger.MessageLoadRequested -= h)
                               .Select(args => args.EventArgs);

            BindLoading(loadRequests, target, messageLoader, messageModelFactory)
            .DisposeWith(_serviceDisposable);

            var visibleRangeChanges = Observable.FromEventPattern <VisibleRangeNotifiedArgs>(
                h => trigger.VisibleRangeNotified += h,
                h => trigger.VisibleRangeNotified -= h)
                                      .Select(args => args.EventArgs);

            BindAvatarLoading(visibleRangeChanges, avatarManager)
            .DisposeWith(_serviceDisposable);

            BindMediaLoading(visibleRangeChanges)
            .DisposeWith(_serviceDisposable);
        }
Beispiel #2
0
 private IDisposable BindVisibility(IExplorerTrigger explorerTrigger)
 {
     return(this.WhenAnyValue(m => m.VisibleIndexes)
            .ObserveOn(TaskPoolScheduler.Default)
            .Subscribe(tuple =>
     {
         if (tuple != null)
         {
             explorerTrigger.NotifyVisibleRange(
                 new Range(tuple.Item1, tuple.Item2));
         }
     }));
 }
Beispiel #3
0
        public ExplorerModel(
            IFactory <Target, ExplorerProvider> explorerProviderFactory,
            IExplorerTrigger explorerTrigger,
            Target target
            )
        {
            var explorerProvider = explorerProviderFactory.Create(target);

            BindMessages(explorerProvider).DisposeWith(_modelDisposable);

            BindLoading(explorerTrigger).DisposeWith(_modelDisposable);

            BindVisibility(explorerTrigger).DisposeWith(_modelDisposable);
        }
Beispiel #4
0
 private IDisposable BindLoading(IExplorerTrigger explorerTrigger)
 {
     explorerTrigger.LoadMessages(LoadDirection.Prev);
     return(Disposable.Empty);
 }