Example #1
0
        internal Conversation(ConversationState conversationState)
        {
            _synchronizationContext = Client.CurrentSynchronizationContext;

            _conversation = conversationState.conversation;
            if (_conversation.read_state.Count > 0)
            {
                ReadState = _conversation.read_state.Last(c => c.latest_read_timestamp > 0).latest_read_timestamp.FromUnixTime();
            }
            if (_conversation.self_conversation_state.self_read_state != null)
            {
                SelfReadState = _conversation.self_conversation_state.self_read_state.latest_read_timestamp.FromUnixTime();
            }
            Participants    = _conversation.participant_data.ToDictionary(c => c.id.chat_id, c => new Participant(c));
            MessagesHistory = new ObservableCollection <Message>();

            foreach (var cse in conversationState.events.Where(c => c.chat_message != null))
            {
                messagesIds.Add(cse.event_id, cse.timestamp);
                if (_lastMessage != null && _lastMessage.SenderId == cse.sender_id.gaia_id)
                {
                    _lastMessage.AddContent(cse);
                }
                else
                {
                    _lastMessage = new Message(cse);
                    MessagesHistory.Add(_lastMessage);
                }
            }
        }
Example #2
0
        internal void AddOldMessages(List <Event> events)
        {
            _synchronizationContext.Post((obj) =>
            {
                IEnumerable <Event> orderedEvents = ((List <Event>)obj).OrderByDescending(c => c.timestamp);
                Message current = MessagesHistory.First();
                // hangout return all messages
                foreach (Event e in orderedEvents)
                {
                    if (messagesIds.ContainsKey(e.event_id))
                    {
                        continue;
                    }

                    messagesIds.Add(e.event_id, e.timestamp);
                    if (current.SenderId == e.sender_id.chat_id)
                    {
                        current.AddContent(e, true);
                    }
                    else
                    {
                        current = new Message(e);
                        MessagesHistory.Insert(0, current);
                    }
                }
            }, events);
        }