desktop chat now shows images
This commit is contained in:
@@ -14,6 +14,7 @@ public class MessageResponse {
|
|||||||
private Boolean isRead;
|
private Boolean isRead;
|
||||||
private String attachmentName;
|
private String attachmentName;
|
||||||
private String attachmentUrl;
|
private String attachmentUrl;
|
||||||
|
private String attachmentMimeType;
|
||||||
|
|
||||||
public MessageResponse() {
|
public MessageResponse() {
|
||||||
}
|
}
|
||||||
@@ -105,4 +106,12 @@ public class MessageResponse {
|
|||||||
public void setAttachmentUrl(String attachmentUrl) {
|
public void setAttachmentUrl(String attachmentUrl) {
|
||||||
this.attachmentUrl = attachmentUrl;
|
this.attachmentUrl = attachmentUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getAttachmentMimeType() {
|
||||||
|
return attachmentMimeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttachmentMimeType(String attachmentMimeType) {
|
||||||
|
this.attachmentMimeType = attachmentMimeType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import javafx.scene.layout.VBox;
|
|||||||
import javafx.scene.paint.ImagePattern;
|
import javafx.scene.paint.ImagePattern;
|
||||||
import javafx.scene.shape.Circle;
|
import javafx.scene.shape.Circle;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
|
import javafx.scene.image.ImageView;
|
||||||
import org.example.petshopdesktop.api.ChatRealtimeClient;
|
import org.example.petshopdesktop.api.ChatRealtimeClient;
|
||||||
import org.example.petshopdesktop.api.dto.chat.ConversationResponse;
|
import org.example.petshopdesktop.api.dto.chat.ConversationResponse;
|
||||||
import org.example.petshopdesktop.api.dto.chat.MessageRequest;
|
import org.example.petshopdesktop.api.dto.chat.MessageRequest;
|
||||||
@@ -539,10 +540,31 @@ public class ChatController {
|
|||||||
bubble.getChildren().add(content);
|
bubble.getChildren().add(content);
|
||||||
}
|
}
|
||||||
if (message.getAttachmentName() != null && !message.getAttachmentName().isBlank()) {
|
if (message.getAttachmentName() != null && !message.getAttachmentName().isBlank()) {
|
||||||
Label attachmentLabel = new Label("\uD83D\uDCCE " + message.getAttachmentName());
|
String mimeType = message.getAttachmentMimeType();
|
||||||
attachmentLabel.setStyle("-fx-text-fill: " + (mine ? "#dbeafe" : "#475569") + "; -fx-font-size: 12px;");
|
boolean isImage = mimeType != null && mimeType.startsWith("image/");
|
||||||
attachmentLabel.setWrapText(true);
|
if (isImage && message.getId() != null) {
|
||||||
bubble.getChildren().add(attachmentLabel);
|
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);
|
bubble.getChildren().add(timestamp);
|
||||||
|
|||||||
Reference in New Issue
Block a user