Handle message interact in UI with RealTime

This commit is contained in:
2025-09-03 17:30:58 +03:30
parent 95dd69896b
commit ea5e703f99
4 changed files with 1205 additions and 124 deletions
@@ -89,16 +89,24 @@ public class IncomingMessageListener implements Runnable {
private boolean isRealTimeEvent(String action) {
return switch (action) {
case "new_message", "message_edited", "message_deleted_global",
"user_status_changed", "added_to_group", "added_to_channel",
case "new_message",
"message_edited",
"message_deleted_global", "message_deleted_one_sided", "message_deleted",
"message_reacted", "message_unreacted",
"user_status_changed",
"added_to_group", "added_to_channel",
"update_group_or_channel", "chat_deleted",
"blocked_by_user", "unblocked_by_user", "message_seen",
"removed_from_group", "removed_from_channel",
"became_admin", "removed_admin", "ownership_transferred","admin_permissions_updated","created_private_chat" , "message_reacted" , "message_unreacted","chat_updated" -> true;
"became_admin", "removed_admin", "ownership_transferred",
"admin_permissions_updated",
"created_private_chat",
"chat_updated" -> true;
default -> false;
};
}
void handleRealTimeEvent(JSONObject response) throws IOException {
String action = response.getString("action");
JSONObject msg = response.has("data") ? response.getJSONObject("data") : new JSONObject();
@@ -166,6 +174,35 @@ public class IncomingMessageListener implements Runnable {
});
}
case "message_edited" -> {
JSONObject ui = normalizeMessageId(msg);
// (اختیاری) اگر ایونت زمان و چت را هم می‌دهد، می‌توانی چت‌لیست را آپدیت کنی
Platform.runLater(() -> {
var mc = MainController.getInstance();
var chatCtl = (mc != null) ? mc.getChatPageController() : null;
if (chatCtl != null) chatCtl.onRealTimeMessageEdited(ui);
});
}
case "message_deleted_global", "message_deleted_one_sided", "message_deleted" -> {
JSONObject ui = normalizeMessageId(msg);
Platform.runLater(() -> {
var mc = MainController.getInstance();
var chatCtl = (mc != null) ? mc.getChatPageController() : null;
if (chatCtl != null) chatCtl.onRealTimeMessageDeleted(ui);
});
}
case "message_reacted", "message_unreacted" -> {
JSONObject ui = normalizeMessageId(msg);
Platform.runLater(() -> {
var mc = MainController.getInstance();
var chatCtl = (mc != null) ? mc.getChatPageController() : null;
if (chatCtl != null) chatCtl.onRealTimeReaction(ui);
});
}
case "chat_updated" -> {
var data = response.getJSONObject("data");
@@ -189,8 +226,7 @@ public class IncomingMessageListener implements Runnable {
case "message_edited", "message_deleted_global", "message_reacted", "message_unreacted"
, "blocked_by_user", "unblocked_by_user", "message_seen" -> {
case "blocked_by_user", "unblocked_by_user", "message_seen" -> {
displayRealTimeMessage(action, msg);
}
@@ -478,4 +514,16 @@ public class IncomingMessageListener implements Runnable {
} catch (Exception e) { System.err.println("[RT] bumpChatListFromMessage: " + e.getMessage()); }
}
// --- add this helper ---
private static JSONObject normalizeMessageId(JSONObject j) {
if (j == null) return new JSONObject();
if (!j.has("message_id") && j.has("id")) {
JSONObject copy = new JSONObject(j.toString());
copy.put("message_id", copy.optString("id", ""));
return copy;
}
return j;
}
}
@@ -2474,8 +2474,8 @@ public class ClientHandler implements Runnable {
.put("excerpt", excerpt));
List<UUID> receivers = Receivers.resolveFor(receiverType, receiverId, senderId);
//RealTimeEventDispatcher.sendNewMessage(message, receivers, "reply", meta);
RealTimeEventDispatcher.sendNewMessageFiltered(message, receivers, senderId, "reply", meta);
receivers = Receivers.resolveFor(receiverType, receiverId, /*exclude*/ null);
RealTimeEventDispatcher.sendNewMessage(message, receivers, "reply", meta);
response = saved ?
@@ -2532,12 +2532,8 @@ public class ClientHandler implements Runnable {
.put("sender_id", original.getSender_id().toString())
.put("sender_name", userDatabase.findByInternalUUID(original.getSender_id()).getProfile_name()));
List<UUID> receivers = Receivers.resolveFor(targetChatType, targetChatId, currentUser.getInternal_uuid());
//RealTimeEventDispatcher.sendNewMessage(forwarded, receivers, "forward", meta);
RealTimeEventDispatcher.sendNewMessageFiltered(forwarded, receivers, senderId, "forward", meta);
} else {
response = new ResponseModel("error", "Failed to forward message.");
List<UUID> receivers = Receivers.resolveFor(targetChatType, targetChatId, /*exclude*/ null);
RealTimeEventDispatcher.sendNewMessage(forwarded, receivers, "forward", meta);
}
break;
}
File diff suppressed because it is too large Load Diff