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); }
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)); } })); }
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); }
private IDisposable BindLoading(IExplorerTrigger explorerTrigger) { explorerTrigger.LoadMessages(LoadDirection.Prev); return(Disposable.Empty); }