Fixed save message

This commit is contained in:
2025-08-11 20:52:39 +03:30
parent fb43adff7a
commit 42d98c53d8
6 changed files with 818 additions and 335 deletions
@@ -159,45 +159,91 @@ public class ClientHandler implements Runnable {
// }
//
// List<PrivateChat> privateChats = PrivateChatDatabase.findChatsOfUser(currentUser.getInternal_uuid());
// for (PrivateChat chat : privateChats) {
// UUID otherId = chat.getUser1_id().equals(currentUser.getInternal_uuid()) ?
// chat.getUser2_id() : chat.getUser1_id();
//
// User otherUser = userDatabase.findByInternalUUID(otherId);
// if (otherUser == null) continue;
//
// LocalDateTime lastMessageTime = MessageDatabase.getLastMessageTime(chat.getChat_id(), "private");
//
//
// ChatEntry entry = new ChatEntry(
// chat.getChat_id(),
// otherUser.getUser_id(),
// otherUser.getProfile_name(),
// otherUser.getImage_url(),
// "private",
// lastMessageTime,
// false,
// false
// );
// entry.setOtherUserId(otherId);
//
// if (currentUser.getInternal_uuid() == otherId) {
// entry.setSavedMessages(true);
// }
//
// if (archivedChatIds.contains(chat.getChat_id())) {
// archivedChatList.add(entry);
// chatList.add(entry);
// } else {
// activeChatList.add(entry);
// chatList.add(entry);
// }
// }
List<PrivateChat> privateChats = PrivateChatDatabase.findChatsOfUser(currentUser.getInternal_uuid());
ChatEntry savedEntry = null;
for (PrivateChat chat : privateChats) {
UUID otherId = chat.getUser1_id().equals(currentUser.getInternal_uuid()) ?
chat.getUser2_id() : chat.getUser1_id();
boolean isSelf =
chat.getUser1_id().equals(chat.getUser2_id()) &&
chat.getUser1_id().equals(currentUser.getInternal_uuid());
// در غیر self، otherId = طرف مقابل
UUID otherId = isSelf
? currentUser.getInternal_uuid()
: (chat.getUser1_id().equals(currentUser.getInternal_uuid())
? chat.getUser2_id()
: chat.getUser1_id());
User otherUser = userDatabase.findByInternalUUID(otherId);
if (otherUser == null) continue;
LocalDateTime lastMessageTime = MessageDatabase.getLastMessageTime(chat.getChat_id(), "private");
ChatEntry entry = new ChatEntry(
chat.getChat_id(),
otherUser.getUser_id(),
otherUser.getProfile_name(),
otherUser.getImage_url(),
ChatEntry entry = new ChatEntry(
chat.getChat_id(), // internal_id = chat_id
isSelf ? "Saved Messages" : otherUser.getUser_id(), // id/display
isSelf ? "Saved Messages" : otherUser.getProfile_name(), // name
isSelf ? null : otherUser.getImage_url(),
"private",
lastMessageTime,
false,
false
false, // isOwner
false // isAdmin
);
entry.setOtherUserId(otherId);
if (currentUser.getInternal_uuid() == otherId) {
entry.setSavedMessages(true);
if (isSelf) {
entry.setSavedMessages(true); // فلگ مهم
savedEntry = entry; // برای بردن به اول لیست
}
if (archivedChatIds.contains(chat.getChat_id())) {
if (!isSelf && archivedChatIds.contains(chat.getChat_id())) {
archivedChatList.add(entry);
chatList.add(entry);
} else {
activeChatList.add(entry);
chatList.add(entry);
}
chatList.add(entry);
}
for (Group group : groups) {
LocalDateTime last = MessageDatabase.getLastMessageTime(group.getInternal_uuid(), "group");
boolean isOwner = GroupDatabase.isOwner(group.getInternal_uuid(), user.getInternal_uuid());
@@ -2497,7 +2543,7 @@ public class ClientHandler implements Runnable {
case "get_saved_messages": {
UUID user_Id = UUID.fromString(requestJson.getString("user_id"));
// response = SidebarService.handleGetSavedMessages(user_Id);
response = SidebarService.handleGetSavedMessages(user_Id);
break;
}
@@ -2522,6 +2568,12 @@ public class ClientHandler implements Runnable {
break;
}
case "get_or_create_saved_messages": {
response = handleGetOrCreateSavedMessages(requestJson);
}
break;
default:
response = new ResponseModel("error", "Unknown action: " + action);
}
@@ -2603,6 +2655,7 @@ public class ClientHandler implements Runnable {
}
String content = json.optString("content", "");
String messageType = json.optString("message_type", "TEXT");
@@ -2716,5 +2769,22 @@ public class ClientHandler implements Runnable {
private ResponseModel handleGetOrCreateSavedMessages(JSONObject req) {
if (currentUser == null) return new ResponseModel("error", "Unauthorized.");
UUID uid = currentUser.getInternal_uuid();
PrivateChat chat = PrivateChatDatabase.findSelfChat(uid);
UUID chatId = (chat != null) ? chat.getChat_id() : PrivateChatDatabase.createSelfChat(uid);
if (chatId == null) return new ResponseModel("error", "Failed to create Saved Messages.");
JSONObject data = new JSONObject();
data.put("chat_id", chatId.toString());
data.put("name", "Saved Messages");
data.put("is_saved_messages", true);
data.put("chat_type", "private");
return new ResponseModel("success", "Saved Messages ready.", data);
}
}
@@ -211,50 +211,49 @@ public class SidebarService {
}
}
// Get saved messages data
// public static ResponseModel handleGetSavedMessages(UUID userId) {
// try {
//
// UUID chatId = PrivateChatDatabase.getOrCreateSavedMessagesChat(userId);
// if (chatId == null) {
// return new ResponseModel("error", "Failed to create or find saved messages chat.");
// }
//
// List<Message> messages = MessageDatabase.privateChatHistory(chatId);
//
// JSONArray messageArray = new JSONArray();
// if (!messages.isEmpty()) {
// for (Message msg : messages) {
// JSONObject msgJson = new JSONObject();
// msgJson.put("message_id", msg.getMessage_id().toString());
// msgJson.put("sender_id", msg.getSender_id().toString());
// msgJson.put("receiver_type", msg.getReceiver_type());
// msgJson.put("receiver_id", msg.getReceiver_id().toString());
// msgJson.put("content", msg.getContent());
// msgJson.put("message_type", msg.getMessage_type());
// msgJson.put("send_at", msg.getSend_at().toString()); // LocalDateTime
// msgJson.put("status", msg.getStatus());
// msgJson.put("reply_to_id", msg.getReply_to_id() != null ? msg.getReply_to_id().toString() : JSONObject.NULL);
// msgJson.put("is_edited", msg.isIs_edited());
// msgJson.put("original_message_id", msg.getOriginal_message_id() != null ? msg.getOriginal_message_id().toString() : JSONObject.NULL);
// msgJson.put("forwarded_by", msg.getForwarded_by() != null ? msg.getForwarded_by().toString() : JSONObject.NULL);
// msgJson.put("forwarded_from", msg.getForwarded_from() != null ? msg.getForwarded_from().toString() : JSONObject.NULL);
//
// messageArray.put(msgJson);
// }
// }
//
// JSONObject data = new JSONObject();
// data.put("chat_id", chatId.toString());
// data.put("messages", messageArray);
//
// return new ResponseModel("success", "Saved messages retrieved successfully", data);
//
// } catch (Exception e) {
// e.printStackTrace();
// return new ResponseModel("error", "Unexpected server error.");
// }
// }
public static ResponseModel handleGetSavedMessages(UUID userId) {
try {
UUID chatId = PrivateChatDatabase.getOrCreateSavedMessagesChat(userId);
if (chatId == null) {
return new ResponseModel("error", "Failed to create or find saved messages chat.");
}
List<Message> messages = MessageDatabase.privateChatHistory(chatId, userId);
JSONArray messageArray = new JSONArray();
if (!messages.isEmpty()) {
for (Message msg : messages) {
JSONObject msgJson = new JSONObject();
msgJson.put("message_id", msg.getMessage_id().toString());
msgJson.put("sender_id", msg.getSender_id().toString());
msgJson.put("receiver_type", msg.getReceiver_type());
msgJson.put("receiver_id", msg.getReceiver_id().toString());
msgJson.put("content", msg.getContent());
msgJson.put("message_type", msg.getMessage_type());
msgJson.put("send_at", msg.getSend_at().toString()); // LocalDateTime
msgJson.put("status", msg.getStatus());
msgJson.put("reply_to_id", msg.getReply_to_id() != null ? msg.getReply_to_id().toString() : JSONObject.NULL);
msgJson.put("is_edited", msg.isIs_edited());
msgJson.put("original_message_id", msg.getOriginal_message_id() != null ? msg.getOriginal_message_id().toString() : JSONObject.NULL);
msgJson.put("forwarded_by", msg.getForwarded_by() != null ? msg.getForwarded_by().toString() : JSONObject.NULL);
msgJson.put("forwarded_from", msg.getForwarded_from() != null ? msg.getForwarded_from().toString() : JSONObject.NULL);
messageArray.put(msgJson);
}
}
JSONObject data = new JSONObject();
data.put("chat_id", chatId.toString());
data.put("messages", messageArray);
return new ResponseModel("success", "Saved messages retrieved successfully", data);
} catch (Exception e) {
e.printStackTrace();
return new ResponseModel("error", "Unexpected server error.");
}
}
// Save messages to DB
public static ResponseModel handleSendMessage(JSONObject requestJson) {