Adding contacts technical aspects

* Contact SearchResult from server is now getting processed and
correctly displayed.
* Sending a AddContact event to server, if button is pressed.
* Added several interface objects
This commit is contained in:
DieGurke
2020-02-09 16:26:36 +01:00
parent 90409c1d90
commit e8062be346
6 changed files with 166 additions and 17 deletions

View File

@ -9,12 +9,13 @@ import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import envoy.client.Settings;
import envoy.client.data.Chat;
import envoy.client.data.LocalDb;
import envoy.client.event.MessageCreationEvent;
import envoy.client.event.ThemeChangeEvent;
import envoy.client.event.*;
import envoy.client.net.Client;
import envoy.client.ui.list.ComponentList;
import envoy.client.ui.list.ComponentListModel;
@ -24,8 +25,8 @@ import envoy.data.Message;
import envoy.data.Message.MessageStatus;
import envoy.data.MessageBuilder;
import envoy.data.User;
import envoy.event.EventBus;
import envoy.event.MessageStatusChangeEvent;
import envoy.event.*;
import envoy.event.ContactOperation.Operation;
/**
* Project: <strong>envoy-client</strong><br>
@ -47,6 +48,7 @@ public class ChatWindow extends JFrame {
private JPanel contentPane = new JPanel();
private PrimaryTextArea messageEnterTextArea = new PrimaryTextArea(space);
private JList<User> userList = new JList<>();
private DefaultListModel<User> userListModel = new DefaultListModel<>();
private Chat currentChat;
private ComponentList<Message> messageList = new ComponentList<>(new MessageListRenderer());
private PrimaryScrollPane scrollPane = new PrimaryScrollPane();
@ -65,7 +67,7 @@ public class ChatWindow extends JFrame {
private final PrimaryTextArea searchField = new PrimaryTextArea(space);
private final PrimaryScrollPane possibleContacts = new PrimaryScrollPane();
private final ContactsSearchRenderer contactRenderer = new ContactsSearchRenderer();
private final ComponentListModel<User> contactsSearchModel = new ComponentListModel<>();
private final ComponentListModel<User> contactsModel = new ComponentListModel<>();
private final ComponentList<User> contactList = new ComponentList<>(contactRenderer);
private static final Logger logger = EnvoyLog.getLogger(ChatWindow.class.getSimpleName());
@ -252,6 +254,43 @@ public class ChatWindow extends JFrame {
searchPane.add(searchField, gbc_searchField);
// Sends event to server, if input has changed
searchField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
if (client.isOnline()) {
try {
if(!searchField.getText().isEmpty()) {
client.sendEvent(new ContactsRequest(searchField.getText()));
} else {
contactsModel.clear();
revalidate();
repaint();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
@Override
public void insertUpdate(DocumentEvent e) {
if (client.isOnline()) {
try {
if(!searchField.getText().isEmpty()) {
client.sendEvent(new ContactsRequest(searchField.getText()));
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
@Override
public void changedUpdate(DocumentEvent e) {}
});
GridBagConstraints gbc_cancelButton = new GridBagConstraints();
gbc_cancelButton.fill = GridBagConstraints.BOTH;
gbc_cancelButton.gridx = 1;
@ -262,7 +301,7 @@ public class ChatWindow extends JFrame {
searchPane.add(cancelButton, gbc_cancelButton);
contactList.setModel(contactsSearchModel);
contactList.setModel(contactsModel);
possibleContacts.setBorder(new EmptyBorder(space, space, space, space));
possibleContacts.setViewportView(contactList);
@ -276,7 +315,6 @@ public class ChatWindow extends JFrame {
searchPane.add(possibleContacts, gbc_possibleContacts);
// Contacts Header
GridBagConstraints gbc_contactsHeader = new GridBagConstraints();
@ -359,6 +397,36 @@ public class ChatWindow extends JFrame {
repaint();
});
EventBus.getInstance().register(SearchResultEvent.class, (evt) -> {
contactsModel.clear();
final java.util.List<User> contacts = ((SearchResultEvent) evt).get();
logger.info("Received contact search result " + contacts);
contacts.forEach(contactsModel::add);
revalidate();
repaint();
});
EventBus.getInstance().register(AddContactEvent.class, (evt) -> {
User contact = ((AddContactEvent) evt).get();
Operation operation = ((AddContactEvent) evt).getOperation();
try {
client.sendEvent(new ContactOperation(contact, operation));
} catch (IOException e) {
e.printStackTrace();
}
// TODO: Not finished LocalDB update of contact list
// Add this user to the chats
// userListModel.addElement(contact);
// Check if user exists in local DB
// if (localDb.getChats().stream().filter(c -> c.getRecipient().getId() ==
// contact.getId()).count() == 0)
// localDb.getChats().add(new Chat(contact));
revalidate();
repaint();
});
revalidate();
repaint();
}
@ -461,7 +529,6 @@ public class ChatWindow extends JFrame {
*/
private void loadUsersAndChats() {
new Thread(() -> {
DefaultListModel<User> userListModel = new DefaultListModel<>();
localDb.getUsers().values().forEach(user -> {
userListModel.addElement(user);
@ -511,7 +578,9 @@ public class ChatWindow extends JFrame {
* @param client the {@link Client} used to send and receive messages
* @since Envoy v0.2-alpha
*/
public void setClient(Client client) { this.client = client; }
public void setClient(Client client) {
this.client = client;
}
/**
* Sets the {@link LocalDb} used by this {@link ChatWindow}. After