Exemplo n.º 1
0
        public static object fetchMessages(string channelId, string currOldestMessageId, bool isFirstLoad)
        {
            return(new ThunkAction <AppState>((dispatcher, getState) => {
                return MessageApi.FetchMessages(channelId: channelId, currOldestMessageId: currOldestMessageId)
                .Then(messagesResponse => {
                    var messageIds = new List <string>();
                    var messageDict = new Dictionary <string, Message>();

                    var channelMessageList = getState().messageState.channelMessageList;
                    var channelMessageDict = getState().messageState.channelMessageDict;
                    if (channelMessageList.ContainsKey(channelId) && !isFirstLoad)
                    {
                        messageIds = channelMessageList[channelId];
                    }

                    if (channelMessageDict.ContainsKey(channelId) && !isFirstLoad)
                    {
                        messageDict = channelMessageDict[channelId];
                    }

                    var userMap = new Dictionary <string, User>();
                    messagesResponse.items.ForEach(message => {
                        if (message.deletedTime == null && message.type == "normal")
                        {
                            if (messageIds.Contains(message.id))
                            {
                                messageIds.Remove(message.id);
                            }

                            messageIds.Add(message.id);

                            if (messageDict.ContainsKey(message.id))
                            {
                                messageDict[message.id] = message;
                            }
                            else
                            {
                                messageDict.Add(message.id, message);
                            }
                        }

                        if (userMap.ContainsKey(message.author.id))
                        {
                            userMap[message.author.id] = message.author;
                        }
                        else
                        {
                            userMap.Add(message.author.id, message.author);
                        }
                    });
                    dispatcher.dispatch(new UserMapAction {
                        userMap = userMap
                    });
                    dispatcher.dispatch(new FetchMessagesSuccessAction {
                        isFirstLoad = isFirstLoad,
                        channelId = channelId,
                        messageIds = messageIds,
                        messageDict = messageDict,
                        hasMore = messagesResponse.hasMore,
                        currOldestMessageId = messagesResponse.currOldestMessageId
                    });
                })
                .Catch(error => {
                    dispatcher.dispatch(new FetchMessagesFailureAction());
                    Debuger.LogError(message: error);
                });
            }));
        }