Merge pull request #169 from informatik-ag-ngl/f/message_order

Fix message order with insertion method
This commit is contained in:
Kai S. K. Engelbart 2020-07-02 06:06:39 +00:00 committed by GitHub
commit 3bcd40d49e
3 changed files with 21 additions and 5 deletions

View File

@ -32,7 +32,8 @@ public final class Chat implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* Provides the list of messages that the recipient receives.<p> * Provides the list of messages that the recipient receives.
* <p>
* Saves the Messages in the corresponding chat at that Point. * Saves the Messages in the corresponding chat at that Point.
* *
* @param recipient the user who receives the messages * @param recipient the user who receives the messages
@ -93,6 +94,21 @@ public final class Chat implements Serializable {
*/ */
public boolean isUnread() { return !messages.isEmpty() && messages.get(messages.size() - 1).getStatus() != MessageStatus.READ; } 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);
return;
}
messages.add(0, message);
}
/** /**
* @return all messages in the current chat * @return all messages in the current chat
* @since Envoy Client v0.1-beta * @since Envoy Client v0.1-beta

View File

@ -101,7 +101,7 @@ public final class ChatScene {
eventBus.register(MessageCreationEvent.class, e -> { eventBus.register(MessageCreationEvent.class, e -> {
final var message = e.get(); final var message = e.get();
localDB.getChat(message.getSenderID()).ifPresent(chat -> { localDB.getChat(message.getSenderID()).ifPresent(chat -> {
chat.getMessages().add(message); chat.insert(message);
if (chat.equals(currentChat)) { if (chat.equals(currentChat)) {
try { try {
@ -317,7 +317,8 @@ public final class ChatScene {
writeProxy.writeMessage(message); writeProxy.writeMessage(message);
// Add message to LocalDB and update UI // Add message to LocalDB and update UI
messageList.getItems().add(message); currentChat.insert(message);
messageList.refresh();
scrollToMessageListEnd(); scrollToMessageListEnd();
// Request a new ID generator if all IDs were used // Request a new ID generator if all IDs were used

View File

@ -151,8 +151,7 @@ public final class LoginScene {
loadChatScene(); loadChatScene();
} }
} catch (IOException | InterruptedException | TimeoutException e) { } catch (IOException | InterruptedException | TimeoutException e) {
logger.log(Level.WARNING, "Could not connect to server: ", e); logger.log(Level.INFO, "Could not connect to server. Entering offline mode...");
logger.log(Level.FINER, "Attempting offline mode...");
attemptOfflineMode(credentials); attemptOfflineMode(credentials);
} }
} }