private IDisposable BindLoading( IObservable <MessageLoadRequestedArgs> loadRequests, Target target, IMessageLoader messageLoader, IMessageModelFactory messageModelFactory) { switch (target) { case Chat chat: return(BindChatLoading( loadRequests, chat, messageLoader, messageModelFactory)); case Aggregate aggregate: return(BindAggregateLoading( loadRequests, aggregate, messageLoader, messageModelFactory)); } return(Disposable.Empty); }
public MessageManager( IMessageLoader messageLoader, IMessageModelFactory messageModelFactory) { _messageLoader = messageLoader; _messageModelFactory = messageModelFactory; }
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 BindAggregateLoading( IObservable <MessageLoadRequestedArgs> loadRequests, Aggregate aggregate, IMessageLoader messageLoader, IMessageModelFactory messageModelFactory) { throw new NotImplementedException(); }
public InitMessageLoader( IChatLoader chatLoader, IMessageLoader messageLoader, IMessageModelFactory messageModelFactory) { _chatLoader = chatLoader; _messageLoader = messageLoader; _messageModelFactory = messageModelFactory; }
private IDisposable BindChatLoading( IObservable <MessageLoadRequestedArgs> loadRequests, Chat chat, IMessageLoader messageLoader, IMessageModelFactory messageModelFactory) { return(loadRequests .ObserveOn(TaskPoolScheduler.Default) .SelectMany(signal => { var messages = signal.Direction == LoadDirection.Next ? LoadNextMessages(chat, messageLoader) : LoadPrevMessages(chat, messageLoader); return messages.Aggregate(new List <Message>(), (list, m) => { list.Add(m); return list; }) .Select(list => new { Direction = signal.Direction, Messages = list }); }) .Subscribe(data => { var direction = data.Direction; var models = data.Messages .Select(messageModelFactory.CreateMessage) .Reverse() .ToList(); switch (direction) { case LoadDirection.Prev: _items.InsertRange(models, 0); break; case LoadDirection.Next: _items.AddRange(models); break; } })); }
public static IDisposable BindPromoted( this HomeModel model, IChatLoader chatLoader, IMessageLoader messageLoader, IMessageModelFactory messageModelFactory) { model.PromotedMessages = new ObservableCollectionExtended <MessageModel>(); return(chatLoader.LoadPromo() .SelectSeq(chat => { return messageLoader.LoadNextMessages(chat, 0, 10); }) .Accept(message => { var messageModel = messageModelFactory.CreateMessage(message); model.PromotedMessages.Add(messageModel); })); }