fixed chat messaging on same account with different devices
This commit is contained in:
@@ -470,10 +470,8 @@ public class ChatFragment extends Fragment implements ChatAdapter.OnChatClickLis
|
|||||||
public void onMessageReceived(MessageDTO dto) {
|
public void onMessageReceived(MessageDTO dto) {
|
||||||
requireActivity().runOnUiThread(() -> {
|
requireActivity().runOnUiThread(() -> {
|
||||||
if (activeConversationId != null && activeConversationId.equals(dto.getConversationId())) {
|
if (activeConversationId != null && activeConversationId.equals(dto.getConversationId())) {
|
||||||
if (!tokenManager.getUserId().equals(dto.getSenderId())) {
|
|
||||||
viewModel.addMessageLocally(dto);
|
viewModel.addMessageLocally(dto);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
viewModel.updateConversationLocally(new ConversationDTO(dto.getConversationId(), 0L, 0L, dto.getContent(), ""));
|
viewModel.updateConversationLocally(new ConversationDTO(dto.getConversationId(), 0L, 0L, dto.getContent(), ""));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,6 +133,11 @@ public class ChatListViewModel extends ViewModel {
|
|||||||
|
|
||||||
public void addMessageLocally(MessageDTO dto) {
|
public void addMessageLocally(MessageDTO dto) {
|
||||||
List<Message> current = new ArrayList<>(messageList.getValue());
|
List<Message> current = new ArrayList<>(messageList.getValue());
|
||||||
|
if (dto.getId() != null) {
|
||||||
|
for (Message m : current) {
|
||||||
|
if (dto.getId().equals(m.getId())) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
current.add(dtoToModel(dto));
|
current.add(dtoToModel(dto));
|
||||||
messageList.setValue(current);
|
messageList.setValue(current);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ public class StompChatManager {
|
|||||||
headers.put("Authorization", "Bearer " + authToken);
|
headers.put("Authorization", "Bearer " + authToken);
|
||||||
|
|
||||||
stompClient = Stomp.over(Stomp.ConnectionProvider.OKHTTP, webSocketUrl, headers);
|
stompClient = Stomp.over(Stomp.ConnectionProvider.OKHTTP, webSocketUrl, headers);
|
||||||
|
stompClient.withClientHeartbeat(0).withServerHeartbeat(0);
|
||||||
|
|
||||||
compositeDisposable.add(
|
compositeDisposable.add(
|
||||||
stompClient.lifecycle()
|
stompClient.lifecycle()
|
||||||
|
|||||||
@@ -35,9 +35,11 @@ import java.io.File;
|
|||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class ChatController {
|
public class ChatController {
|
||||||
@@ -87,6 +89,7 @@ public class ChatController {
|
|||||||
private final ObservableList<ConversationResponse> activeConversations = FXCollections.observableArrayList();
|
private final ObservableList<ConversationResponse> activeConversations = FXCollections.observableArrayList();
|
||||||
private final ObservableList<ConversationResponse> closedConversations = FXCollections.observableArrayList();
|
private final ObservableList<ConversationResponse> closedConversations = FXCollections.observableArrayList();
|
||||||
private final Map<Long, String> customerLabels = new HashMap<>();
|
private final Map<Long, String> customerLabels = new HashMap<>();
|
||||||
|
private final Set<Long> renderedMessageIds = new HashSet<>();
|
||||||
private final ChatRealtimeClient realtimeClient = ChatRealtimeClient.getInstance();
|
private final ChatRealtimeClient realtimeClient = ChatRealtimeClient.getInstance();
|
||||||
private ConversationResponse selectedConversation;
|
private ConversationResponse selectedConversation;
|
||||||
private File selectedAttachmentFile;
|
private File selectedAttachmentFile;
|
||||||
@@ -131,12 +134,7 @@ public class ChatController {
|
|||||||
});
|
});
|
||||||
|
|
||||||
realtimeClient.setConversationListener(conversation -> Platform.runLater(() -> upsertConversation(conversation)));
|
realtimeClient.setConversationListener(conversation -> Platform.runLater(() -> upsertConversation(conversation)));
|
||||||
realtimeClient.setMessageListener(message -> Platform.runLater(() -> {
|
realtimeClient.setMessageListener(message -> Platform.runLater(() -> appendMessageIfSelected(message)));
|
||||||
Long myId = UserSession.getInstance().getUserId();
|
|
||||||
if (message.getSenderId() == null || !message.getSenderId().equals(myId)) {
|
|
||||||
appendMessageIfSelected(message);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
realtimeClient.setStatusListener(status -> Platform.runLater(() -> lblChatStatus.setText(status)));
|
realtimeClient.setStatusListener(status -> Platform.runLater(() -> lblChatStatus.setText(status)));
|
||||||
realtimeClient.subscribeToConversations();
|
realtimeClient.subscribeToConversations();
|
||||||
|
|
||||||
@@ -419,9 +417,11 @@ public class ChatController {
|
|||||||
|
|
||||||
private void renderMessages(List<MessageResponse> messages) {
|
private void renderMessages(List<MessageResponse> messages) {
|
||||||
vbMessages.getChildren().clear();
|
vbMessages.getChildren().clear();
|
||||||
|
renderedMessageIds.clear();
|
||||||
for (MessageResponse message : messages) {
|
for (MessageResponse message : messages) {
|
||||||
try {
|
try {
|
||||||
vbMessages.getChildren().add(createMessageBubble(message));
|
vbMessages.getChildren().add(createMessageBubble(message));
|
||||||
|
if (message.getId() != null) renderedMessageIds.add(message.getId());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ActivityLogger.getInstance().logException(
|
ActivityLogger.getInstance().logException(
|
||||||
"ChatController.renderMessages",
|
"ChatController.renderMessages",
|
||||||
@@ -436,7 +436,11 @@ public class ChatController {
|
|||||||
try {
|
try {
|
||||||
upsertConversationForMessage(message);
|
upsertConversationForMessage(message);
|
||||||
if (selectedConversation != null && selectedConversation.getId().equals(message.getConversationId())) {
|
if (selectedConversation != null && selectedConversation.getId().equals(message.getConversationId())) {
|
||||||
|
if (message.getId() != null && renderedMessageIds.contains(message.getId())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
vbMessages.getChildren().add(createMessageBubble(message));
|
vbMessages.getChildren().add(createMessageBubble(message));
|
||||||
|
if (message.getId() != null) renderedMessageIds.add(message.getId());
|
||||||
scrollMessagesToBottom();
|
scrollMessagesToBottom();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user