Edit create group/channel form
This commit is contained in:
@@ -57,14 +57,41 @@ public class ActionHandler {
|
|||||||
|
|
||||||
public void register() {
|
public void register() {
|
||||||
System.out.println("Register form: \n");
|
System.out.println("Register form: \n");
|
||||||
|
|
||||||
|
String username, user_id, password, profile_name;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
System.out.print("Username: ");
|
System.out.print("Username: ");
|
||||||
String username = this.scanner.nextLine();
|
username = scanner.nextLine().trim();
|
||||||
|
if (username.isEmpty()) {
|
||||||
|
System.out.println("❌ Username cannot be empty.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
System.out.print("User id: ");
|
System.out.print("User id: ");
|
||||||
String user_id = this.scanner.nextLine();
|
user_id = scanner.nextLine().trim();
|
||||||
|
if (user_id.isEmpty()) {
|
||||||
|
System.out.println("❌ User ID cannot be empty.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
System.out.print("Password: ");
|
System.out.print("Password: ");
|
||||||
String password = this.scanner.nextLine();
|
password = scanner.nextLine();
|
||||||
|
if (password.isEmpty()) {
|
||||||
|
System.out.println("❌ Password cannot be empty.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
System.out.print("Profile name: ");
|
System.out.print("Profile name: ");
|
||||||
String profile_name = this.scanner.nextLine();
|
profile_name = scanner.nextLine().trim();
|
||||||
|
if (profile_name.isEmpty()) {
|
||||||
|
System.out.println("❌ Profile name cannot be empty.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
JSONObject request = new JSONObject();
|
JSONObject request = new JSONObject();
|
||||||
request.put("action", "register");
|
request.put("action", "register");
|
||||||
@@ -212,9 +239,9 @@ public class ActionHandler {
|
|||||||
System.err.println("Error fetching chat info: " + e.getMessage());
|
System.err.println("Error fetching chat info: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
// اگر شکست خورد، internalId نامعتبر میسازیم (برای جلوگیری از null)
|
//if invalid make unknown modle
|
||||||
return new ChatEntry(
|
return new ChatEntry(
|
||||||
UUID.randomUUID(), // ساخت یک UUID موقت (ولی اشتباه)
|
UUID.randomUUID(),
|
||||||
receiverId,
|
receiverId,
|
||||||
"[Unknown " + receiverType + "]",
|
"[Unknown " + receiverType + "]",
|
||||||
"",
|
"",
|
||||||
@@ -237,7 +264,7 @@ public class ActionHandler {
|
|||||||
if (response.has("data") && !response.isNull("data")) {
|
if (response.has("data") && !response.isNull("data")) {
|
||||||
JSONObject data = response.getJSONObject("data");
|
JSONObject data = response.getJSONObject("data");
|
||||||
|
|
||||||
// ❗ چک کن که chat_list وجود داره
|
//is chat list available
|
||||||
if (!data.has("chat_list") || data.isNull("chat_list")) {
|
if (!data.has("chat_list") || data.isNull("chat_list")) {
|
||||||
System.out.println("❌ chat_list not found in response data.");
|
System.out.println("❌ chat_list not found in response data.");
|
||||||
return;
|
return;
|
||||||
@@ -283,8 +310,19 @@ public class ActionHandler {
|
|||||||
|
|
||||||
|
|
||||||
public void createGroup() {
|
public void createGroup() {
|
||||||
|
String groupId = null;
|
||||||
|
|
||||||
|
while (groupId == null){
|
||||||
System.out.print("Enter group ID: ");
|
System.out.print("Enter group ID: ");
|
||||||
String groupId = scanner.nextLine();
|
String input = scanner.nextLine();
|
||||||
|
if (!input.trim().isEmpty()) {
|
||||||
|
groupId = input;
|
||||||
|
} else {
|
||||||
|
System.out.println("Group ID can't be empty.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
String groupName = null;
|
String groupName = null;
|
||||||
while (groupName == null) {
|
while (groupName == null) {
|
||||||
System.out.print("Enter group name: ");
|
System.out.print("Enter group name: ");
|
||||||
@@ -311,8 +349,18 @@ public class ActionHandler {
|
|||||||
|
|
||||||
|
|
||||||
public void createChannel() {
|
public void createChannel() {
|
||||||
|
String channelId = null;
|
||||||
|
|
||||||
|
while (channelId == null){
|
||||||
System.out.print("Enter channel ID: ");
|
System.out.print("Enter channel ID: ");
|
||||||
String channelId = scanner.nextLine();
|
String input = scanner.nextLine();
|
||||||
|
if (!input.trim().isEmpty()) {
|
||||||
|
channelId = input;
|
||||||
|
} else {
|
||||||
|
System.out.println("Channel ID can't be empty.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
String channelName = null;
|
String channelName = null;
|
||||||
while (channelName == null) {
|
while (channelName == null) {
|
||||||
System.out.print("Enter channel name: ");
|
System.out.print("Enter channel name: ");
|
||||||
@@ -367,8 +415,8 @@ public class ActionHandler {
|
|||||||
response = incoming;
|
response = incoming;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
// این یک پیام Real-Time است
|
//real time
|
||||||
handleRealTime(incoming); // ✅
|
handleRealTime(incoming);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1377,7 +1425,7 @@ public class ActionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JSONObject selected = eligible.get(choice);
|
JSONObject selected = eligible.get(choice);
|
||||||
String targetInternalUUID = selected.getString("internal_uuid"); // دقت کن internal_uuid
|
String targetInternalUUID = selected.getString("internal_uuid");
|
||||||
|
|
||||||
JSONObject permissions = new JSONObject();
|
JSONObject permissions = new JSONObject();
|
||||||
System.out.print("Can add members? (true/false): ");
|
System.out.print("Can add members? (true/false): ");
|
||||||
@@ -1394,7 +1442,7 @@ public class ActionHandler {
|
|||||||
JSONObject promoteReq = new JSONObject();
|
JSONObject promoteReq = new JSONObject();
|
||||||
promoteReq.put("action", "add_admin_to_group");
|
promoteReq.put("action", "add_admin_to_group");
|
||||||
promoteReq.put("group_id", groupId.toString());
|
promoteReq.put("group_id", groupId.toString());
|
||||||
promoteReq.put("user_id", targetInternalUUID); // ارسال internal_uuid واقعی
|
promoteReq.put("user_id", targetInternalUUID);
|
||||||
promoteReq.put("permissions", permissions);
|
promoteReq.put("permissions", permissions);
|
||||||
|
|
||||||
JSONObject promoteRes = sendWithResponse(promoteReq);
|
JSONObject promoteRes = sendWithResponse(promoteReq);
|
||||||
@@ -2111,26 +2159,7 @@ public class ActionHandler {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void addAdminToEntity(String type, UUID entityId) {
|
|
||||||
System.out.print("Enter user ID to promote to admin: ");
|
|
||||||
String targetUserId = scanner.nextLine().trim();
|
|
||||||
|
|
||||||
JSONObject permissions = new JSONObject();
|
|
||||||
System.out.print("Can send messages? (true/false): ");
|
|
||||||
permissions.put("can_send", Boolean.parseBoolean(scanner.nextLine()));
|
|
||||||
System.out.print("Can edit info? (true/false): ");
|
|
||||||
permissions.put("can_edit", Boolean.parseBoolean(scanner.nextLine()));
|
|
||||||
|
|
||||||
JSONObject req = new JSONObject();
|
|
||||||
req.put("action", type.equals("group") ? "add_admin_to_group" : "add_admin_to_channel");
|
|
||||||
req.put(type + "_id", entityId.toString());
|
|
||||||
req.put("target_user_id", targetUserId);
|
|
||||||
req.put("permissions", permissions);
|
|
||||||
|
|
||||||
send(req);
|
|
||||||
JSONObject res = getResponse();
|
|
||||||
System.out.println(res.getString("message"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void editAdminPermissions(UUID chatId, String chatType) {
|
private void editAdminPermissions(UUID chatId, String chatType) {
|
||||||
@@ -2390,12 +2419,12 @@ public class ActionHandler {
|
|||||||
ActionHandler.requestChatList();
|
ActionHandler.requestChatList();
|
||||||
if (Session.inChatListMenu) {
|
if (Session.inChatListMenu) {
|
||||||
System.out.println("\n📬 Updated Chat List:");
|
System.out.println("\n📬 Updated Chat List:");
|
||||||
ActionHandler.displayChatList(); // این متدی باشه که چتها رو نمایش بده
|
ActionHandler.displayChatList(); //Show chats
|
||||||
System.out.print("Select a chat by number: ");
|
System.out.print("Select a chat by number: ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Thread.sleep(300); // جلوگیری از مصرف بیمورد CPU
|
Thread.sleep(300);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println("❌ ChatStateMonitor crashed: " + e.getMessage());
|
System.out.println("❌ ChatStateMonitor crashed: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@@ -2420,7 +2449,7 @@ public class ActionHandler {
|
|||||||
if (Session.refreshCurrentChatMenu && Session.inChatMenu && Session.currentChatId != null) {
|
if (Session.refreshCurrentChatMenu && Session.inChatMenu && Session.currentChatId != null) {
|
||||||
System.out.println("🔁 [Refresher] Refresh requested. Searching for chat...");
|
System.out.println("🔁 [Refresher] Refresh requested. Searching for chat...");
|
||||||
|
|
||||||
// جستجو در لیست چتها با استفاده از currentChatId
|
|
||||||
ChatEntry chat = Session.chatList.stream()
|
ChatEntry chat = Session.chatList.stream()
|
||||||
.filter(e -> e.getId().toString().equals(Session.currentChatId))
|
.filter(e -> e.getId().toString().equals(Session.currentChatId))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
@@ -2540,20 +2569,7 @@ public class ActionHandler {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// public static void requestPermissions(String chatId, String chatType) {
|
|
||||||
// JSONObject permissionReq = new JSONObject();
|
|
||||||
// permissionReq.put("action", "get_permissions");
|
|
||||||
// permissionReq.put("receiver_id", chatId);
|
|
||||||
// permissionReq.put("receiver_type", chatType);
|
|
||||||
// TelegramClient.send(permissionReq);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public void refreshCurrentChat() {
|
|
||||||
// switch (Session.currentChatType.toLowerCase()) {
|
|
||||||
// case "group" -> showGroupChatMenu(Session.currentChatEntry);
|
|
||||||
// case "channel" -> showChannelChatMenu(Session.currentChatEntry);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
private void startMenuRefresherThread() {
|
private void startMenuRefresherThread() {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.to.telegramfinalproject.Database;
|
|||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.to.telegramfinalproject.Models.Group;
|
import org.to.telegramfinalproject.Models.Group;
|
||||||
|
import org.to.telegramfinalproject.Models.User;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@@ -629,4 +630,53 @@ public class GroupDatabase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isMember(UUID groupId, UUID userId) {
|
||||||
|
String sql = "SELECT 1 FROM group_members WHERE group_id = ? AND user_id = ?";
|
||||||
|
try (Connection conn = ConnectionDb.connect();
|
||||||
|
PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||||
|
stmt.setObject(1, groupId);
|
||||||
|
stmt.setObject(2, userId);
|
||||||
|
ResultSet rs = stmt.executeQuery();
|
||||||
|
return rs.next();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// public static List<User> searchGroupMembers(UUID groupId, String keyword) {
|
||||||
|
// List<User> result = new ArrayList<>();
|
||||||
|
// String sql = """
|
||||||
|
// SELECT u.*
|
||||||
|
// FROM users u
|
||||||
|
// JOIN group_members gm ON gm.user_id = u.internal_uuid
|
||||||
|
// WHERE gm.group_id = ?
|
||||||
|
// AND (
|
||||||
|
// LOWER(u.profile_name) LIKE ?
|
||||||
|
// OR LOWER(u.username) LIKE ?
|
||||||
|
// OR LOWER(u.user_id) LIKE ?
|
||||||
|
// )
|
||||||
|
// """;
|
||||||
|
//
|
||||||
|
// try (Connection conn = ConnectionDb.connect();
|
||||||
|
// PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||||
|
//
|
||||||
|
// stmt.setObject(1, groupId);
|
||||||
|
// String likePattern = "%" + keyword.toLowerCase() + "%";
|
||||||
|
// stmt.setString(2, likePattern);
|
||||||
|
// stmt.setString(3, likePattern);
|
||||||
|
// stmt.setString(4, likePattern);
|
||||||
|
//
|
||||||
|
// ResultSet rs = stmt.executeQuery();
|
||||||
|
// while (rs.next()) {
|
||||||
|
// User user = User.fromResultSet(rs);
|
||||||
|
// result.add(user);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// } catch (SQLException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1672,6 +1672,41 @@ public class ClientHandler implements Runnable {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// case "search_chat_members": {
|
||||||
|
// if (currentUser == null) {
|
||||||
|
// response = new ResponseModel("error", "Unauthorized. Please login first.");
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// UUID chatId = UUID.fromString(requestJson.getString("chat_id"));
|
||||||
|
// String chatType = requestJson.getString("chat_type");
|
||||||
|
// String query = requestJson.getString("query").toLowerCase();
|
||||||
|
//
|
||||||
|
// List<User> matched = new ArrayList<>();
|
||||||
|
//
|
||||||
|
// if (chatType.equals("group")) {
|
||||||
|
// if (!GroupDatabase.isMember(chatId, currentUser.getInternal_uuid())) {
|
||||||
|
// response = new ResponseModel("error", "You are not a member of this group.");
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// matched = GroupDatabase.searchGroupMembers(chatId, query);
|
||||||
|
// } else if (chatType.equals("channel")) {
|
||||||
|
// if (!ChannelDatabase.isAdmin(chatId, currentUser.getInternal_uuid())||!ChannelDatabase.isOwner(chatId, currentUser.getInternal_uuid())) {
|
||||||
|
// response = new ResponseModel("error", "Only admins or owner can search subscribers.");
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// matched = ChannelDatabase.searchSubscribers(chatId, query);
|
||||||
|
// } else {
|
||||||
|
// response = new ResponseModel("error", "Invalid chat type.");
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// JSONArray arr = new JSONArray();
|
||||||
|
// for (User u : matched) arr.put(u.toJSON());
|
||||||
|
// response = new ResponseModel("success", "Results found", Map.of("results", arr));
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user