Copied event listeners from ChatWindow to ChatSceneController
This commit is contained in:
		| @@ -153,9 +153,6 @@ public abstract class LocalDB { | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| 	 */ | ||||
| 	public Message getMessage(long id) { | ||||
| 		for (Chat c : chats) | ||||
| 			for (Message m : c.getMessages()) | ||||
| 				if (m.getID() == id) return m; | ||||
| 		return null; | ||||
| 		return chats.stream().map(Chat::getMessages).flatMap(List::stream).filter(m -> m.getID() == id).findAny().orElse(null); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -6,11 +6,15 @@ import java.util.logging.Logger; | ||||
|  | ||||
| import envoy.client.data.Chat; | ||||
| import envoy.client.data.LocalDB; | ||||
| import envoy.client.event.MessageCreationEvent; | ||||
| import envoy.client.net.Client; | ||||
| import envoy.client.net.WriteProxy; | ||||
| import envoy.data.Message; | ||||
| import envoy.data.MessageBuilder; | ||||
| import envoy.data.User; | ||||
| import envoy.event.EventBus; | ||||
| import envoy.event.MessageStatusChangeEvent; | ||||
| import envoy.event.UserStatusChangeEvent; | ||||
| import envoy.util.EnvoyLog; | ||||
| import javafx.collections.FXCollections; | ||||
| import javafx.fxml.FXML; | ||||
| @@ -52,12 +56,37 @@ public final class ChatSceneController { | ||||
|  | ||||
| 	private Chat currentChat; | ||||
|  | ||||
| 	private static final Logger logger = EnvoyLog.getLogger(ChatSceneController.class); | ||||
| 	private static final EventBus	eventBus	= EventBus.getInstance(); | ||||
| 	private static final Logger		logger		= EnvoyLog.getLogger(ChatSceneController.class); | ||||
|  | ||||
| 	@FXML | ||||
| 	private void initialize() { | ||||
|  | ||||
| 		// Initialize message and user rendering | ||||
| 		messageList.setCellFactory(listView -> new MessageListCell()); | ||||
| 		userList.setCellFactory(listView -> new UserListCell()); | ||||
|  | ||||
| 		// Listen to received messages | ||||
| 		eventBus.register(MessageCreationEvent.class, e -> { | ||||
| 			final var	message	= e.get(); | ||||
| 			final var	chat	= localDB.getChats().stream().filter(c -> c.getRecipient().getID() == message.getSenderID()).findAny().get(); | ||||
| 			chat.getMessages().add(message); | ||||
|  | ||||
| 			// Update UI if in current chat | ||||
| 			if (chat == currentChat) messageList.getItems().add(message); | ||||
| 		}); | ||||
|  | ||||
| 		// Listen to message status changes | ||||
| 		eventBus.register(MessageStatusChangeEvent.class, e -> { | ||||
| 			final var message = localDB.getMessage(e.getID()); | ||||
| 			message.setStatus(e.get()); | ||||
|  | ||||
| 			// Update UI if in current chat | ||||
| 			if (currentChat != null && message.getSenderID() == currentChat.getRecipient().getID()) messageList.refresh(); | ||||
| 		}); | ||||
|  | ||||
| 		// Listen to user status changes | ||||
| 		eventBus.register(UserStatusChangeEvent.class, e -> userList.refresh()); | ||||
| 	} | ||||
|  | ||||
| 	void initializeData(LocalDB localDB, Client client, WriteProxy writeProxy) { | ||||
| @@ -87,8 +116,7 @@ public final class ChatSceneController { | ||||
| 			// Load the chat or create a new one and add it to the LocalDB | ||||
| 			currentChat = localDB.getChats() | ||||
| 				.stream() | ||||
| 				.filter(c -> c.getRecipient().getID() == user | ||||
| 					.getID()) | ||||
| 				.filter(c -> c.getRecipient().getID() == user.getID()) | ||||
| 				.findAny() | ||||
| 				.orElseGet(() -> { var chat = new Chat(user); localDB.getChats().add(chat); return chat; }); | ||||
| 			messageList.setItems(FXCollections.observableArrayList(currentChat.getMessages())); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user