Implemented message ID generation and generator requests

* Persisting IdGenerator in LocalDB
* Added Client#requestIdGenerator()
* Listening to MessageCreationEvents in ChatWindow
This commit is contained in:
2020-01-29 07:44:25 +01:00
parent cd5030735a
commit c0f4e5d270
5 changed files with 100 additions and 18 deletions

View File

@ -10,6 +10,7 @@ import javax.swing.*;
import javax.swing.border.EmptyBorder;
import envoy.client.*;
import envoy.client.event.MessageCreationEvent;
import envoy.client.event.ThemeChangeEvent;
import envoy.client.ui.list.ComponentList;
import envoy.client.ui.settings.SettingsScreen;
@ -175,7 +176,9 @@ public class ChatWindow extends JFrame {
messageList.setModel(currentChat.getModel());
scrollPane.setChatOpened(true);
contentPane.revalidate();
revalidate();
repaint();
}
});
@ -194,13 +197,20 @@ public class ChatWindow extends JFrame {
contentPane.add(userList, gbc_userList);
contentPane.revalidate();
// Listen to theme changes
EventBus.getInstance().register(ThemeChangeEvent.class, (evt) -> applyTheme((Theme) evt.get()));
// Listen to received messages
EventBus.getInstance().register(MessageCreationEvent.class, (evt) -> {
Message message = ((MessageCreationEvent) evt).get();
localDB.getChats().stream().filter(c -> c.getRecipient().getId() == message.getRecipientId()).findFirst().get().appendMessage(message);
});
contentPane.revalidate();
}
/**
* Used to immediately reload the ChatWindow when settings were changed.
* Used to immediately reload the {@link ChatWindow} when settings were changed.
*
* @param theme the theme to change colors into
* @since Envoy v0.2-alpha
@ -247,7 +257,7 @@ public class ChatWindow extends JFrame {
if (!messageEnterTextArea.getText().isEmpty()) try {
// Create message
final Message message = new MessageBuilder(localDB.getUser().getId(), currentChat.getRecipient().getId())
final Message message = new MessageBuilder(localDB.getUser().getId(), currentChat.getRecipient().getId(), localDB.getIdGenerator())
.setText(messageEnterTextArea.getText())
.build();
@ -262,12 +272,17 @@ public class ChatWindow extends JFrame {
// Clear text field
messageEnterTextArea.setText("");
// Update UI
revalidate();
repaint();
// Request a new id generator if all ids were used
if (!localDB.getIdGenerator().hasNext()) client.requestIdGenerator();
} catch (Exception e) {
JOptionPane.showMessageDialog(this,
"An exception occured while sending a message. See the log for more details.",
"Exception occured",
"Error sending message:\n" + e.toString(),
"Message sending error",
JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}