diff --git a/src/main/java/envoy/client/net/Client.java b/src/main/java/envoy/client/net/Client.java
index 0d09780..7aaf28b 100644
--- a/src/main/java/envoy/client/net/Client.java
+++ b/src/main/java/envoy/client/net/Client.java
@@ -141,7 +141,7 @@ public class Client implements Closeable {
receiver.registerProcessor(MessageStatusChangeEvent.class, new MessageStatusChangeEventProcessor());
// Process user status changes
- receiver.registerProcessor(UserStatusChangeEvent.class, new UserStatusChangeProcessor(localDB));
+ receiver.registerProcessor(UserStatusChangeEvent.class, eventBus::dispatch);
// Process message ID generation
receiver.registerProcessor(IDGenerator.class, localDB::setIDGenerator);
diff --git a/src/main/java/envoy/client/net/UserStatusChangeProcessor.java b/src/main/java/envoy/client/net/UserStatusChangeProcessor.java
deleted file mode 100644
index 9120662..0000000
--- a/src/main/java/envoy/client/net/UserStatusChangeProcessor.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package envoy.client.net;
-
-import java.util.function.Consumer;
-
-import envoy.client.data.LocalDB;
-import envoy.data.User;
-import envoy.event.EventBus;
-import envoy.event.UserStatusChangeEvent;
-
-/**
- * Project: envoy-client
- * File: UserStatusChangeProcessor.java
- * Created: 2 Feb 2020
- *
- * @author Leon Hofmeister
- * @since Envoy Client v0.3-alpha
- */
-public class UserStatusChangeProcessor implements Consumer {
-
- private final LocalDB localDB;
-
- /**
- * @param localDB the local database in which status updates will by applied
- * @since Envoy Client v0.3-alpha
- */
- public UserStatusChangeProcessor(LocalDB localDB) { this.localDB = localDB; }
-
- @Override
- public void accept(UserStatusChangeEvent evt) {
- localDB.getUsers().values().stream().filter(u -> u.getID() == evt.getID()).map(User.class::cast).findFirst().get().setStatus(evt.get());
- EventBus.getInstance().dispatch(evt);
- }
-}
diff --git a/src/main/java/envoy/client/ui/ContactListCell.java b/src/main/java/envoy/client/ui/ContactListCell.java
index c3c51d4..5cb04ca 100644
--- a/src/main/java/envoy/client/ui/ContactListCell.java
+++ b/src/main/java/envoy/client/ui/ContactListCell.java
@@ -28,7 +28,10 @@ public class ContactListCell extends ListCell {
@Override
protected void updateItem(Contact contact, boolean empty) {
super.updateItem(contact, empty);
- if (!empty && contact != null) {
+ if (empty || contact == null) {
+ setText(null);
+ setGraphic(null);
+ } else {
// the infoLabel displays specific contact info, i.e. status of a user or amount
// of members in a group
Label infoLabel = null;
@@ -51,7 +54,7 @@ public class ContactListCell extends ListCell {
break;
}
infoLabel.setTextFill(textColor);
- } else
+ } else
// group specific infos
infoLabel = new Label(String.valueOf(((Group) contact).getContacts().size()) + " members");
setGraphic(new VBox(new Label(contact.getName()), infoLabel));
diff --git a/src/main/java/envoy/client/ui/MessageListCell.java b/src/main/java/envoy/client/ui/MessageListCell.java
index 60a2ada..7b7a479 100644
--- a/src/main/java/envoy/client/ui/MessageListCell.java
+++ b/src/main/java/envoy/client/ui/MessageListCell.java
@@ -45,10 +45,15 @@ public class MessageListCell extends ListCell {
@Override
protected void updateItem(Message message, boolean empty) {
super.updateItem(message, empty);
- setGraphic(!empty && message != null ? new HBox(
+ if(empty || message == null) {
+ setText(null);
+ setGraphic(null);
+ } else {
+ setGraphic(new HBox(
new VBox(
new Label(dateFormat.format(message.getCreationDate())),
new Label(message.getText())),
- new Label("", new ImageView(statusImages.get(message.getStatus())))) : null);
+ new Label("", new ImageView(statusImages.get(message.getStatus())))));
+ }
}
}
diff --git a/src/main/java/envoy/client/ui/SceneContext.java b/src/main/java/envoy/client/ui/SceneContext.java
index 0c40bf3..c191d8e 100644
--- a/src/main/java/envoy/client/ui/SceneContext.java
+++ b/src/main/java/envoy/client/ui/SceneContext.java
@@ -108,6 +108,7 @@ public final class SceneContext {
sceneStack.push(scene);
stage.setScene(scene);
applyCSS();
+ stage.sizeToScene();
stage.show();
} catch (IOException e) {
throw new RuntimeException(e);
@@ -124,6 +125,7 @@ public final class SceneContext {
if (!sceneStack.isEmpty()) {
stage.setScene(sceneStack.peek());
applyCSS();
+ stage.sizeToScene();
}
stage.show();
}
diff --git a/src/main/java/envoy/client/ui/controller/ChatScene.java b/src/main/java/envoy/client/ui/controller/ChatScene.java
index 6fdbd2f..e57dedf 100644
--- a/src/main/java/envoy/client/ui/controller/ChatScene.java
+++ b/src/main/java/envoy/client/ui/controller/ChatScene.java
@@ -22,9 +22,7 @@ import envoy.client.net.WriteProxy;
import envoy.client.ui.ContactListCell;
import envoy.client.ui.MessageListCell;
import envoy.client.ui.SceneContext;
-import envoy.data.Contact;
-import envoy.data.Message;
-import envoy.data.MessageBuilder;
+import envoy.data.*;
import envoy.event.EventBus;
import envoy.event.MessageStatusChangeEvent;
import envoy.event.UserStatusChangeEvent;
@@ -105,7 +103,16 @@ public final class ChatScene {
});
// Listen to user status changes
- eventBus.register(UserStatusChangeEvent.class, e -> Platform.runLater(userList::refresh));
+ eventBus.register(UserStatusChangeEvent.class, e ->
+ userList.getItems()
+ .stream()
+ .filter(c -> c.getID() == e.getID())
+ .findAny()
+ .ifPresent(u -> {
+ ((User) u).setStatus(e.get());
+ Platform.runLater(userList::refresh);
+ })
+ );
// Listen to contacts changes
eventBus.register(ContactOperationEvent.class, e -> {