Пример #1
0
        private static TLDecryptedMessage ReplaceWithGroup(IList <TLDecryptedMessageBase> messages, int position, int length)
        {
            var message = messages[position + length - 1] as TLDecryptedMessage73;

            if (message != null)
            {
                var group = new TLVector <TLDecryptedMessageBase>();
                for (var i = 0; i < length; i++)
                {
                    group.Insert(0, messages[position]);
                    messages.RemoveAt(position);
                }

                var mediaGroup = new TLDecryptedMessageMediaGroup {
                    Group = group
                };

                var groupedMessage = new TLDecryptedMessage73
                {
                    Flags    = new TLInt(0),
                    Out      = message.Out,
                    Unread   = message.Unread,
                    RandomId = message.RandomId,
                    FromId   = message.FromId,
                    //ToId = message.ToId,
                    //FwdHeader = message.FwdHeader,
                    ViaBotName         = message.ViaBotName,
                    ReplyToRandomMsgId = message.ReplyToRandomMsgId,
                    Date    = message.Date,
                    TTL     = new TLInt(0), //message.TTL,
                    Message = TLString.Empty,
                    Media   = mediaGroup,
                    //ReplyMarkup = message.ReplyMarkup,
                    Entities = new TLVector <TLMessageEntityBase>(),
                    //Views = message.Views,
                    //EditDate = message.EditDate,
                    //PostAuthor = message.PostAuthor,
                    GroupedId = message.GroupedId,
                    Status    = message.Status
                };

                //if (groupedMessage.FromId != null) groupedMessage.SetFromId();
                if (groupedMessage.Media != null)
                {
                    groupedMessage.SetMedia();
                }

                messages.Insert(position, groupedMessage);

                return(groupedMessage);
            }

            return(null);
        }
        private void SendMessages(IList <Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject> > messages, Action <IList <Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject> > > callback)
        {
            var uploadService = IoC.Get <IUploadService>();

            var tuple        = messages.FirstOrDefault();
            var mediaMessage = tuple != null? tuple.Item1 as TLDecryptedMessage73 : null;
            var groupedId    = mediaMessage != null ? mediaMessage.GroupedId : null;

            if (groupedId != null)
            {
                var messageMediaGroup = new TLDecryptedMessageMediaGroup {
                    Group = new TLVector <TLDecryptedMessageBase>()
                };
                var message = new TLDecryptedMessage73
                {
                    Flags              = new TLInt(0),
                    Media              = messageMediaGroup,
                    Message            = TLString.Empty,
                    RandomId           = mediaMessage.RandomId,
                    RandomBytes        = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength),
                    ChatId             = mediaMessage.ChatId,
                    FromId             = mediaMessage.FromId,
                    Out                = mediaMessage.Out,
                    Unread             = mediaMessage.Unread,
                    Date               = mediaMessage.Date,
                    TTL                = mediaMessage.TTL,
                    Status             = MessageStatus.Sending,
                    ReplyToRandomMsgId = mediaMessage.ReplyToRandomMsgId,
                    Reply              = mediaMessage.Reply,
                    GroupedId          = groupedId
                };
                message.SetMedia();

                for (var i = 0; i < messages.Count; i++)
                {
                    if (i % Constants.MaxGroupedMediaCount == 0)
                    {
                        if (messageMediaGroup.Group.Count > 0)
                        {
                            uploadService.AddGroup(message);
                            Items.Insert(0, message);
                        }

                        mediaMessage = messages[i].Item1 as TLDecryptedMessage73;
                        groupedId    = mediaMessage != null ? mediaMessage.GroupedId : null;

                        messageMediaGroup = new TLDecryptedMessageMediaGroup {
                            Group = new TLVector <TLDecryptedMessageBase>()
                        };
                        message = new TLDecryptedMessage73
                        {
                            Flags              = new TLInt(0),
                            Media              = messageMediaGroup,
                            Message            = TLString.Empty,
                            RandomId           = mediaMessage.RandomId,
                            RandomBytes        = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength),
                            ChatId             = mediaMessage.ChatId,
                            FromId             = mediaMessage.FromId,
                            Out                = mediaMessage.Out,
                            Unread             = mediaMessage.Unread,
                            Date               = mediaMessage.Date,
                            TTL                = mediaMessage.TTL,
                            Status             = MessageStatus.Sending,
                            ReplyToRandomMsgId = mediaMessage.ReplyToRandomMsgId,
                            Reply              = mediaMessage.Reply,
                            GroupedId          = groupedId
                        };
                        message.SetMedia();
                    }

                    messageMediaGroup.Group.Add(messages[i].Item1);
                }

                if (messageMediaGroup.Group.Count > 0)
                {
                    uploadService.AddGroup(message);
                    Items.Insert(0, message);
                }
            }
            else
            {
                foreach (var message in messages)
                {
                    Items.Insert(0, message.Item1);
                }
            }

            //IsEmptyDialog = Items.Count == 0 && (_messages == null || _messages.Count == 0) && LazyItems.Count == 0;
            Reply = null;

            RaiseScrollToBottom();
            NotifyOfPropertyChange(() => DescriptionVisibility);

            BeginOnThreadPool(() => CacheService.SyncDecryptedMessages(messages, Chat, callback.SafeInvoke));
        }