コード例 #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);
        }
コード例 #2
0
        public Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject> GetDecryptedMessageAndObject(TLString text, TLDecryptedMessageMediaBase media, TLEncryptedChat chat, bool delaySeq = false)
        {
            TLDecryptedMessageBase decryptedMessage;
            TLObject decryptedObject;

            var randomId = TLLong.Random();

            var encryptedChat17 = chat as TLEncryptedChat17;

            if (encryptedChat17 != null)
            {
                var cachedEncryptedChat17 = (TLEncryptedChat17)CacheService.GetEncryptedChat(encryptedChat17.Id);

                TLInt inSeqNo;
                TLInt outSeqNo;
                if (!delaySeq)
                {
                    inSeqNo  = TLUtils.GetInSeqNo(MTProtoService.CurrentUserId, cachedEncryptedChat17);
                    outSeqNo = TLUtils.GetOutSeqNo(MTProtoService.CurrentUserId, cachedEncryptedChat17);

                    cachedEncryptedChat17.RawOutSeqNo = new TLInt(cachedEncryptedChat17.RawOutSeqNo.Value + 1);
                }
                else
                {
                    inSeqNo  = new TLInt(-1);
                    outSeqNo = new TLInt(-1);
                }

                TLDecryptedMessageBase decryptedMessageBase;

                if (encryptedChat17.Layer.Value >= 73)
                {
                    decryptedMessageBase = new TLDecryptedMessage73
                    {
                        Flags       = new TLInt(0),
                        Media       = media,
                        Message     = text,
                        RandomId    = randomId,
                        RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength),
                        //Entities = new TLVector<TLMessageEntityBase>(),
                        //ViaBotName = TLString.Empty,
                        //ReplyToRandomMsgId = new TLLong(0),

                        ChatId = chat.Id,
                        FromId = new TLInt(StateService.CurrentUserId),
                        Out    = new TLBool(true),
                        Unread = new TLBool(true),
                        Date   = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now),
                        Status = MessageStatus.Sending,

                        TTL      = chat.MessageTTL ?? new TLInt(0),
                        InSeqNo  = inSeqNo,
                        OutSeqNo = outSeqNo
                    };
                    media.TTLSeconds = decryptedMessageBase.TTL;

                    if (!(media is TLDecryptedMessageMediaEmpty))
                    {
                        ((TLDecryptedMessage45)decryptedMessageBase).SetMedia();
                    }
                }
                else if (encryptedChat17.Layer.Value >= 45)
                {
                    decryptedMessageBase = new TLDecryptedMessage45
                    {
                        Flags       = new TLInt(0),
                        Media       = media,
                        Message     = text,
                        RandomId    = randomId,
                        RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength),
                        //Entities = new TLVector<TLMessageEntityBase>(),
                        //ViaBotName = TLString.Empty,
                        //ReplyToRandomMsgId = new TLLong(0),

                        ChatId = chat.Id,
                        FromId = new TLInt(StateService.CurrentUserId),
                        Out    = new TLBool(true),
                        Unread = new TLBool(true),
                        Date   = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now),
                        Status = MessageStatus.Sending,

                        TTL      = chat.MessageTTL ?? new TLInt(0),
                        InSeqNo  = inSeqNo,
                        OutSeqNo = outSeqNo
                    };

                    if (!(media is TLDecryptedMessageMediaEmpty))
                    {
                        ((TLDecryptedMessage45)decryptedMessageBase).SetMedia();
                    }
                }
                else
                {
                    decryptedMessageBase = new TLDecryptedMessage17
                    {
                        Media       = media,
                        Message     = text,
                        RandomId    = randomId,
                        RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength),

                        ChatId = chat.Id,
                        FromId = new TLInt(StateService.CurrentUserId),
                        Out    = new TLBool(true),
                        Unread = new TLBool(true),
                        Date   = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now),
                        Status = MessageStatus.Sending,

                        TTL      = chat.MessageTTL ?? new TLInt(0),
                        InSeqNo  = inSeqNo,
                        OutSeqNo = outSeqNo
                    };
                }

                var decryptedMessageLayer17 = TLUtils.GetDecryptedMessageLayer(encryptedChat17.Layer, inSeqNo, outSeqNo, decryptedMessageBase);

                decryptedMessage = decryptedMessageBase;
                decryptedObject  = decryptedMessageLayer17;
            }
            else
            {
                var decryptedMessage8 = new TLDecryptedMessage
                {
                    Media       = media,
                    Message     = text,
                    RandomId    = randomId,
                    RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength),

                    ChatId = chat.Id,
                    FromId = new TLInt(StateService.CurrentUserId),
                    Out    = new TLBool(true),
                    Unread = new TLBool(true),
                    Date   = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now),
                    Status = MessageStatus.Sending,

                    TTL = chat.MessageTTL
                };

                decryptedMessage = decryptedMessage8;
                decryptedObject  = decryptedMessage;
            }

            return(new Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject>(decryptedMessage, decryptedObject));
        }
コード例 #3
0
        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));
        }