From 136054f07ee74867bff27b436b0951a3bd5c8e69 Mon Sep 17 00:00:00 2001 From: Emi Boucly Date: Thu, 23 Jan 2025 15:46:12 +0100 Subject: [PATCH] =?UTF-8?q?feat(Room):=20compteur=20de=20messages=20non=20?= =?UTF-8?q?lus=20fonctionnels=20sur=20contacts,=20salons=20=C3=A0=20r?= =?UTF-8?q?=C3=A9parer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/rtgre/chat/ChatController.java | 55 +++++++++++++------ .../chat/graphisme/ContactListViewCell.java | 4 +- .../chat/graphisme/RoomListViewCell.java | 2 +- chat/src/main/java/rtgre/modeles/Contact.java | 40 +++++++------- chat/src/main/java/rtgre/modeles/Room.java | 5 +- .../main/java/rtgre/modeles/UnreadCount.java | 18 ++++++ .../resources/rtgre/chat/logging.properties | 2 +- 7 files changed, 85 insertions(+), 41 deletions(-) create mode 100644 chat/src/main/java/rtgre/modeles/UnreadCount.java diff --git a/chat/src/main/java/rtgre/chat/ChatController.java b/chat/src/main/java/rtgre/chat/ChatController.java index 649be91..6412221 100644 --- a/chat/src/main/java/rtgre/chat/ChatController.java +++ b/chat/src/main/java/rtgre/chat/ChatController.java @@ -59,8 +59,8 @@ public class ChatController implements Initializable { public ImageView avatarImageView; public SplitPane exchangeSplitPane; public ListView postListView; - public ListView roomsListView; - public ListView contactsListView; + public ListView roomsListView; + public ListView contactsListView; public TextField messageTextField; public Button sendButton; public Label statusLabel; @@ -79,7 +79,6 @@ public class ChatController implements Initializable { @Override public void initialize(URL url, ResourceBundle resourceBundle) { LOGGER.info("Initialisation de l'interface graphique"); - Image image = new Image(Objects.requireNonNull(ChatController.class.getResourceAsStream("anonymous.png"))); this.avatarImageView.setImage(image); @@ -340,6 +339,8 @@ public class ChatController implements Initializable { roomsListView.getSelectionModel().clearSelection(); } + contactSelected.getUnreadCount().setUnreadCount(0); + Post postSys = new Post("system", loginTextField.getText(), "Bienvenue dans la discussion avec " + contactSelected.getLogin()); postsObservableList.clear(); postsObservableList.add(postSys); @@ -371,24 +372,46 @@ public class ChatController implements Initializable { } private void handlePostEvent(JSONObject content) { - if (contactsListView.getSelectionModel().getSelectedItem() != null) { - System.out.println(contactsListView.getSelectionModel().getSelectedItem()); - if (content.getString("to").equals(contact.getLogin()) || - content.getString("from").equals(loginTextField.getText())) { - System.out.println("New message! to:dm"); - postVector.add(Post.fromJson(content)); - postsObservableList.add(Post.fromJson(content)); - postListView.refresh(); - } - } else if (roomsListView.getSelectionModel().getSelectedItem() != null) { - if (content.getString("to").contains("#")) { - if (this.contact.getCurrentRoom().contains(content.getString("to"))) { - System.out.println("New Message! to:room"); + + LOGGER.finest("Selected: " + contactsListView.getSelectionModel().getSelectedItem()); + LOGGER.finest("From: " + content.getString("from")); + LOGGER.finest("To: " + content.getString("to")); + + if (!content.getString("to").contains("#")) { + System.out.println("New message to contact!"); + if (contactsListView.getSelectionModel().getSelectedItem().getLogin().equals(content.getString("to"))) { + LOGGER.info("New message! to:dm, from:" + content.getString("from")); postVector.add(Post.fromJson(content)); postsObservableList.add(Post.fromJson(content)); postListView.refresh(); + } + if (contact.getLogin().equals(content.getString("to"))) { + if (contactsListView.getSelectionModel().getSelectedItem().getLogin().equals(content.getString("from"))) { + LOGGER.info("New message! to:dm, from:myself"); + postVector.add(Post.fromJson(content)); + postsObservableList.add(Post.fromJson(content)); + postListView.refresh(); + } else { + contactMap.getContact(content.getString("from")).getUnreadCount().incrementUnreadCount(); + contactsListView.refresh(); + LOGGER.info("New unread message ! from:"); + LOGGER.info("%d".formatted(contactsListView.getSelectionModel().getSelectedItem().getUnreadCount().getUnreadCount())); } } + + } else { + System.out.println("New message to room!"); + if (roomsListView.getSelectionModel().getSelectedItem().getRoomName().equals(content.getString("from"))) { + LOGGER.info("New message! to:dm, from:myself"); + postVector.add(Post.fromJson(content)); + postsObservableList.add(Post.fromJson(content)); + postListView.refresh(); + } else { + roomMap.get(content.getString("from")).getUnreadCount().incrementUnreadCount(); + roomsListView.refresh(); + LOGGER.info("New unread message ! from:"); + LOGGER.info("%d".formatted(contactsListView.getSelectionModel().getSelectedItem().getUnreadCount().getUnreadCount())); + } } } diff --git a/chat/src/main/java/rtgre/chat/graphisme/ContactListViewCell.java b/chat/src/main/java/rtgre/chat/graphisme/ContactListViewCell.java index 0a1439c..a409963 100644 --- a/chat/src/main/java/rtgre/chat/graphisme/ContactListViewCell.java +++ b/chat/src/main/java/rtgre/chat/graphisme/ContactListViewCell.java @@ -53,8 +53,8 @@ public class ContactListViewCell extends ListCell { private void updateContact(Contact contact) { LOGGER.finest("Mise à jour de " + contact); - String unreadCountNotif = (contact.getUnreadCount() == 0) ? "" : " (%d)".formatted(contact.getUnreadCount()); - LOGGER.finest("unread: %s %s".formatted(contact.getLogin(), unreadCountNotif)); + String unreadCountNotif = (contact.getUnreadCount().getUnreadCount() == 0) ? "" : " (%d)".formatted(contact.getUnreadCount().getUnreadCount()); + LOGGER.warning("unread: %s %s".formatted(contact.getLogin(), unreadCountNotif)); Text loginText = new Text(contact.getLogin() + unreadCountNotif); loginText.setFont(Font.font(null, 12)); // FontWeight.BOLD, 14)); loginText.setFill(contact.isConnected() ? Color.BLACK : Color.GRAY); diff --git a/chat/src/main/java/rtgre/chat/graphisme/RoomListViewCell.java b/chat/src/main/java/rtgre/chat/graphisme/RoomListViewCell.java index 1edae79..ecaedc3 100644 --- a/chat/src/main/java/rtgre/chat/graphisme/RoomListViewCell.java +++ b/chat/src/main/java/rtgre/chat/graphisme/RoomListViewCell.java @@ -54,7 +54,7 @@ public class RoomListViewCell extends ListCell { private void updateRoom(Room room) { LOGGER.finest("Mise à jour de " + room); - String unreadCountNotif = (room.getUnreadCount() == 0) ? "" : " (%d)".formatted(room.getUnreadCount()); + String unreadCountNotif = (room.getUnreadCount().getUnreadCount() == 0) ? "" : " (%d)".formatted(room.getUnreadCount().getUnreadCount()); LOGGER.finest("unread: %s %s".formatted(room.getRoomName(), unreadCountNotif)); Text roomText = new Text(room.getRoomName() + unreadCountNotif); roomText.setFont(Font.font(null, 12)); // FontWeight.BOLD, 14)); diff --git a/chat/src/main/java/rtgre/modeles/Contact.java b/chat/src/main/java/rtgre/modeles/Contact.java index a0310e9..20f6159 100644 --- a/chat/src/main/java/rtgre/modeles/Contact.java +++ b/chat/src/main/java/rtgre/modeles/Contact.java @@ -16,25 +16,27 @@ public class Contact { protected java.awt.Image avatar; protected boolean connected; protected String currentRoom; + protected UnreadCount unreadCount = new UnreadCount(); + /** + * Crée un objet Contact + * @param: String login + * @param: java.awt.Image avatar + */ public Contact(String login, java.awt.Image avatar) { - /** - * Crée un objet Contact - * @param: String login - * @param: java.awt.Image avatar - */ this.login = login; this.avatar = avatar; this.connected = false; this.currentRoom = null; } + + /** + * Crée un objet Contact + * @param: String login + * @param: boolean connected + * @param: java.awt.Image avatar + */ public Contact(String login, boolean connected, java.awt.Image avatar) { - /** - * Crée un objet Contact - * @param: String login - * @param: boolean connected - * @param: java.awt.Image avatar - */ this.login = login; this.avatar = avatar; this.connected = connected; @@ -45,13 +47,13 @@ public class Contact { return currentRoom; } + /** + * Crée un objet Contact + * @param: String login + * @param: boolean connected + * @param: File banques_avatars + */ public Contact(String login, boolean connected, File banques_avatars) { - /** - * Crée un objet Contact - * @param: String login - * @param: boolean connected - * @param: File banques_avatars - */ this.login = login; try { this.avatar = avatarFromLogin(banques_avatars, login); @@ -99,8 +101,8 @@ public class Contact { return Objects.hashCode(login); } - public int getUnreadCount() { - return 0; + public UnreadCount getUnreadCount() { + return unreadCount; } public JSONObject toJsonObject() { diff --git a/chat/src/main/java/rtgre/modeles/Room.java b/chat/src/main/java/rtgre/modeles/Room.java index 433baeb..0a7de23 100644 --- a/chat/src/main/java/rtgre/modeles/Room.java +++ b/chat/src/main/java/rtgre/modeles/Room.java @@ -8,6 +8,7 @@ import java.util.Objects; public class Room { protected String roomName; protected HashSet loginSet; + protected UnreadCount unreadCount = new UnreadCount(); public String getRoomName() { @@ -57,7 +58,7 @@ public class Room { return this.toJsonObject().toString(); } - public int getUnreadCount() { - return 0; + public UnreadCount getUnreadCount() { + return this.unreadCount; } } diff --git a/chat/src/main/java/rtgre/modeles/UnreadCount.java b/chat/src/main/java/rtgre/modeles/UnreadCount.java new file mode 100644 index 0000000..380a28e --- /dev/null +++ b/chat/src/main/java/rtgre/modeles/UnreadCount.java @@ -0,0 +1,18 @@ +package rtgre.modeles; + +public class UnreadCount { + private int unreadCount = 0; + + public int incrementUnreadCount() { + unreadCount += 1; + return unreadCount; + } + + public void setUnreadCount(int unreadCount) { + this.unreadCount = unreadCount; + } + + public int getUnreadCount() { + return unreadCount; + } +} diff --git a/chat/src/main/resources/rtgre/chat/logging.properties b/chat/src/main/resources/rtgre/chat/logging.properties index 3c0fe74..af40298 100644 --- a/chat/src/main/resources/rtgre/chat/logging.properties +++ b/chat/src/main/resources/rtgre/chat/logging.properties @@ -9,7 +9,7 @@ handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter # Nom du fichier de logs -java.util.logging.FileHandler.pattern=../target/java%u.log +java.util.logging.FileHandler.pattern=target/java%u.log # Format de logs plus compact sur 1 seule ligne java.util.logging.SimpleFormatter.format=%1$tF %1$tT.%1$tL | %4$-7s | %2$s | %5$s %6$s%n