This repository has been archived on 2021-12-05. You can view files and clone it, but cannot push or open issues or pull requests.
envoy/src/main/java/envoy/client/data/Chat.java

92 lines
2.7 KiB
Java
Raw Normal View History

package envoy.client.data;
2019-12-21 21:23:19 +01:00
import java.io.IOException;
2019-12-21 21:23:19 +01:00
import java.io.Serializable;
import envoy.client.net.WriteProxy;
import envoy.client.ui.list.ComponentListModel;
import envoy.data.Message;
import envoy.data.Message.MessageStatus;
import envoy.data.User;
import envoy.event.MessageStatusChangeEvent;
2019-12-21 21:23:19 +01:00
/**
* Represents a chat between two {@link User}s <br>
* as a list of {@link Message} objects.
* <br>
* Project: <strong>envoy-client</strong><br>
* File: <strong>Chat.java</strong><br>
* Created: <strong>19 Oct 2019</strong><br>
*
* @author Maximilian K&auml;fer
* @author Leon Hofmeister
* @author Kai S. K. Engelbart
* @since Envoy v0.1-alpha
*/
public class Chat implements Serializable {
private static final long serialVersionUID = -7751248474547242056L;
private final User recipient;
private final ComponentListModel<Message> model = new ComponentListModel<>();
2019-12-21 21:23:19 +01:00
/**
* Provides the list of messages that the recipient receives.<br>
* Saves the Messages in the corresponding chat at that Point.
*
* @param recipient the user who receives the messages
* @since Envoy v0.1-alpha
*/
public Chat(User recipient) { this.recipient = recipient; }
/**
* Appends a message to the bottom of this chat
*
* @param message the message to append
2019-12-21 21:23:19 +01:00
* @since Envoy v0.1-alpha
*/
public void appendMessage(Message message) { model.add(message); }
2019-12-21 21:23:19 +01:00
/**
2020-02-03 06:57:19 +01:00
* Sets the status of all chat messages received from the recipient to
* {@code READ} starting from the bottom and stopping once a read message is
* found.
*
* @param writeProxy the write proxy instance used to notify the server about
* the message status changes
* @throws IOException if a {@link MessageStatusChangeEvent} could not be
* delivered to the server
* @since Envoy v0.3-alpha
2019-12-21 21:23:19 +01:00
*/
public void read(WriteProxy writeProxy) throws IOException {
for (int i = model.size() - 1; i >= 0; --i) {
final Message m = model.get(i);
if (m.getSenderId() == recipient.getId()) {
if (m.getStatus() == MessageStatus.READ) break;
else {
m.setStatus(MessageStatus.READ);
writeProxy.writeMessageStatusChangeEvent(new MessageStatusChangeEvent(m));
}
2020-02-03 06:57:19 +01:00
}
}
}
2019-12-21 21:23:19 +01:00
/**
* @return {@code true} if the newest message received in the chat doesn't have
* the status {@code READ}
* @since Envoy v0.3-alpha
*/
public boolean isUnread() { return !model.isEmpty() && model.get(model.size() - 1).getStatus() != MessageStatus.READ; }
2019-12-21 21:23:19 +01:00
/**
* @return all messages in the current chat
* @since Envoy v0.1-alpha
*/
public ComponentListModel<Message> getModel() { return model; }
/**
* @return the recipient of a message
* @since Envoy v0.1-alpha
*/
public User getRecipient() { return recipient; }
}