Example #1
0
        public override async Task RemoveAndClearDialog()
        {
            try {
                await ClearDialogHistory();

                if (dialog.peer.Constructor == Constructor.peerChat)
                {
                    InputPeer peer = InputPeer;
                    InputPeerChatConstructor peerChat = (InputPeerChatConstructor)peer;
                    InputUser user = TL.inputUserSelf();

                    messages_StatedMessage message =
                        await session.Api.messages_deleteChatUser(peerChat.chat_id, user);

                    switch (message.Constructor)
                    {
                    case Constructor.messages_statedMessage:
                        session.Updates.processUpdatePtsSeq(((Messages_statedMessageConstructor)message).pts, ((Messages_statedMessageConstructor)message).seq);
                        break;

                    case Constructor.messages_statedMessageLink:
                        session.Updates.processUpdatePtsSeq(((Messages_statedMessageLinkConstructor)message).pts, ((Messages_statedMessageLinkConstructor)message).seq);
                        break;
                    }
                }

                session.Dialogs.Model.Dialogs.Remove(this);
            }
            catch (Exception ex) {
                logger.error("exception: {0}", ex);
            }
        }
        public override void OnResponse(BinaryReader reader)
        {
            var code = reader.ReadUInt32();

            if (code != 0xd07ae726 && code != 0xa9af2881)
                throw new InvalidOperationException($"Expected Tl messages_StatedMessage type");

            StatedMessage = TL.Parse<messages_StatedMessage>(reader);
        }
Example #3
0
        public override void OnResponse(BinaryReader reader)
        {
            var code = reader.ReadUInt32();

            if (code != 0xd07ae726 && code != 0xa9af2881)
            {
                throw new InvalidOperationException($"Expected Tl messages_StatedMessage type");
            }

            StatedMessage = TL.Parse <messages_StatedMessage>(reader);
        }
Example #4
0
        public void Process(messages_StatedMessage statedMessage)
        {
            switch (statedMessage.Constructor)
            {
            case Constructor.messages_statedMessage:
                Process((Messages_statedMessageConstructor)statedMessage);
                break;

            case Constructor.messages_statedMessageLink:
                Process((Messages_statedMessageLinkConstructor)statedMessage);
                break;
            }
        }
Example #5
0
        private async Task DoCreateChat() {
            List<InputUser> inputUsers = new List<InputUser>();
            ObservableCollection<UserModel> users = SelectableUsers.GetUsers();

            foreach (var userModel in users) {
                if (userModel.IsCheckedInternal)
                    inputUsers.Add(TL.inputUserContact(userModel.Id));
            }

            messages_StatedMessage msg = await TelegramSession.Instance.Api.messages_createChat(inputUsers, ChatTitleEdit.ContentText.Text);
            TelegramSession.Instance.Updates.Process(msg);

            foreach (var userModel in SelectableUsers.GetUsers()) {
                userModel.IsCheckedInternal = false;
            }
        }
Example #6
0
        private async Task DoForwardMessages(InputPeer peer)
        {
            if (messageId.Count == 1)
            {
                messages_StatedMessage msg = await TelegramSession.Instance.Api.messages_forwardMessage(peer, messageId.First(),
                                                                                                        Helpers.GenerateRandomLong());

                TelegramSession.Instance.Updates.Process(msg);
            }
            else
            {
                messages_StatedMessages msgs = await TelegramSession.Instance.Api.messages_forwardMessages(peer, messageId);

                TelegramSession.Instance.Updates.Process(msgs);
            }
        }
Example #7
0
        public async Task SendMedia(InputMedia media)
        {
            try {
                long randomId = Helpers.GenerateRandomLong();

                // PHOTO IS HERE
                MessageModelUndelivered undeliveredMessage = new MessageModelUndelivered()
                {
                    MessageType = MessageModelUndelivered.Type.Text,
                    Text        = "",
                    Timestamp   = DateTime.Now,
                    RandomId    = randomId
                };

                ProcessNewMessage(undeliveredMessage);

                messages_StatedMessage sentMessage =
                    await session.Api.messages_sendMedia(InputPeer, media, randomId);

                Message message;
                int     pts, seq;
                if (sentMessage.Constructor == Constructor.messages_statedMessage)
                {
                    Messages_statedMessageConstructor sentMessageConstructor =
                        (Messages_statedMessageConstructor)sentMessage;

                    session.Updates.ProcessChats(sentMessageConstructor.chats);
                    session.Updates.ProcessUsers(sentMessageConstructor.users);

                    pts     = sentMessageConstructor.pts;
                    seq     = sentMessageConstructor.seq;
                    message = sentMessageConstructor.message;
                }
                else if (sentMessage.Constructor == Constructor.messages_statedMessageLink)
                {
                    Messages_statedMessageLinkConstructor statedMessageLink =
                        (Messages_statedMessageLinkConstructor)sentMessage;

                    session.Updates.ProcessChats(statedMessageLink.chats);
                    session.Updates.ProcessUsers(statedMessageLink.users);
                    // TODO: process links

                    pts     = statedMessageLink.pts;
                    seq     = statedMessageLink.seq;
                    message = statedMessageLink.message;
                }
                else
                {
                    logger.error("unknown messages_StatedMessage constructor");
                    return;
                }

                if (!session.Updates.processUpdatePtsSeq(pts, seq))
                {
                    logger.error("send media process updates failed");
                    messages.Remove(undeliveredMessage);
                    return;
                }

                TelegramSession.Instance.Dialogs.Model.UpDialog(this);

                int messageIndex = messages.IndexOf(undeliveredMessage);
                if (messageIndex != -1)
                {
                    MessageModel          messageModel = new MessageModelDelivered(message);
                    MessageModelDelivered newMessage   = (MessageModelDelivered)messageModel;
                    var selectedMessages = from msg in messages
                                           where msg is MessageModelDelivered && ((MessageModelDelivered)msg).Id == messageModel.Id
                                           select msg;
                    if (selectedMessages.Any())
                    {
                        messages.RemoveAt(messageIndex);
                    }
                    else
                    {
                        messages[messageIndex] =
                            new MessageModelDelivered(message);
                    }
                }
                else
                {
                    logger.error("not found undelivered message to confirmation");
                }
            }
            catch (Exception ex) {
                logger.error("Error sending media {0}", ex);
            }
        }
Example #8
0
 public void Process(messages_StatedMessage statedMessage) {
     switch(statedMessage.Constructor) {
         case Constructor.messages_statedMessage:
             Process((Messages_statedMessageConstructor)statedMessage);
             break;
         case Constructor.messages_statedMessageLink:
             Process((Messages_statedMessageLinkConstructor)statedMessage);
             break;
     }
 }