Beispiel #1
0
        public int ProcessDialogs(messages_Dialogs dialogsObject)
        {
            List <Dialog>  dialogsList;
            List <Message> messagesList;
            List <Chat>    chatsList;
            List <User>    usersList;

            switch (dialogsObject.Constructor)
            {
            case Constructor.messages_dialogs:
                dialogsList  = ((Messages_dialogsConstructor)dialogsObject).dialogs;
                messagesList = ((Messages_dialogsConstructor)dialogsObject).messages;
                chatsList    = ((Messages_dialogsConstructor)dialogsObject).chats;
                usersList    = ((Messages_dialogsConstructor)dialogsObject).users;
                break;

            case Constructor.messages_dialogsSlice:
                dialogsList  = ((Messages_dialogsSliceConstructor)dialogsObject).dialogs;
                messagesList = ((Messages_dialogsSliceConstructor)dialogsObject).messages;
                chatsList    = ((Messages_dialogsSliceConstructor)dialogsObject).chats;
                usersList    = ((Messages_dialogsSliceConstructor)dialogsObject).users;
                break;

            default:
                return(0);
            }

            logger.info("process dialogs: {0} dialogs, {1} messages, {2} chats, {3} users", dialogsList.Count, messagesList.Count, chatsList.Count, usersList.Count);

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

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

            Dictionary <int, MessageModel> messagesMap = new Dictionary <int, MessageModel>();

            foreach (var message in messagesList)
            {
                // FIXME: review
                var messageModel = new MessageModelDelivered(message);
                messagesMap.Add(messageModel.Id, messageModel);
            }

            foreach (Dialog dialog in dialogsList)
            {
                dialogs.Add(new DialogModelPlain(dialog, session, messagesMap));
            }

            return(dialogsList.Count);
        }
Beispiel #2
0
        public int ProcessDialogs(messages_Dialogs dialogsObject) {
            List<Dialog> dialogsList;
            List<Message> messagesList;
            List<Chat> chatsList;
            List<User> usersList;
            switch (dialogsObject.Constructor) {
                case Constructor.messages_dialogs:
                    dialogsList = ((Messages_dialogsConstructor)dialogsObject).dialogs;
                    messagesList = ((Messages_dialogsConstructor)dialogsObject).messages;
                    chatsList = ((Messages_dialogsConstructor)dialogsObject).chats;
                    usersList = ((Messages_dialogsConstructor)dialogsObject).users;
                    break;
                case Constructor.messages_dialogsSlice:
                    dialogsList = ((Messages_dialogsSliceConstructor)dialogsObject).dialogs;
                    messagesList = ((Messages_dialogsSliceConstructor)dialogsObject).messages;
                    chatsList = ((Messages_dialogsSliceConstructor)dialogsObject).chats;
                    usersList = ((Messages_dialogsSliceConstructor)dialogsObject).users;
                    break;
                default:
                    return 0;
            }

            logger.info("process dialogs: {0} dialogs, {1} messages, {2} chats, {3} users", dialogsList.Count, messagesList.Count, chatsList.Count, usersList.Count);

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

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

            Dictionary<int, MessageModel> messagesMap = new Dictionary<int, MessageModel>();

            foreach (var message in messagesList) {
                // FIXME: review
                var messageModel = new MessageModelDelivered(message);
                messagesMap.Add(messageModel.Id, messageModel);
            }

            foreach (Dialog dialog in dialogsList) {
                dialogs.Add(new DialogModelPlain(dialog, session, messagesMap));
            }

            return dialogsList.Count;
        }
Beispiel #3
0
        public async Task DialogsRequest()   // call it only on login!
        {
            DialogListModel newState = new DialogListModel(session);

            int offset = 0;

            while (true)
            {
                logger.info("request dialogs with offset {0}", offset);
                messages_Dialogs dialogsPart = await session.Api.messages_getDialogs(offset, 0, 100);

                offset += newState.ProcessDialogs(dialogsPart);

                if (dialogsPart.Constructor == Constructor.messages_dialogs)
                {
                    break;
                }
            }

            //model.Replace(newState);
            model = newState;
        }