From 26a8650353d28805746e47558297a4c00b10893a Mon Sep 17 00:00:00 2001 From: kske Date: Wed, 1 Jul 2020 08:36:21 +0200 Subject: [PATCH] Fix message order with insertion method Fixes #168 --- src/main/java/envoy/client/data/Chat.java | 14 ++++++++++++++ .../java/envoy/client/ui/controller/ChatScene.java | 2 +- .../envoy/client/ui/controller/LoginScene.java | 3 +-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/envoy/client/data/Chat.java b/src/main/java/envoy/client/data/Chat.java index 7ca11ce..f26fa15 100644 --- a/src/main/java/envoy/client/data/Chat.java +++ b/src/main/java/envoy/client/data/Chat.java @@ -93,6 +93,20 @@ public final class Chat implements Serializable { */ public boolean isUnread() { return !messages.isEmpty() && messages.get(messages.size() - 1).getStatus() != MessageStatus.READ; } + /** + * Inserts a message at the correct place according to its creation date. + * + * @param message the message to insert + * @since Envoy Client v0.1-beta + */ + public void insert(Message message) { + for (int i = messages.size() - 1; i >= 0; --i) + if (message.getCreationDate().isAfter(messages.get(i).getCreationDate())) { + messages.add(i + 1, message); + break; + } + } + /** * @return all messages in the current chat * @since Envoy Client v0.1-beta diff --git a/src/main/java/envoy/client/ui/controller/ChatScene.java b/src/main/java/envoy/client/ui/controller/ChatScene.java index c27a857..e31ebcb 100644 --- a/src/main/java/envoy/client/ui/controller/ChatScene.java +++ b/src/main/java/envoy/client/ui/controller/ChatScene.java @@ -101,7 +101,7 @@ public final class ChatScene { eventBus.register(MessageCreationEvent.class, e -> { final var message = e.get(); localDB.getChat(message.getSenderID()).ifPresent(chat -> { - chat.getMessages().add(message); + chat.insert(message); if (chat.equals(currentChat)) { try { diff --git a/src/main/java/envoy/client/ui/controller/LoginScene.java b/src/main/java/envoy/client/ui/controller/LoginScene.java index 380842a..3ec2338 100644 --- a/src/main/java/envoy/client/ui/controller/LoginScene.java +++ b/src/main/java/envoy/client/ui/controller/LoginScene.java @@ -151,8 +151,7 @@ public final class LoginScene { loadChatScene(); } } catch (IOException | InterruptedException | TimeoutException e) { - logger.log(Level.WARNING, "Could not connect to server: ", e); - logger.log(Level.FINER, "Attempting offline mode..."); + logger.log(Level.INFO, "Could not connect to server. Entering offline mode..."); attemptOfflineMode(credentials); } }