From 89c706b893feadfd48ce1a30a0c454498dcfe278 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Tue, 7 Apr 2026 09:38:17 -0600 Subject: [PATCH] stabilize desktop chat --- .../controllers/ChatController.java | 74 ++++++++++--------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/ChatController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/ChatController.java index 99fed184..f9dc4940 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/ChatController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/ChatController.java @@ -5,7 +5,6 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.Button; -import javafx.scene.control.Hyperlink; import javafx.scene.control.Label; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; @@ -124,20 +123,28 @@ public class ChatController { @FXML void btnSendClicked() { - if (selectedConversation == null) { - lblChatStatus.setText("Select a conversation"); - return; - } + try { + if (selectedConversation == null) { + lblChatStatus.setText("Select a conversation"); + return; + } - String content = txtMessage.getText() == null ? "" : txtMessage.getText().trim(); - if (content.isEmpty()) { - return; - } + String content = txtMessage.getText() == null ? "" : txtMessage.getText().trim(); + if (content.isEmpty()) { + return; + } - txtMessage.clear(); - boolean sent = realtimeClient.sendMessage(selectedConversation.getId(), content); - if (!sent) { - sendMessageFallback(selectedConversation.getId(), content); + txtMessage.clear(); + boolean sent = realtimeClient.sendMessage(selectedConversation.getId(), content); + if (!sent) { + sendMessageFallback(selectedConversation.getId(), content); + } + } catch (Exception e) { + ActivityLogger.getInstance().logException( + "ChatController.btnSendClicked", + e, + "Sending chat message"); + lblChatStatus.setText("Chat send failed"); } } @@ -224,16 +231,30 @@ public class ChatController { private void renderMessages(List messages) { vbMessages.getChildren().clear(); for (MessageResponse message : messages) { - vbMessages.getChildren().add(createMessageBubble(message)); + try { + vbMessages.getChildren().add(createMessageBubble(message)); + } catch (Exception e) { + ActivityLogger.getInstance().logException( + "ChatController.renderMessages", + e, + "Rendering chat message"); + } } scrollMessagesToBottom(); } private void appendMessageIfSelected(MessageResponse message) { - upsertConversationForMessage(message); - if (selectedConversation != null && selectedConversation.getId().equals(message.getConversationId())) { - vbMessages.getChildren().add(createMessageBubble(message)); - scrollMessagesToBottom(); + try { + upsertConversationForMessage(message); + if (selectedConversation != null && selectedConversation.getId().equals(message.getConversationId())) { + vbMessages.getChildren().add(createMessageBubble(message)); + scrollMessagesToBottom(); + } + } catch (Exception e) { + ActivityLogger.getInstance().logException( + "ChatController.appendMessageIfSelected", + e, + "Appending chat message"); } } @@ -306,10 +327,9 @@ public class ChatController { if (message.getAttachmentSizeBytes() != null && message.getAttachmentSizeBytes() > 0) { attachmentLabel = attachmentLabel + " (" + formatSize(message.getAttachmentSizeBytes()) + ")"; } - Hyperlink attachment = new Hyperlink(attachmentLabel); + Label attachment = new Label(attachmentLabel); attachment.setWrapText(true); - attachment.setOnAction(event -> openAttachment(message.getAttachmentUrl())); - attachment.setStyle("-fx-text-fill: " + (mine ? "#dbeafe" : "#0f766e") + ";"); + attachment.setStyle("-fx-text-fill: " + (mine ? "#dbeafe" : "#0f766e") + "; -fx-underline: true;"); bubble.getChildren().add(attachment); } @@ -368,18 +388,6 @@ public class ChatController { private void scrollMessagesToBottom() { Platform.runLater(() -> spMessages.setVvalue(1.0)); } - - private void openAttachment(String url) { - try { - java.awt.Desktop.getDesktop().browse(java.net.URI.create(url)); - } catch (Exception e) { - ActivityLogger.getInstance().logException( - "ChatController.openAttachment", - e, - "Opening chat attachment"); - } - } - private String formatSize(Long bytes) { if (bytes == null || bytes <= 0) { return "";