X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/faae998a7ee218b6134d0f773471e698d82bbf02..b24fa98e3c0d7d5e122c718daff854bbd1071899:/src/main/java/org/asamk/signal/commands/Commands.java diff --git a/src/main/java/org/asamk/signal/commands/Commands.java b/src/main/java/org/asamk/signal/commands/Commands.java index afd93e32..33caf8ba 100644 --- a/src/main/java/org/asamk/signal/commands/Commands.java +++ b/src/main/java/org/asamk/signal/commands/Commands.java @@ -1,41 +1,74 @@ package org.asamk.signal.commands; +import org.asamk.signal.OutputWriter; + import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; public class Commands { - private static final Map commands = new HashMap<>(); + private static final Map commands = new HashMap<>(); + private static final Map commandSubparserAttacher = new TreeMap<>(); static { - addCommand("addDevice", new AddDeviceCommand()); - addCommand("daemon", new DaemonCommand()); - addCommand("link", new LinkCommand()); - addCommand("listDevices", new ListDevicesCommand()); - addCommand("listGroups", new ListGroupsCommand()); - addCommand("listIdentities", new ListIdentitiesCommand()); - addCommand("quitGroup", new QuitGroupCommand()); - addCommand("receive", new ReceiveCommand()); - addCommand("register", new RegisterCommand()); - addCommand("removeDevice", new RemoveDeviceCommand()); - addCommand("removePin", new RemovePinCommand()); - addCommand("send", new SendCommand()); - addCommand("sendContacts", new SendContactsCommand()); - addCommand("updateContact", new UpdateContactCommand()); - addCommand("setPin", new SetPinCommand()); - addCommand("trust", new TrustCommand()); - addCommand("unregister", new UnregisterCommand()); - addCommand("updateAccount", new UpdateAccountCommand()); - addCommand("updateGroup", new UpdateGroupCommand()); - addCommand("updateProfile", new UpdateProfileCommand()); - addCommand("verify", new VerifyCommand()); + addCommand("addDevice", AddDeviceCommand::new, AddDeviceCommand::attachToSubparser); + addCommand("block", BlockCommand::new, BlockCommand::attachToSubparser); + addCommand("daemon", DaemonCommand::new, DaemonCommand::attachToSubparser); + addCommand("getUserStatus", GetUserStatusCommand::new, GetUserStatusCommand::attachToSubparser); + addCommand("jsonRpc", JsonRpcDispatcherCommand::new, JsonRpcDispatcherCommand::attachToSubparser); + addCommand("link", LinkCommand::new, LinkCommand::attachToSubparser); + addCommand("listContacts", ListContactsCommand::new, ListContactsCommand::attachToSubparser); + addCommand("listDevices", ListDevicesCommand::new, ListDevicesCommand::attachToSubparser); + addCommand("listGroups", ListGroupsCommand::new, ListGroupsCommand::attachToSubparser); + addCommand("listIdentities", ListIdentitiesCommand::new, ListIdentitiesCommand::attachToSubparser); + addCommand("joinGroup", JoinGroupCommand::new, JoinGroupCommand::attachToSubparser); + addCommand("quitGroup", QuitGroupCommand::new, QuitGroupCommand::attachToSubparser); + addCommand("receive", ReceiveCommand::new, ReceiveCommand::attachToSubparser); + addCommand("register", RegisterCommand::new, RegisterCommand::attachToSubparser); + addCommand("removeDevice", RemoveDeviceCommand::new, RemoveDeviceCommand::attachToSubparser); + addCommand("remoteDelete", RemoteDeleteCommand::new, RemoteDeleteCommand::attachToSubparser); + addCommand("removePin", RemovePinCommand::new, RemovePinCommand::attachToSubparser); + addCommand("send", SendCommand::new, SendCommand::attachToSubparser); + addCommand("sendContacts", SendContactsCommand::new, SendContactsCommand::attachToSubparser); + addCommand("sendReaction", SendReactionCommand::new, SendReactionCommand::attachToSubparser); + addCommand("sendSyncRequest", SendSyncRequestCommand::new, SendSyncRequestCommand::attachToSubparser); + addCommand("sendTyping", SendTypingCommand::new, SendTypingCommand::attachToSubparser); + addCommand("setPin", SetPinCommand::new, SetPinCommand::attachToSubparser); + addCommand("trust", TrustCommand::new, TrustCommand::attachToSubparser); + addCommand("unblock", UnblockCommand::new, UnblockCommand::attachToSubparser); + addCommand("unregister", UnregisterCommand::new, UnregisterCommand::attachToSubparser); + addCommand("updateAccount", UpdateAccountCommand::new, UpdateAccountCommand::attachToSubparser); + addCommand("updateContact", UpdateContactCommand::new, UpdateContactCommand::attachToSubparser); + addCommand("updateGroup", UpdateGroupCommand::new, UpdateGroupCommand::attachToSubparser); + addCommand("updateProfile", UpdateProfileCommand::new, UpdateProfileCommand::attachToSubparser); + addCommand("uploadStickerPack", UploadStickerPackCommand::new, UploadStickerPackCommand::attachToSubparser); + addCommand("verify", VerifyCommand::new, VerifyCommand::attachToSubparser); + addCommand("version", VersionCommand::new, null); + } + + public static Map getCommandSubparserAttachers() { + return commandSubparserAttacher; } - public static Map getCommands() { - return commands; + public static Command getCommand(String commandKey, OutputWriter outputWriter) { + if (!commands.containsKey(commandKey)) { + return null; + } + return commands.get(commandKey).constructCommand(outputWriter); } - private static void addCommand(String name, Command command) { - commands.put(name, command); + private static void addCommand( + String name, CommandConstructor commandConstructor, SubparserAttacher subparserAttacher + ) { + commands.put(name, commandConstructor); + if (subparserAttacher != null) { + commandSubparserAttacher.put(name, subparserAttacher); + } + } + + private interface CommandConstructor { + + Command constructCommand(OutputWriter outputWriter); } }