parent
96e94c2254
commit
b7b4e95e65
@ -48,18 +48,13 @@ public class ChatWindow extends JFrame {
|
|||||||
|
|
||||||
private Client client;
|
private Client client;
|
||||||
|
|
||||||
private DefaultListModel<Message> messageListModel = new DefaultListModel<>();
|
private JList<User> userList = new JList<>();
|
||||||
private List<Chat> partnerChatList = new ArrayList<Chat>();
|
private List<Chat> partnerChatList = new ArrayList<Chat>();
|
||||||
private Chat currentChat;
|
private Chat currentChat;
|
||||||
|
|
||||||
public ChatWindow(Client client) {
|
public ChatWindow(Client client) {
|
||||||
this.client = client;
|
this.client = client;
|
||||||
|
|
||||||
// Initialize chat list and current chat
|
|
||||||
Users chatUsers = client.getUsersListXml();
|
|
||||||
chatUsers.getUser().forEach(user -> partnerChatList.add(new Chat(user)));
|
|
||||||
if (partnerChatList.size() > 0) currentChat = partnerChatList.get(0);
|
|
||||||
|
|
||||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
setBounds(100, 100, 600, 800);
|
setBounds(100, 100, 600, 800);
|
||||||
setTitle("Envoy");
|
setTitle("Envoy");
|
||||||
@ -86,6 +81,7 @@ public class ChatWindow extends JFrame {
|
|||||||
messageList.setForeground(new Color(255, 255, 255));
|
messageList.setForeground(new Color(255, 255, 255));
|
||||||
messageList.setBackground(new Color(51, 51, 51));
|
messageList.setBackground(new Color(51, 51, 51));
|
||||||
|
|
||||||
|
DefaultListModel<Message> messageListModel = new DefaultListModel<>();
|
||||||
messageList.setModel(messageListModel);
|
messageList.setModel(messageListModel);
|
||||||
messageList.setFont(new Font("Arial", Font.PLAIN, 17));
|
messageList.setFont(new Font("Arial", Font.PLAIN, 17));
|
||||||
messageList.setFixedCellHeight(60);
|
messageList.setFixedCellHeight(60);
|
||||||
@ -142,10 +138,7 @@ public class ChatWindow extends JFrame {
|
|||||||
|
|
||||||
postButton.addActionListener((evt) -> {
|
postButton.addActionListener((evt) -> {
|
||||||
if (!client.hasRecipient()) {
|
if (!client.hasRecipient()) {
|
||||||
JOptionPane.showMessageDialog(this,
|
JOptionPane.showMessageDialog(this, "Please select a recipient!", "Cannot send message", JOptionPane.INFORMATION_MESSAGE);
|
||||||
"Please select a recipient!",
|
|
||||||
"Cannot send message",
|
|
||||||
JOptionPane.INFORMATION_MESSAGE);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +182,6 @@ public class ChatWindow extends JFrame {
|
|||||||
gbc_partnerName.insets = new Insets(0, 10, 0, 10);
|
gbc_partnerName.insets = new Insets(0, 10, 0, 10);
|
||||||
contentPane.add(textPane, gbc_partnerName);
|
contentPane.add(textPane, gbc_partnerName);
|
||||||
|
|
||||||
JList<User> userList = new JList<>();
|
|
||||||
userList.setCellRenderer(new UserListRenderer());
|
userList.setCellRenderer(new UserListRenderer());
|
||||||
userList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
userList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||||
userList.addListSelectionListener((listSelectionEvent) -> {
|
userList.addListSelectionListener((listSelectionEvent) -> {
|
||||||
@ -199,10 +191,7 @@ public class ChatWindow extends JFrame {
|
|||||||
final User user = selectedUserList.getSelectedValue();
|
final User user = selectedUserList.getSelectedValue();
|
||||||
client.setRecipient(user);
|
client.setRecipient(user);
|
||||||
|
|
||||||
currentChat = partnerChatList.stream()
|
currentChat = partnerChatList.stream().filter(chat -> chat.getRecipient().getID() == user.getID()).findFirst().get();
|
||||||
.filter(chat -> chat.getRecipient().getID() == user.getID())
|
|
||||||
.findFirst()
|
|
||||||
.get();
|
|
||||||
|
|
||||||
client.setRecipient(user);
|
client.setRecipient(user);
|
||||||
|
|
||||||
@ -229,32 +218,38 @@ public class ChatWindow extends JFrame {
|
|||||||
contentPane.add(userList, gbc_userList);
|
contentPane.add(userList, gbc_userList);
|
||||||
contentPane.revalidate();
|
contentPane.revalidate();
|
||||||
|
|
||||||
loadUserList(userList);
|
loadUsersAndChats();
|
||||||
|
startReceiverThread(5000);
|
||||||
|
|
||||||
new Timer(5000, (evt) -> {
|
|
||||||
Messages unreadMessages = client.getUnreadMessages(client.getSender().getID());
|
|
||||||
for (int i = 0; i < unreadMessages.getMessage().size(); i++)
|
|
||||||
for (int j = 0; j < partnerChatList.size(); j++)
|
|
||||||
if (partnerChatList.get(j)
|
|
||||||
.getRecipient()
|
|
||||||
.getID() == unreadMessages.getMessage().get(i).getMetaData().getSender())
|
|
||||||
partnerChatList.get(j).appendMessage(unreadMessages.getMessage().get(i));
|
|
||||||
}).start();
|
|
||||||
contentPane.revalidate();
|
contentPane.revalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the elements of the user list by downloading them from the
|
* Initializes the elements of the user list by downloading them from the
|
||||||
* server.
|
* server.
|
||||||
*
|
|
||||||
* @param userList The {@link JList} to put the elements in
|
|
||||||
*/
|
*/
|
||||||
private void loadUserList(JList<User> userList) {
|
private void loadUsersAndChats() {
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
Users users = client.getUsersListXml();
|
Users users = client.getUsersListXml();
|
||||||
DefaultListModel<User> userListModel = new DefaultListModel<>();
|
DefaultListModel<User> userListModel = new DefaultListModel<>();
|
||||||
users.getUser().forEach(user -> userListModel.addElement(user));
|
users.getUser().forEach(user -> { userListModel.addElement(user); partnerChatList.add(new Chat(user)); });
|
||||||
SwingUtilities.invokeLater(() -> userList.setModel(userListModel));
|
SwingUtilities.invokeLater(() -> userList.setModel(userListModel));
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks for new messages and adds them to the chat list.
|
||||||
|
*
|
||||||
|
* @param timeout the amount of time that passes between two requests sent to
|
||||||
|
* the server
|
||||||
|
*/
|
||||||
|
private void startReceiverThread(int timeout) {
|
||||||
|
new Timer(timeout, (evt) -> {
|
||||||
|
Messages unreadMessages = client.getUnreadMessages(client.getSender().getID());
|
||||||
|
for (int i = 0; i < unreadMessages.getMessage().size(); i++)
|
||||||
|
for (int j = 0; j < partnerChatList.size(); j++)
|
||||||
|
if (partnerChatList.get(j).getRecipient().getID() == unreadMessages.getMessage().get(i).getMetaData().getSender())
|
||||||
|
partnerChatList.get(j).appendMessage(unreadMessages.getMessage().get(i));
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user