open foreign chat before join/ add contact

This commit is contained in:
2025-07-22 22:19:35 +03:30
parent 4a849ea022
commit 28af57f181
@@ -4,6 +4,7 @@ import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import org.to.telegramfinalproject.Models.ChatEntry; import org.to.telegramfinalproject.Models.ChatEntry;
import org.to.telegramfinalproject.Models.SearchRequestModel; import org.to.telegramfinalproject.Models.SearchRequestModel;
import org.to.telegramfinalproject.Models.SearchResultModel;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
@@ -359,7 +360,6 @@ public class ActionHandler {
JSONObject response = null; JSONObject response = null;
// منتظر بمون تا پاسخ واقعی (یعنی status داشته باشه) بیاد
while (true) { while (true) {
JSONObject incoming = TelegramClient.responseQueue.take(); JSONObject incoming = TelegramClient.responseQueue.take();
@@ -489,23 +489,32 @@ public class ActionHandler {
if (existing != null) { if (existing != null) {
openChat(existing); openChat(existing);
} else { } else {
System.out.println(" Trying to add contact..."); ChatEntry preview = new ChatEntry();
addContact(uuid); preview.setId(String.valueOf(uuid));
preview.setDisplayId(selected.getString("id"));
preview.setName(selected.getString("name"));
preview.setType("private");
refreshChatList(); openForeignChat(preview);
System.out.println("🔄 Rechecking chat list...");
existing = Session.chatList.stream()
.filter(c -> c.getId().equals(uuid) && c.getType().equals("private"))
.findFirst()
.orElse(null);
if (existing != null) {
openChat(existing);
} else {
System.out.println("❌ Failed to open chat. Try again later.");
}
} }
// else {
// System.out.println(" Trying to add contact...");
// addContact(uuid);
//
// refreshChatList();
// System.out.println("🔄 Rechecking chat list...");
//
// existing = Session.chatList.stream()
// .filter(c -> c.getId().equals(uuid) && c.getType().equals("private"))
// .findFirst()
// .orElse(null);
//
// if (existing != null) {
// openChat(existing);
// } else {
// System.out.println("❌ Failed to open chat. Try again later.");
// }
// }
} }
case "group", "channel" -> { case "group", "channel" -> {
@@ -522,23 +531,32 @@ public class ActionHandler {
if (existing != null) { if (existing != null) {
openChat(existing); openChat(existing);
}else { }else {
System.out.println(" Trying to join " + type + "..."); ChatEntry preview = new ChatEntry();
joinGroupOrChannel(type, uuidStr); preview.setId(String.valueOf(uuid));
preview.setDisplayId(selected.getString("id"));
preview.setName(selected.getString("name"));
preview.setType(type);
refreshChatList(); openForeignChat(preview);
System.out.println("🔄 Rechecking chat list...");
existing = Session.chatList.stream()
.filter(c -> c.getId().equals(uuid) && c.getType().equals(type))
.findFirst()
.orElse(null);
if (existing != null) {
openChat(existing);
} else {
System.out.println("❌ Failed to open " + type + ". Try again later.");
}
} }
// else {
// System.out.println(" Trying to join " + type + "...");
// joinGroupOrChannel(type, uuidStr);
//
// refreshChatList();
// System.out.println("🔄 Rechecking chat list...");
//
// existing = Session.chatList.stream()
// .filter(c -> c.getId().equals(uuid) && c.getType().equals(type))
// .findFirst()
// .orElse(null);
//
// if (existing != null) {
// openChat(existing);
// } else {
// System.out.println("❌ Failed to open " + type + ". Try again later.");
// }
// }
} }
case "message" -> { case "message" -> {
@@ -2393,20 +2411,20 @@ public class ActionHandler {
public static void requestPermissions(String chatId, String chatType) { // public static void requestPermissions(String chatId, String chatType) {
JSONObject permissionReq = new JSONObject(); // JSONObject permissionReq = new JSONObject();
permissionReq.put("action", "get_permissions"); // permissionReq.put("action", "get_permissions");
permissionReq.put("receiver_id", chatId); // permissionReq.put("receiver_id", chatId);
permissionReq.put("receiver_type", chatType); // permissionReq.put("receiver_type", chatType);
TelegramClient.send(permissionReq); // TelegramClient.send(permissionReq);
} // }
//
public void refreshCurrentChat() { // public void refreshCurrentChat() {
switch (Session.currentChatType.toLowerCase()) { // switch (Session.currentChatType.toLowerCase()) {
case "group" -> showGroupChatMenu(Session.currentChatEntry); // case "group" -> showGroupChatMenu(Session.currentChatEntry);
case "channel" -> showChannelChatMenu(Session.currentChatEntry); // case "channel" -> showChannelChatMenu(Session.currentChatEntry);
} // }
} // }
private void startMenuRefresherThread() { private void startMenuRefresherThread() {
@@ -2420,7 +2438,7 @@ public class ActionHandler {
Session.refreshCurrentChatMenu = false; Session.refreshCurrentChatMenu = false;
if (Session.currentChatEntry == null) { if (Session.currentChatEntry == null) {
System.out.println("⚠️ currentChatEntry is null. Skipping..."); System.out.println("⚠️ currentChatEntry is null. Skipping...");
continue; // ❗ اینجا بجای return باید continue باشه continue;
} }
@@ -2438,6 +2456,119 @@ public class ActionHandler {
private void openForeignChat(ChatEntry chat) {
System.out.println("🔍 Opening " + chat.getType() + " chat (not in your chat list)");
JSONObject req = new JSONObject();
req.put("action", "get_messages");
req.put("receiver_id", chat.getId().toString());
req.put("receiver_type", chat.getType());
send(req);
switch (chat.getType().toLowerCase()) {
case "private" -> {
System.out.println("\n--- Private Chat ---");
System.out.println("1. View Profile");
System.out.println("2. Add to Contact");
System.out.println("0. Back");
String input = scanner.nextLine();
switch (input) {
case "1" ->{
viewUserProfile(chat.getId());
openForeignChat(chat);
}
case "2" -> {
addContact(chat.getId());
refreshChatList();
}
default -> System.out.println("Back...");
}
}
case "group", "channel" -> {
System.out.println("\n--- " + chat.getType().substring(0, 1).toUpperCase() + chat.getType().substring(1) + " Preview ---");
System.out.println("1. View Info");
System.out.println("2. Join " + chat.getType());
System.out.println("0. Back");
String input = scanner.nextLine();
switch (input) {
case "1" -> {
viewGroupOrChannelInfo(chat.getId(), chat.getType());
openForeignChat(chat);
}
case "2" -> {
joinGroupOrChannel(chat.getType(), chat.getId().toString());
refreshChatList();
ChatEntry joined = Session.chatList.stream()
.filter(c -> c.getId().equals(chat.getId()) && c.getType().equals(chat.getType()))
.findFirst().orElse(null);
if (joined != null) {
openChat(joined);
} else {
System.out.println("❌ Failed to join.");
}
}
default -> System.out.println("Back...");
}
}
}
}
private void viewUserProfile(UUID userId) {
JSONObject req = new JSONObject();
req.put("action", "view_profile");
req.put("target_id", userId.toString());
JSONObject response = sendWithResponse(req);
if (response.getString("status").equals("success")) {
JSONObject profile = response.getJSONObject("data");
System.out.println("\n👤 Profile Info:");
System.out.println("🔷 Name: " + profile.getString("profile_name"));
System.out.println("🔷User ID: "+profile.getString("user_id"));
System.out.println("📄 Bio: " + profile.optString("bio", "N/A"));
System.out.println("🖼️ Image URL: " + profile.optString("image_url", "N/A"));
if (profile.getBoolean("is_online")) {
System.out.println("✅ Status: Online");
} else {
System.out.println("📅 Last seen: " + profile.optString("last_seen", "Unknown"));
}
System.out.println("────────────────────────────────────────────");
} else {
System.out.println("❌ Could not load profile.");
}
}
private void viewGroupOrChannelInfo(UUID id, String type) {
JSONObject req = new JSONObject();
req.put("action", "get_chat_info");
req.put("receiver_id", id.toString());
req.put("receiver_type", type);
JSONObject response = sendWithResponse(req);
if (response.getString("status").equals("success")) {
JSONObject data = response.getJSONObject("data");
System.out.println("\n📢 " + type.substring(0, 1).toUpperCase() + type.substring(1) + " Info:");
System.out.println("🔷 Name: " + data.optString("name", "N/A"));
System.out.println("🆔 ID: " + data.optString("id", "N/A"));
System.out.println("📄 Description: " + data.optString("description", "N/A"));
System.out.println("🖼️ Image: " + data.optString("image_url", "N/A"));
System.out.println("────────────────────────────────────────────");
} else {
System.out.println("❌ Failed to fetch " + type + " info.");
System.out.println("✅ Server Response: " + response.getString("message"));
}
}
} }