presenter: fixed edited chat message to slide conversion

This commit is contained in:
Alex Andres 2024-04-18 12:42:21 +02:00
parent af82092ccb
commit 9a31df9413
No known key found for this signature in database
GPG key ID: 340764C7851D7041
5 changed files with 91 additions and 97 deletions

View file

@ -358,13 +358,13 @@ public class SlidesPresenter extends Presenter<SlidesView> {
PresenterContext presenterContext = (PresenterContext) context;
if(message.isDeleted()) {
if (message.isDeleted()) {
onDiscardMessage(message);
view.removeMessengerMessage(message.getMessageId());
return;
}
if(message.isEdited()) {
if (message.isEdited()) {
view.setModifiedMessengerMessage(message);
MessageUtil.updateOutdatedMessage(presenterContext.getMessengerMessages(), message);
MessageUtil.updateOutdatedMessage(presenterContext.getAllReceivedMessengerMessages(), message);
@ -374,7 +374,7 @@ public class SlidesPresenter extends Presenter<SlidesView> {
presenterContext.getMessengerMessages().add(message);
presenterContext.getAllReceivedMessengerMessages().add(message);
if(MessageUtil.isReply(message)) {
if (MessageUtil.isReply(message)) {
final MessengerMessage messageToReplyTo = MessageUtil.findMessageToReplyTo(
((PresenterContext) context).getAllReceivedMessengerMessages(),
message);
@ -384,6 +384,7 @@ public class SlidesPresenter extends Presenter<SlidesView> {
view.setMessengerMessage(message);
}
}
@Subscribe
public void onEvent(SpeechRequestMessage message) {
requireNonNull(message);

View file

@ -37,8 +37,6 @@ import org.lecturestudio.swing.components.MessageView;
import org.lecturestudio.swing.components.SpeechRequestView;
import org.lecturestudio.swing.util.SwingUtils;
import org.lecturestudio.swing.view.SwingView;
import org.lecturestudio.web.api.message.MessengerDirectMessage;
import org.lecturestudio.web.api.message.MessengerDirectMessageAsReply;
import org.lecturestudio.web.api.message.MessengerMessage;
import org.lecturestudio.web.api.message.SpeechRequestMessage;
import org.lecturestudio.web.api.message.util.MessageUtil;
@ -69,23 +67,11 @@ public class SwingMessengerWindow extends JFrame implements MessengerWindow {
UserInfo userInfo = userPrivilegeService.getUserInfo();
MessageView messageView = ViewUtil.createMessageView(MessageView.class, userInfo, message, dict);
messageView.setMessage(message.getMessage().getText(), message.getMessageId());
messageView.setMessage(message, userInfo);
messageView.setOnDiscard(() -> {
removeMessageView(messageView);
});
if (message instanceof MessengerDirectMessage) {
MessengerDirectMessage directMessage = (MessengerDirectMessage) message;
String recipient = directMessage.getRecipientId();
if (recipient.equals("organisers")) {
messageView.setPrivateText(dict.get("text.message.to.organisators"));
}
else {
messageView.setPrivateText(dict.get("text.message.privately"));
}
}
messageView.pack();
messageViewContainer.add(messageView);
@ -99,8 +85,7 @@ public class SwingMessengerWindow extends JFrame implements MessengerWindow {
UserInfo userInfo = userPrivilegeService.getUserInfo();
MessageAsReplyView messageView = ViewUtil.createMessageView(MessageAsReplyView.class, userInfo, message, dict);
messageView.setMessage(message.getMessage().getText(), message.getMessageId());
messageView.setMessage(message, userInfo);
final String userToReplyTo = MessageUtil.evaluateSenderOfMessageToReplyTo(messageToReplyTo, userInfo, dict);
messageView.setUserToReplyTo(userToReplyTo);
@ -109,17 +94,6 @@ public class SwingMessengerWindow extends JFrame implements MessengerWindow {
removeMessageView(messageView);
});
if (message instanceof MessengerDirectMessageAsReply directMessageAsReply) {
String recipient = directMessageAsReply.getRecipientId();
if (recipient.equals("organisers")) {
messageView.setPrivateText(dict.get("text.message.to.organisators"));
}
else {
messageView.setPrivateText(dict.get("text.message.privately"));
}
}
messageView.pack();
messageViewContainer.add(messageView);
@ -132,9 +106,13 @@ public class SwingMessengerWindow extends JFrame implements MessengerWindow {
SwingUtils.invoke(() -> {
final Optional<MessageView> toModify = findCorrespondingMessageView(modifiedMessage.getMessageId());
if(toModify.isEmpty()) return;
if (toModify.isEmpty()) {
return;
}
toModify.get().setMessage(modifiedMessage.getMessage().getText(), modifiedMessage.getMessageId());
UserInfo userInfo = userPrivilegeService.getUserInfo();
toModify.get().setMessage(modifiedMessage, userInfo);
toModify.get().setIsEdited();
});
}

View file

@ -39,7 +39,6 @@ import javax.swing.event.AncestorListener;
import javax.swing.plaf.basic.BasicSplitPaneDivider;
import javax.swing.plaf.basic.BasicSplitPaneUI;
import javax.swing.text.JTextComponent;
import javax.swing.text.html.Option;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
@ -51,7 +50,6 @@ import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
@ -116,8 +114,6 @@ import org.lecturestudio.swing.view.SwingView;
import org.lecturestudio.swing.view.ViewPostConstruct;
import org.lecturestudio.web.api.event.PeerStateEvent;
import org.lecturestudio.web.api.event.RemoteVideoFrameEvent;
import org.lecturestudio.web.api.message.MessengerDirectMessage;
import org.lecturestudio.web.api.message.MessengerDirectMessageAsReply;
import org.lecturestudio.web.api.message.MessengerMessage;
import org.lecturestudio.web.api.message.SpeechBaseMessage;
import org.lecturestudio.web.api.message.util.MessageUtil;
@ -749,41 +745,20 @@ public class SwingSlidesView extends JPanel implements SlidesView {
public void setMessengerMessage(MessengerMessage message) {
SwingUtils.invoke(() -> {
UserInfo userInfo = userPrivilegeService.getUserInfo();
String myId = userInfo.getUserId();
MessageView messageView = ViewUtil.createMessageView(MessageView.class, userInfo, message, dict);
messageView.setMessage(message.getMessage().getText(), message.getMessageId());
messageView.setMessage(message, userInfo);
messageView.setOnDiscard(() -> {
executeAction(discardMessageAction, message);
executeAction(discardMessageAction, messageView.getMessage());
removeMessageView(messageView);
});
messageView.setOnCreateSlide(() -> {
createMessageSlideAction.execute(message);
createMessageSlideAction.execute(messageView.getMessage());
removeMessageView(messageView);
});
if (message instanceof MessengerDirectMessage directMessage) {
String recipientId = directMessage.getRecipientId();
boolean byMe = Objects.equals(message.getUserId(), myId);
boolean toMe = Objects.equals(recipientId, myId);
boolean toOrganisers = Objects.equals(recipientId, "organisers");
String sender = byMe
? dict.get("text.message.me")
: String.format("%s %s", message.getFirstName(), message.getFamilyName());
String recipient = toMe
? dict.get("text.message.to.me")
: toOrganisers
? dict.get("text.message.to.organisators.short")
: String.format("%s %s", directMessage.getRecipientFirstName(), directMessage.getRecipientFamilyName());
messageView.setUserName(MessageFormat.format(dict.get("text.message.recipient"), sender, ""));
messageView.setPrivateText(recipient);
}
messageView.pack();
addMessageView(messageView);
@ -794,11 +769,9 @@ public class SwingSlidesView extends JPanel implements SlidesView {
public void setMessengerMessageAsReply(MessengerMessage message, MessengerMessage messageToReplyTo) {
SwingUtils.invoke(() -> {
UserInfo userInfo = userPrivilegeService.getUserInfo();
String myId = userInfo.getUserId();
MessageAsReplyView messageView = ViewUtil.createMessageView(MessageAsReplyView.class, userInfo, message, dict);
messageView.setMessage(message.getMessage().getText(), message.getMessageId());
messageView.setMessage(message, userInfo);
final String userToReplyTo = MessageUtil.evaluateSenderOfMessageToReplyTo(messageToReplyTo, userInfo, dict);
messageView.setUserToReplyTo(userToReplyTo);
@ -814,26 +787,6 @@ public class SwingSlidesView extends JPanel implements SlidesView {
removeMessageView(messageView);
});
if (message instanceof MessengerDirectMessageAsReply directMessageAsReply) {
String recipientId = directMessageAsReply.getRecipientId();
boolean byMe = Objects.equals(message.getUserId(), myId);
boolean toMe = Objects.equals(recipientId, myId);
boolean toOrganisers = Objects.equals(recipientId, "organisers");
String sender = byMe
? dict.get("text.message.me")
: String.format("%s %s", message.getFirstName(), message.getFamilyName());
String recipient = toMe
? dict.get("text.message.to.me")
: toOrganisers
? dict.get("text.message.to.organisators.short")
: String.format("%s %s", directMessageAsReply.getRecipientFirstName(), directMessageAsReply.getRecipientFamilyName());
messageView.setUserName(MessageFormat.format(dict.get("text.message.recipient"), sender, ""));
messageView.setPrivateText(recipient);
}
messageView.pack();
addMessageView(messageView);
@ -845,9 +798,13 @@ public class SwingSlidesView extends JPanel implements SlidesView {
SwingUtils.invoke(() -> {
final Optional<MessageView> toModify = findCorrespondingMessageView(modifiedMessage.getMessageId());
if(toModify.isEmpty()) return;
if (toModify.isEmpty()){
return;
}
toModify.get().setMessage(modifiedMessage.getMessage().getText(), modifiedMessage.getMessageId());
UserInfo userInfo = userPrivilegeService.getUserInfo();
toModify.get().setMessage(modifiedMessage, userInfo);
toModify.get().setIsEdited();
});
}

View file

@ -23,6 +23,8 @@ import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.text.MessageFormat;
import java.util.Objects;
import javax.swing.BorderFactory;
import javax.swing.Box;
@ -34,24 +36,80 @@ import org.lecturestudio.core.app.dictionary.Dictionary;
import org.lecturestudio.core.view.Action;
import org.lecturestudio.swing.AwtResourceLoader;
import org.lecturestudio.swing.util.SwingUtils;
import org.lecturestudio.web.api.message.MessengerDirectMessage;
import org.lecturestudio.web.api.message.MessengerDirectMessageAsReply;
import org.lecturestudio.web.api.message.MessengerMessage;
import org.lecturestudio.web.api.model.UserInfo;
public class MessageView extends MessagePanel {
private JButton discardButton;
private MessengerMessage message;
protected JTextArea textArea;
private JButton discardButton;
private JButton createSlideButton;
private String messageId;
protected JTextArea textArea;
public MessageView(Dictionary dict) {
super(dict);
}
public void setMessage(String message, String correspondingMessageId) {
textArea.setText(message);
this.messageId = correspondingMessageId;
public MessengerMessage getMessage() {
return message;
}
public void setMessage(MessengerMessage message, UserInfo userInfo) {
this.message = message;
textArea.setText(message.getMessage().getText());
messageId = message.getMessageId();
if (message instanceof MessengerDirectMessage directMessage) {
String myId = userInfo.getUserId();
String recipientId = directMessage.getRecipientId();
boolean byMe = Objects.equals(message.getUserId(), myId);
boolean toMe = Objects.equals(recipientId, myId);
boolean toOrganisers = Objects.equals(recipientId, "organisers");
String sender = byMe
? dict.get("text.message.me")
: String.format("%s %s", message.getFirstName(), message.getFamilyName());
String recipient = toMe
? dict.get("text.message.to.me")
: toOrganisers
? dict.get("text.message.to.organisators.short")
: String.format("%s %s", directMessage.getRecipientFirstName(), directMessage.getRecipientFamilyName());
setUserName(MessageFormat.format(dict.get("text.message.recipient"), sender, ""));
setPrivateText(recipient);
}
if (message instanceof MessengerDirectMessageAsReply directMessageAsReply) {
String myId = userInfo.getUserId();
String recipientId = directMessageAsReply.getRecipientId();
boolean byMe = Objects.equals(message.getUserId(), myId);
boolean toMe = Objects.equals(recipientId, myId);
boolean toOrganisers = Objects.equals(recipientId, "organisers");
String sender = byMe
? dict.get("text.message.me")
: String.format("%s %s", message.getFirstName(), message.getFamilyName());
String recipient = toMe
? dict.get("text.message.to.me")
: toOrganisers
? dict.get("text.message.to.organisators.short")
: String.format("%s %s", directMessageAsReply.getRecipientFirstName(), directMessageAsReply.getRecipientFamilyName());
setUserName(MessageFormat.format(dict.get("text.message.recipient"), sender, ""));
setPrivateText(recipient);
}
}
public void setPrivateText(String text) {

View file

@ -57,12 +57,12 @@ public class MessageUtil {
}
public static void updateOutdatedMessage(final List<MessengerMessage> messages, final MessengerMessage newMessage) {
for(MessengerMessage message : messages) {
if(message.getMessageId().equals(newMessage.getMessageId())) {
messages.remove(message);
messages.add(newMessage);
}
}
for (MessengerMessage message : messages) {
if (message.getMessageId().equals(newMessage.getMessageId())) {
messages.remove(message);
messages.add(newMessage);
}
}
}
private static boolean sentByMe(final UserMessage message, final UserInfo userInfo) {