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)); } }
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(); } }