From 017ef65b5ac61ba2a28af28198406c70561c7ecf Mon Sep 17 00:00:00 2001 From: Alex <78383757+Lextical@users.noreply.github.com> Date: Wed, 15 Apr 2026 00:00:17 -0600 Subject: [PATCH] desktop chat now shows images --- .../api/dto/chat/MessageResponse.java | 9 ++++++ .../controllers/ChatController.java | 30 ++++++++++++++++--- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/desktop/src/main/java/org/example/petshopdesktop/api/dto/chat/MessageResponse.java b/desktop/src/main/java/org/example/petshopdesktop/api/dto/chat/MessageResponse.java index 3432a918..7aecada0 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/api/dto/chat/MessageResponse.java +++ b/desktop/src/main/java/org/example/petshopdesktop/api/dto/chat/MessageResponse.java @@ -14,6 +14,7 @@ public class MessageResponse { private Boolean isRead; private String attachmentName; private String attachmentUrl; + private String attachmentMimeType; public MessageResponse() { } @@ -105,4 +106,12 @@ public class MessageResponse { public void setAttachmentUrl(String attachmentUrl) { this.attachmentUrl = attachmentUrl; } + + public String getAttachmentMimeType() { + return attachmentMimeType; + } + + public void setAttachmentMimeType(String attachmentMimeType) { + this.attachmentMimeType = attachmentMimeType; + } } 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 c746db2e..bf28085d 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/ChatController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/ChatController.java @@ -19,6 +19,7 @@ import javafx.scene.layout.VBox; import javafx.scene.paint.ImagePattern; import javafx.scene.shape.Circle; import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import org.example.petshopdesktop.api.ChatRealtimeClient; import org.example.petshopdesktop.api.dto.chat.ConversationResponse; import org.example.petshopdesktop.api.dto.chat.MessageRequest; @@ -539,10 +540,31 @@ public class ChatController { bubble.getChildren().add(content); } if (message.getAttachmentName() != null && !message.getAttachmentName().isBlank()) { - Label attachmentLabel = new Label("\uD83D\uDCCE " + message.getAttachmentName()); - attachmentLabel.setStyle("-fx-text-fill: " + (mine ? "#dbeafe" : "#475569") + "; -fx-font-size: 12px;"); - attachmentLabel.setWrapText(true); - bubble.getChildren().add(attachmentLabel); + String mimeType = message.getAttachmentMimeType(); + boolean isImage = mimeType != null && mimeType.startsWith("image/"); + if (isImage && message.getId() != null) { + ImageView imageView = new ImageView(); + imageView.setFitWidth(280); + imageView.setFitHeight(280); + imageView.setPreserveRatio(true); + imageView.setSmooth(true); + bubble.getChildren().add(imageView); + String attachmentPath = "/api/v1/chat/messages/" + message.getId() + "/attachment"; + new Thread(() -> { + try { + byte[] bytes = ApiClient.getInstance().getBytes(attachmentPath); + Image img = new Image(new java.io.ByteArrayInputStream(bytes)); + if (!img.isError()) { + Platform.runLater(() -> imageView.setImage(img)); + } + } catch (Exception ignored) {} + }).start(); + } else { + Label attachmentLabel = new Label("\uD83D\uDCCE " + message.getAttachmentName()); + attachmentLabel.setStyle("-fx-text-fill: " + (mine ? "#dbeafe" : "#475569") + "; -fx-font-size: 12px;"); + attachmentLabel.setWrapText(true); + bubble.getChildren().add(attachmentLabel); + } } bubble.getChildren().add(timestamp);