Added BASIC group capability (#128)

* Changed serialVersionUID everywhere to 0L

* Added support for GroupResizeEvents and NameChangeEvents

Co-authored-by: CyB3RC0nN0R <kske@outlook.de>
This commit is contained in:
delvh 2020-04-02 09:23:47 +02:00 committed by GitHub
parent c12eac1cbc
commit 487c6a6573
10 changed files with 66 additions and 16 deletions

View File

@ -25,7 +25,7 @@ public class Cache<T> implements Consumer<T>, Serializable {
private transient Consumer<T> processor; private transient Consumer<T> processor;
private static final Logger logger = EnvoyLog.getLogger(Cache.class); private static final Logger logger = EnvoyLog.getLogger(Cache.class);
private static final long serialVersionUID = 0L; private static final long serialVersionUID = 0L;
/** /**
* Adds an element to the cache. * Adds an element to the cache.

View File

@ -6,9 +6,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import envoy.client.net.WriteProxy; import envoy.client.net.WriteProxy;
import envoy.data.Message; import envoy.data.*;
import envoy.data.Message.MessageStatus; import envoy.data.Message.MessageStatus;
import envoy.data.User;
import envoy.event.MessageStatusChangeEvent; import envoy.event.MessageStatusChangeEvent;
/** /**
@ -26,7 +25,7 @@ import envoy.event.MessageStatusChangeEvent;
*/ */
public final class Chat implements Serializable { public final class Chat implements Serializable {
private final User recipient; private final Contact recipient;
private final List<Message> messages = new ArrayList<>(); private final List<Message> messages = new ArrayList<>();
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -38,7 +37,7 @@ public final class Chat implements Serializable {
* @param recipient the user who receives the messages * @param recipient the user who receives the messages
* @since Envoy Client v0.1-alpha * @since Envoy Client v0.1-alpha
*/ */
public Chat(User recipient) { this.recipient = recipient; } public Chat(Contact recipient) { this.recipient = recipient; }
@Override @Override
public String toString() { return String.format("Chat[recipient=%s,messages=%d]", recipient, messages.size()); } public String toString() { return String.format("Chat[recipient=%s,messages=%d]", recipient, messages.size()); }
@ -82,5 +81,17 @@ public final class Chat implements Serializable {
* @return the recipient of a message * @return the recipient of a message
* @since Envoy Client v0.1-alpha * @since Envoy Client v0.1-alpha
*/ */
public User getRecipient() { return recipient; } public Contact getRecipient() { return recipient; }
/**
* @return whether this {@link Chat} points at a {@link User}
* @since Envoy Client v0.1-beta
*/
public boolean isUserChat() { return recipient instanceof User; }
/**
* @return whether this {@link Chat} points at a {@link Group}
* @since Envoy Client v0.1-beta
*/
public boolean isGroupChat() { return recipient instanceof Group; }
} }

View File

@ -2,10 +2,8 @@ package envoy.client.data;
import java.util.*; import java.util.*;
import envoy.data.IDGenerator; import envoy.data.*;
import envoy.data.Message; import envoy.event.*;
import envoy.data.User;
import envoy.event.MessageStatusChangeEvent;
/** /**
* Stores information about the current {@link User} and their {@link Chat}s. * Stores information about the current {@link User} and their {@link Chat}s.
@ -155,4 +153,39 @@ public abstract class LocalDB {
public Message getMessage(long id) { public Message getMessage(long id) {
return chats.stream().map(Chat::getMessages).flatMap(List::stream).filter(m -> m.getID() == id).findAny().orElse(null); return chats.stream().map(Chat::getMessages).flatMap(List::stream).filter(m -> m.getID() == id).findAny().orElse(null);
} }
/**
* Performs a contact name change if the corresponding contact is present.
*
* @param event the {@link NameChangeEvent} to process
* @since Envoy Client v0.1-beta
*/
public void replaceContactName(NameChangeEvent event) {
chats.stream().map(Chat::getRecipient).filter(c -> c.getID() == event.getId()).findAny().ifPresent(c -> c.setName(event.get()));
}
/**
* Performs a group resize operation if the corresponding group is present.
*
* @param event the {@link GroupResizeEvent} to process
* @since Envoy Client v0.1-beta
*/
public void updateGroup(GroupResizeEvent event) {
chats.stream()
.map(Chat::getRecipient)
.filter(Group.class::isInstance)
.filter(g -> g.getID() == event.getGroupID() && g.getID() != user.getID())
.map(Group.class::cast)
.findAny()
.ifPresent(group -> {
switch (event.getOperation()) {
case ADD:
group.getMemberIDs().add(event.get());
break;
case REMOVE:
group.getMemberIDs().remove(event.get());
break;
}
});
}
} }

View File

@ -145,12 +145,18 @@ public class Client implements Closeable {
// Process message ID generation // Process message ID generation
receiver.registerProcessor(IDGenerator.class, localDB::setIDGenerator); receiver.registerProcessor(IDGenerator.class, localDB::setIDGenerator);
// Process name changes
receiver.registerProcessor(NameChangeEvent.class, evt -> { localDB.replaceContactName(evt); EventBus.getInstance().dispatch(evt); });
// Process contact searches // Process contact searches
receiver.registerProcessor(ContactSearchResult.class, EventBus.getInstance()::dispatch); receiver.registerProcessor(ContactSearchResult.class, EventBus.getInstance()::dispatch);
receiver.registerProcessor(Contacts.class, receiver.registerProcessor(Contacts.class,
contacts -> EventBus.getInstance().dispatch(new ContactOperationEvent(contacts.getContacts().get(0), Operation.ADD))); contacts -> EventBus.getInstance().dispatch(new ContactOperationEvent(contacts.getContacts().get(0), Operation.ADD)));
// Process group size changes
receiver.registerProcessor(GroupResizeEvent.class, evt -> { localDB.updateGroup(evt); EventBus.getInstance().dispatch(evt); });
// Send event // Send event
EventBus.getInstance().register(SendEvent.class, evt -> { EventBus.getInstance().register(SendEvent.class, evt -> {
try { try {

View File

@ -81,7 +81,7 @@ public class Color extends java.awt.Color {
*/ */
public static final Color blue = new Color(0, 0, 255); public static final Color blue = new Color(0, 0, 255);
private static final long serialVersionUID = -9166233199998257344L; private static final long serialVersionUID = 0L;
public Color(java.awt.Color other) { this(other.getRGB()); } public Color(java.awt.Color other) { this(other.getRGB()); }

View File

@ -65,7 +65,7 @@ public class LoginDialog extends JDialog {
private static final ClientConfig config = ClientConfig.getInstance(); private static final ClientConfig config = ClientConfig.getInstance();
private static final Logger logger = EnvoyLog.getLogger(LoginDialog.class); private static final Logger logger = EnvoyLog.getLogger(LoginDialog.class);
private static final long serialVersionUID = 0L; private static final long serialVersionUID = 0L;
/** /**
* Displays a dialog enabling the user to enter their user name and password. * Displays a dialog enabling the user to enter their user name and password.

View File

@ -14,7 +14,7 @@ import envoy.client.ui.Theme;
*/ */
public class PrimaryScrollPane extends JScrollPane { public class PrimaryScrollPane extends JScrollPane {
private static final long serialVersionUID = -4786837444056228439L; private static final long serialVersionUID = 0L;
private int verticalScrollBarMaximum = getVerticalScrollBar().getMaximum(); private int verticalScrollBarMaximum = getVerticalScrollBar().getMaximum();
private boolean chatOpened = false; private boolean chatOpened = false;

View File

@ -16,7 +16,7 @@ import javax.swing.border.EmptyBorder;
*/ */
public class PrimaryTextArea extends JTextArea { public class PrimaryTextArea extends JTextArea {
private static final long serialVersionUID = 0L; private static final long serialVersionUID = 0L;
private int arcSize; private int arcSize;
/** /**

View File

@ -30,7 +30,7 @@ public class GeneralSettingsPanel extends SettingsPanel {
private static final String[] items = { "onCloseMode", "enterToSend" }; private static final String[] items = { "onCloseMode", "enterToSend" };
private static final Logger logger = EnvoyLog.getLogger(GeneralSettingsPanel.class); private static final Logger logger = EnvoyLog.getLogger(GeneralSettingsPanel.class);
private static final long serialVersionUID = 0L; private static final long serialVersionUID = 0L;
/** /**
* This is the constructor for the General class. Here the user can set general * This is the constructor for the General class. Here the user can set general

View File

@ -39,7 +39,7 @@ public class ThemeCustomizationPanel extends SettingsPanel {
private final Insets insets = new Insets(5, 5, 5, 5); private final Insets insets = new Insets(5, 5, 5, 5);
private static final Logger logger = EnvoyLog.getLogger(ThemeCustomizationPanel.class); private static final Logger logger = EnvoyLog.getLogger(ThemeCustomizationPanel.class);
private static final long serialVersionUID = 0L; private static final long serialVersionUID = 0L;
/** /**
* Initializes a {@link ThemeCustomizationPanel} that enables the user to change * Initializes a {@link ThemeCustomizationPanel} that enables the user to change