public IDisposable ReleaseAvatars(SourceList <ItemModel> items, Range prevRange, Range range) { // release prev avatar bitmaps for (int i = prevRange.From; i <= prevRange.To; i++) { int index = i; // do not release items within current range if (index >= range.From && index <= range.To) { continue; } items.Edit(list => { var item = list[index]; if (item is MessageModel messageModel) { var user = messageModel.Message.User; var chat = messageModel.Message.Chat; messageModel.Avatar = user == null ? _avatarLoader.GetAvatar(chat, AvatarSize.Big) : _avatarLoader.GetAvatar(user, AvatarSize.Big); } }); } return(Disposable.Empty); }
public IObservable <Avatar> PreloadAvatars(IList <MessageModel> models) { return(models.ToObservable() .Select(messageModel => { var user = messageModel.Message.User; var chat = messageModel.Message.Chat; return user == null ? _avatarLoader.GetAvatar(chat) : _avatarLoader.GetAvatar(user); })); }
private static Avatar GetAvatar(IAvatarLoader avatarLoader, MessageModel entry) { if (entry.Message?.UserData != null) { return(avatarLoader.GetAvatar(entry.Message.UserData, AvatarSize.Regular)); } if (entry.Message?.ChatData != null) { return(avatarLoader.GetAvatar(entry.Message.ChatData, AvatarSize.Regular)); } return(null); }
private static Avatar GetAvatar(IAvatarLoader avatarLoader, EntryModel entry) { switch (entry) { case ChatEntryModel chatEntryModel: return(avatarLoader.GetAvatar(chatEntryModel.Chat.ChatData)); case AggregateEntryModel aggregateEntryModel: return(avatarLoader.GetAvatar(new TdApi.Chat { Id = aggregateEntryModel.Aggregate.Id })); } return(null); }
private static Avatar GetAvatar(IAvatarLoader avatarLoader, EntryModel entry) { switch (entry) { case HomeEntryModel _: return(avatarLoader.GetAvatar( AvatarKind.Home, AvatarSize.Small)); case ChatEntryModel chatEntryModel: return(avatarLoader.GetAvatar(chatEntryModel.Chat.ChatData, AvatarSize.Small)); case AggregateEntryModel aggregateEntryModel: return(avatarLoader.GetAvatar(new TdApi.Chat { Id = aggregateEntryModel.Aggregate.Id }, AvatarSize.Small)); } return(null); }
public IObservable <Action> ReleaseAvatars(SourceList <ItemModel> items, Range prevRange, Range range) { var messageModels = new List <MessageModel>(); items.Edit(list => { // release prev avatar bitmaps for (int i = prevRange.From; i <= prevRange.To; i++) { // do not release items within current range if (i >= range.From && i <= range.To) { continue; } if (i >= list.Count) { break; } var item = list[i]; if (item is MessageModel messageModel) { messageModels.Add(messageModel); } } }); return(messageModels.ToObservable() .Select(messageModel => new Action(() => { var user = messageModel.Message.User; var chat = messageModel.Message.Chat; messageModel.Avatar = user == null ? _avatarLoader.GetAvatar(chat, AvatarSize.Big) : _avatarLoader.GetAvatar(user, AvatarSize.Big); }))); }