Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 6
0
        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);
            })));
        }