added search in contact list.
This commit is contained in:
@@ -3,6 +3,7 @@ package org.to.telegramfinalproject.Client;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.to.telegramfinalproject.Database.PrivateChatDatabase;
|
||||
import org.to.telegramfinalproject.Database.ContactDatabase;
|
||||
import org.to.telegramfinalproject.Models.ChatEntry;
|
||||
import org.to.telegramfinalproject.Models.ContactEntry;
|
||||
import org.to.telegramfinalproject.Models.SearchRequestModel;
|
||||
@@ -558,9 +559,13 @@ public class ActionHandler {
|
||||
ContactEntry entry = new ContactEntry(
|
||||
UUID.fromString(c.getString("contact_id")),
|
||||
c.getString("user_id"),
|
||||
c.getString("contact_displayId"),
|
||||
c.getString("profile_name"),
|
||||
c.optString("image_url", ""),
|
||||
c.optBoolean("is_blocked", false)
|
||||
c.optBoolean("is_blocked", false),
|
||||
c.isNull("last_seen")
|
||||
? null
|
||||
: LocalDateTime.parse(c.getString("last_seen"))
|
||||
);
|
||||
Session.contactEntries.add(entry);
|
||||
}
|
||||
@@ -838,10 +843,118 @@ public class ActionHandler {
|
||||
}
|
||||
}
|
||||
|
||||
// public void showContactList() {
|
||||
// List<ContactEntry> contacts = Session.contactEntries;
|
||||
// if (contacts.isEmpty()) {
|
||||
// System.out.println("📭 You have no contacts.");
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// System.out.println("👥 Your Contacts:");
|
||||
// for (int i = 0; i < contacts.size(); i++) {
|
||||
// System.out.println((i + 1) + ". " + contacts.get(i));
|
||||
// }
|
||||
//
|
||||
// System.out.print("Select a contact (0 to go back): ");
|
||||
// int choice = scanner.nextInt();
|
||||
// scanner.nextLine();
|
||||
//
|
||||
// if (choice == 0) return;
|
||||
// if (choice < 1 || choice > contacts.size()) {
|
||||
// System.out.println("❌ Invalid choice.");
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// ContactEntry selected = contacts.get(choice - 1);
|
||||
// System.out.println("\n📇 What do you want to do with " + selected.getProfileName() + "?");
|
||||
// System.out.println("1. View Profile");
|
||||
// System.out.println("2. Send Message");
|
||||
// System.out.print("Enter your choice: ");
|
||||
// int action = scanner.nextInt();
|
||||
// scanner.nextLine();
|
||||
//
|
||||
// switch (action) {
|
||||
// case 1 -> viewProfile(selected.getContactId());
|
||||
// case 2 -> startPrivateChat(selected);
|
||||
// default -> System.out.println("❌ Invalid option.");
|
||||
// }
|
||||
// }
|
||||
|
||||
public void showContactList() {
|
||||
List<ContactEntry> contacts = Session.contactEntries;
|
||||
System.out.println("1. View All Contacts");
|
||||
System.out.println("2. Search Contacts");
|
||||
System.out.println("Choose an option: (0 to go back)");
|
||||
int option = scanner.nextInt();
|
||||
scanner.nextLine();
|
||||
|
||||
// Handle invalid input
|
||||
while (option < 0 || option > 2) {
|
||||
System.out.println("Invalid choice. Try again: ");
|
||||
option = scanner.nextInt();
|
||||
scanner.nextLine();
|
||||
}
|
||||
|
||||
List<ContactEntry> contacts;
|
||||
|
||||
if (option == 0) {
|
||||
return;
|
||||
}
|
||||
else if (option == 1) {
|
||||
contacts = Session.contactEntries;
|
||||
|
||||
} else if (option == 2) {
|
||||
contacts = new ArrayList<>();
|
||||
|
||||
System.out.print("Enter name or user ID to search: ");
|
||||
String searchTerm = scanner.nextLine();
|
||||
|
||||
// Handle invalid input
|
||||
while (searchTerm.isEmpty()) {
|
||||
System.out.print("Search key can not be empty. Try again: ");
|
||||
searchTerm = scanner.nextLine();
|
||||
}
|
||||
|
||||
// Send a request to server
|
||||
JSONObject request = new JSONObject();
|
||||
request.put("action", "search_contacts");
|
||||
request.put("user_id", Session.getUserUUID());
|
||||
request.put("search_term", searchTerm);
|
||||
|
||||
JSONObject response = ActionHandler.sendWithResponse(request);
|
||||
|
||||
if (!response.optString("status", "fail").equals("success")) {
|
||||
System.out.println("Failed to search contacts: " + response.optString("message", "Unknown error"));
|
||||
return;
|
||||
}
|
||||
|
||||
JSONObject data = response.getJSONObject("data");
|
||||
JSONArray contactsJson = data.getJSONArray("contacts");
|
||||
|
||||
for (int i = 0; i < contactsJson.length(); i++) {
|
||||
JSONObject contact = contactsJson.getJSONObject(i);
|
||||
|
||||
UUID contactId = UUID.fromString(contact.getString("contact_id"));
|
||||
String userId = contact.getString("user_id");
|
||||
String contact_displayId = contact.getString("contact_display_id");
|
||||
String profileName = contact.getString("profile_name");
|
||||
String imageUrl = contact.optString("image_url", "");
|
||||
boolean isBlocked = contact.getBoolean("is_blocked");
|
||||
String lastSeenString = contact.getString("last_seen");
|
||||
LocalDateTime lastSeen = null;
|
||||
if (lastSeenString != null) {
|
||||
lastSeen = LocalDateTime.parse(lastSeenString);
|
||||
}
|
||||
|
||||
contacts.add(new ContactEntry(contactId, userId, contact_displayId, profileName, imageUrl, isBlocked, lastSeen));
|
||||
}
|
||||
|
||||
} else {
|
||||
System.out.println("❌ Invalid choice.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (contacts.isEmpty()) {
|
||||
System.out.println("📭 You have no contacts.");
|
||||
System.out.println("📭 No contacts found.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -864,6 +977,7 @@ public class ActionHandler {
|
||||
System.out.println("\n📇 What do you want to do with " + selected.getProfileName() + "?");
|
||||
System.out.println("1. View Profile");
|
||||
System.out.println("2. Send Message");
|
||||
System.out.println("3. Remove Contact");
|
||||
System.out.print("Enter your choice: ");
|
||||
int action = scanner.nextInt();
|
||||
scanner.nextLine();
|
||||
@@ -871,10 +985,29 @@ public class ActionHandler {
|
||||
switch (action) {
|
||||
case 1 -> viewProfile(selected.getContactId());
|
||||
case 2 -> startPrivateChat(selected);
|
||||
case 3 -> {
|
||||
// Send a request to server
|
||||
JSONObject request = new JSONObject();
|
||||
request.put("action", "remove_contact");
|
||||
request.put("user_id", Session.getUserUUID()); // Current user
|
||||
request.put("contact_id", selected.getContactId().toString()); // Contact to remove
|
||||
|
||||
JSONObject response = ActionHandler.sendWithResponse(request);
|
||||
|
||||
if ("success".equals(response.optString("status"))) {
|
||||
System.out.println("✅ Contact removed successfully.");
|
||||
Session.contactEntries.remove(selected); // Remove from local session list
|
||||
} else {
|
||||
System.out.println("❌ Failed to remove contact: " +
|
||||
response.optString("message", "Unknown error"));
|
||||
}
|
||||
}
|
||||
|
||||
default -> System.out.println("❌ Invalid option.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void viewProfile(UUID targetId) {
|
||||
JSONObject req = new JSONObject();
|
||||
req.put("action", "view_profile");
|
||||
|
||||
Reference in New Issue
Block a user