package org.to.telegramfinalproject.Client; import org.json.JSONArray; import org.json.JSONObject; import org.to.telegramfinalproject.Models.ChatEntry; import org.to.telegramfinalproject.Models.ContactEntry; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.UUID; // method for save data from server response public class Session { public static JSONObject currentUser; public static List chatList = new ArrayList<>(); public static List archivedChats = new ArrayList<>(); public static List activeChats = new ArrayList<>(); public static UUID currentPrivateChatUserId = null; public static volatile boolean forceRefreshChatList = false; public static volatile boolean backToChatList = false; public static boolean inChatListMenu = false; public static String currentChatType = null; public static volatile boolean inChatMenu = false; public static volatile boolean refreshCurrentChatMenu = false; public static String currentChatId = null; public static ChatEntry currentChatEntry = null; public static List contactEntries = new ArrayList<>(); public static String getUserUUID() { if (currentUser.has("uuid")) return currentUser.getString("uuid"); if (currentUser.has("internal_uuid")) return currentUser.getString("internal_uuid"); if (currentUser.has("internalUUID")) return currentUser.getString("internalUUID"); throw new RuntimeException("❌ No UUID found in currentUser!"); } // public static void updateChatList(JSONArray chatArray) { // chatList.clear(); // for (int i = 0; i < chatArray.length(); i++) { // JSONObject obj = chatArray.getJSONObject(i); // ChatEntry entry = new ChatEntry( // UUID.fromString(obj.getString("internal_id")), // obj.optString("id", ""), // displayId // obj.optString("name", ""), // name // obj.optString("image_url", ""), // obj.getString("type"), // null, // last message time (if needed, parse it) // obj.optBoolean("is_owner", false), // obj.optBoolean("is_admin", false) // ); // entry.setPermissions(obj.optJSONObject("permissions")); // chatList.add(entry); // } // } public static void updateChatList(JSONArray chatArray) { chatList.clear(); for (int i = 0; i < chatArray.length(); i++) { JSONObject obj = chatArray.getJSONObject(i); LocalDateTime lastMessageTime = null; if (obj.has("last_message_time") && !obj.isNull("last_message_time")) { String timeStr = obj.getString("last_message_time"); if (!timeStr.isBlank()) { lastMessageTime = LocalDateTime.parse(timeStr); } } ChatEntry entry = new ChatEntry( UUID.fromString(obj.getString("internal_id")), obj.optString("id", ""), // displayId obj.optString("name", ""), // name obj.optString("image_url", ""), obj.getString("type"), lastMessageTime, obj.optBoolean("is_owner", false), obj.optBoolean("is_admin", false) ); entry.setPermissions(obj.optJSONObject("permissions")); chatList.add(entry); } chatList.sort((c1, c2) -> { if (c1.getLastMessageTime() == null && c2.getLastMessageTime() == null) return 0; if (c1.getLastMessageTime() == null) return 1; if (c2.getLastMessageTime() == null) return -1; return c2.getLastMessageTime().compareTo(c1.getLastMessageTime()); }); activeChats = chatList.stream().filter(c -> !c.isArchived()).toList(); archivedChats = chatList.stream().filter(ChatEntry::isArchived).toList(); } public static List getChatList() { return chatList; } public static void refreshChatLists() { Session.activeChats = Session.chatList.stream() .filter(c -> !c.isArchived()) .toList(); Session.archivedChats = Session.chatList.stream() .filter(ChatEntry::isArchived) .toList(); } }