Esempio n. 1
0
        private async Task MessagesRequest()
        {
            messages_Messages loadedMessages = await session.Api.messages_getHistory(TLStuff.PeerToInputPeer(dialog.peer), 0, -1, 100);

            List <Message> messagesList;
            List <Chat>    chatsList;
            List <User>    usersList;

            switch (loadedMessages.Constructor)
            {
            case Constructor.messages_messages:
                chatsList    = ((Messages_messagesConstructor)loadedMessages).chats;
                messagesList = ((Messages_messagesConstructor)loadedMessages).messages;
                usersList    = ((Messages_messagesConstructor)loadedMessages).users;
                break;

            case Constructor.messages_messagesSlice:
                chatsList    = ((Messages_messagesSliceConstructor)loadedMessages).chats;
                messagesList = ((Messages_messagesSliceConstructor)loadedMessages).messages;
                usersList    = ((Messages_messagesSliceConstructor)loadedMessages).users;
                break;

            default:
                return;
            }


            foreach (var user in usersList)
            {
                session.SaveUser(user);
            }

            foreach (var chat in chatsList)
            {
                session.SaveChat(chat);
            }

            foreach (var message in messagesList)
            {
                messages.Add(new MessageModelDelivered(message));
            }
        }
Esempio n. 2
0
        public void ProcessNewMessage(Message message)
        {
            logger.info("process new message: {0}", message);
            MessageModelDelivered messageModel = new MessageModelDelivered(message);
            Peer targetPeer = messageModel.Peer;

            DialogModel targetDialogModel = null;

            foreach (DialogModel dialogModel in dialogs)
            {
                if (!dialogModel.IsEncrypted && TLStuff.PeerEquals(dialogModel.Peer, targetPeer))
                {
                    targetDialogModel = dialogModel;
                    break;
                }
            }

            if (targetDialogModel == null)
            {
                logger.info("target dialog not found, creating new...");
                targetDialogModel = new DialogModelPlain(messageModel, session);
                dialogs.Insert(0, targetDialogModel);
            }
            else
            {
                logger.info("target dialog found, rearrange...");
                UpDialog(targetDialogModel);
            }

            targetDialogModel.ProcessNewMessage(messageModel);

            if (targetDialogModel == TelegramSession.Instance.Dialogs.OpenedDialog)
            {
                targetDialogModel.OpenedRead();
            }
        }