/// <summary> /// Add one RB Conversation in the ViewModel /// </summary> /// <param name="rbConversation">a Rainbow Conversation object</param> private void AddRBConversationToModel(Rainbow.Model.Conversation rbConversation) { if (rbConversation != null) { // Now add it to the model ConversationModel newConversation; newConversation = Helper.GetConversationFromRBConversation(rbConversation); if (newConversation != null) { newConversation.SelectionCommand = DynamicList.SelectedItemCommand; AddConversationToModel(newConversation); } } }
private void UpdateRBConversationToModel(Rainbow.Model.Conversation rbConversation) { // Ensure to be on Main UI Thread if (!MainThread.IsMainThread) { MainThread.BeginInvokeOnMainThread(() => UpdateRBConversationToModel(rbConversation)); return; } log.LogDebug("[UpdateRBConversationToModel] - IN"); if (rbConversation != null) { // Now add it to the model ConversationModel newConversation = Helper.GetConversationFromRBConversation(rbConversation); newConversation.SelectionCommand = DynamicList.SelectedItemCommand; ConversationModel oldConversation = GetConversationById(newConversation.Id); if (oldConversation == null) { AddConversationToModel(newConversation); } else { lock (lockObservableConversations) { Boolean needChangeOrder = (oldConversation.LastMessageDateTime != newConversation.LastMessageDateTime); oldConversation.Id = newConversation.Id; oldConversation.Peer = newConversation.Peer; oldConversation.NbMsgUnread = newConversation.NbMsgUnread; oldConversation.LastMessage = newConversation.LastMessage; oldConversation.LastMessageDateTime = newConversation.LastMessageDateTime; if (needChangeOrder) { int oldIndex = 0; int newIndex = -1; int nb = DynamicList.Items.Count; // Get old Index for (int i = 0; i < nb; i++) { if (DynamicList.Items[i].Id == oldConversation.Id) { oldIndex = i; break; } } // Try to update order only if are not already the first row if (oldIndex != 0) { // Get new Index for (int i = 0; i < nb; i++) { if (oldConversation.LastMessageDateTime.ToUniversalTime() > DynamicList.Items[i].LastMessageDateTime.ToUniversalTime()) { newIndex = i; break; } } // If we have found no new index, we need to move it to the end if (newIndex == -1) { newIndex = nb - 1; } // Update order only if indexes are different if (oldIndex != newIndex) { DynamicList.Items.Move(oldIndex, newIndex); } log.LogDebug("[UpdateRBConversationToModel] MOVED - oldIndex:[{0}] - newIndex:[{1}] - nb:[{2}] - TopDate:[{3}] - LastMessageDateTime:[{4}]", oldIndex, newIndex, nb, DynamicList.Items[0].LastMessageDateTime.ToString("o"), oldConversation.LastMessageDateTime.ToString("o")); } else { log.LogDebug("[UpdateRBConversationToModel] NOT MOVED - oldIndex:[{0}] - nb:[{1}] - TopDate:[{2}] - LastMessageDateTime:[{3}]", oldIndex, nb, DynamicList.Items[0].LastMessageDateTime.ToString("o"), oldConversation.LastMessageDateTime.ToString("o")); } } } // Check if we need to update the view due to DateTime purpose CheckIfUpdateModelForDateTimePurpose(newConversation.LastMessageDateTime); } } log.LogDebug("[UpdateRBConversationToModel] - OUT"); }