Made local database persistence optional
* Split LocalDB into abstract class LocalDb and PersistentLocalDb and TransientLocalDb * Moved LocalDb to database package * Added ignoreLocalDb option to Config
This commit is contained in:
@ -9,7 +9,10 @@ import java.util.logging.Logger;
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
|
||||
import envoy.client.*;
|
||||
import envoy.client.Chat;
|
||||
import envoy.client.Client;
|
||||
import envoy.client.Settings;
|
||||
import envoy.client.database.LocalDb;
|
||||
import envoy.client.event.MessageCreationEvent;
|
||||
import envoy.client.event.ThemeChangeEvent;
|
||||
import envoy.client.ui.list.ComponentList;
|
||||
@ -34,7 +37,7 @@ public class ChatWindow extends JFrame {
|
||||
|
||||
// User specific objects
|
||||
private Client client;
|
||||
private LocalDB localDB;
|
||||
private LocalDb localDb;
|
||||
|
||||
// GUI components
|
||||
private JPanel contentPane = new JPanel();
|
||||
@ -161,13 +164,13 @@ public class ChatWindow extends JFrame {
|
||||
userList.setCellRenderer(new UserListRenderer());
|
||||
userList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
userList.addListSelectionListener((listSelectionEvent) -> {
|
||||
if (client != null && localDB != null && !listSelectionEvent.getValueIsAdjusting()) {
|
||||
if (client != null && localDb != null && !listSelectionEvent.getValueIsAdjusting()) {
|
||||
@SuppressWarnings("unchecked")
|
||||
final JList<User> selectedUserList = (JList<User>) listSelectionEvent.getSource();
|
||||
final User user = selectedUserList.getSelectedValue();
|
||||
|
||||
// Select current chat
|
||||
currentChat = localDB.getChats().stream().filter(chat -> chat.getRecipient().getId() == user.getId()).findFirst().get();
|
||||
currentChat = localDb.getChats().stream().filter(chat -> chat.getRecipient().getId() == user.getId()).findFirst().get();
|
||||
|
||||
// Read current Chat
|
||||
currentChat.read();
|
||||
@ -206,7 +209,7 @@ public class ChatWindow extends JFrame {
|
||||
// Listen to received messages
|
||||
EventBus.getInstance().register(MessageCreationEvent.class, (evt) -> {
|
||||
Message message = ((MessageCreationEvent) evt).get();
|
||||
localDB.getChats().stream().filter(c -> c.getRecipient().getId() == message.getSenderId()).findFirst().get().appendMessage(message);
|
||||
localDb.getChats().stream().filter(c -> c.getRecipient().getId() == message.getSenderId()).findFirst().get().appendMessage(message);
|
||||
revalidate();
|
||||
repaint();
|
||||
});
|
||||
@ -262,7 +265,7 @@ public class ChatWindow extends JFrame {
|
||||
if (!messageEnterTextArea.getText().isEmpty()) try {
|
||||
|
||||
// Create message
|
||||
final Message message = new MessageBuilder(localDB.getUser().getId(), currentChat.getRecipient().getId(), localDB.getIdGenerator())
|
||||
final Message message = new MessageBuilder(localDb.getUser().getId(), currentChat.getRecipient().getId(), localDb.getIdGenerator())
|
||||
.setText(messageEnterTextArea.getText())
|
||||
.build();
|
||||
|
||||
@ -270,7 +273,7 @@ public class ChatWindow extends JFrame {
|
||||
// TODO: Store offline messages
|
||||
client.sendMessage(message);
|
||||
|
||||
// Add message to LocalDB and update UI
|
||||
// Add message to PersistentLocalDb and update UI
|
||||
currentChat.appendMessage(message);
|
||||
// messageList.setModel(currentChat.getModel());
|
||||
|
||||
@ -281,8 +284,8 @@ public class ChatWindow extends JFrame {
|
||||
revalidate();
|
||||
repaint();
|
||||
|
||||
// Request a new id generator if all ids were used
|
||||
if (!localDB.getIdGenerator().hasNext()) client.requestIdGenerator();
|
||||
// Request a new id generator if all IDs were used
|
||||
if (!localDb.getIdGenerator().hasNext()) client.requestIdGenerator();
|
||||
|
||||
} catch (Exception e) {
|
||||
JOptionPane.showMessageDialog(this,
|
||||
@ -302,12 +305,12 @@ public class ChatWindow extends JFrame {
|
||||
private void loadUsersAndChats() {
|
||||
new Thread(() -> {
|
||||
DefaultListModel<User> userListModel = new DefaultListModel<>();
|
||||
localDB.getUsers().values().forEach(user -> {
|
||||
localDb.getUsers().values().forEach(user -> {
|
||||
userListModel.addElement(user);
|
||||
|
||||
// Check if user exists in local DB
|
||||
if (localDB.getChats().stream().filter(c -> c.getRecipient().getId() == user.getId()).count() == 0)
|
||||
localDB.getChats().add(new Chat(user));
|
||||
if (localDb.getChats().stream().filter(c -> c.getRecipient().getId() == user.getId()).count() == 0)
|
||||
localDb.getChats().add(new Chat(user));
|
||||
});
|
||||
SwingUtilities.invokeLater(() -> userList.setModel(userListModel));
|
||||
}).start();
|
||||
@ -324,14 +327,16 @@ public class ChatWindow extends JFrame {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link LocalDB} used by this {@link ChatWindow}. After invoking this
|
||||
* Sets the {@link LocalDb} used by this {@link ChatWindow}. After
|
||||
* invoking this
|
||||
* method, users and chats will be loaded from the database into the GUI.
|
||||
*
|
||||
* @param localDB the {@link LocalDB} used to manage stored messages and users
|
||||
* @param localDb the {@link LocalDb} used to manage stored messages
|
||||
* and users
|
||||
* @since Envoy v0.2-alpha
|
||||
*/
|
||||
public void setLocalDB(LocalDB localDB) {
|
||||
this.localDB = localDB;
|
||||
public void setLocalDB(LocalDb localDb) {
|
||||
this.localDb = localDb;
|
||||
loadUsersAndChats();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user