From: AsamK Date: Fri, 2 Jun 2023 20:52:45 +0000 (+0200) Subject: Refactor App init method X-Git-Tag: v0.12.0~39 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/2ae5297f7db07cae8c708cceac33481b7b13ddab?hp=a7db3a5610db2cf718030fbe06e5ebb8531459c8 Refactor App init method --- diff --git a/src/main/java/org/asamk/signal/App.java b/src/main/java/org/asamk/signal/App.java index c31e6f49..fdd88e7c 100644 --- a/src/main/java/org/asamk/signal/App.java +++ b/src/main/java/org/asamk/signal/App.java @@ -26,6 +26,7 @@ import org.asamk.signal.manager.api.NotRegisteredException; import org.asamk.signal.manager.api.ServiceEnvironment; import org.asamk.signal.manager.api.TrustNewIdentity; import org.asamk.signal.output.JsonWriterImpl; +import org.asamk.signal.output.OutputWriter; import org.asamk.signal.output.PlainTextWriterImpl; import org.asamk.signal.util.IOUtils; import org.freedesktop.dbus.connections.impl.DBusConnection; @@ -121,19 +122,7 @@ public class App { throw new UserErrorException("Command not implemented!"); } - var outputTypeInput = ns.get("output"); - var outputType = outputTypeInput == null - ? command.getSupportedOutputTypes().stream().findFirst().orElse(null) - : outputTypeInput; - var writer = new BufferedWriter(new OutputStreamWriter(System.out, IOUtils.getConsoleCharset())); - var outputWriter = outputType == null - ? null - : outputType == OutputType.JSON ? new JsonWriterImpl(writer) : new PlainTextWriterImpl(writer); - - if (outputWriter != null && !command.getSupportedOutputTypes().contains(outputType)) { - throw new UserErrorException("Command doesn't support output type " + outputType); - } - + final var outputWriter = getOutputWriter(command); final var commandHandler = new CommandHandler(ns, outputWriter); var account = ns.getString("account"); @@ -150,36 +139,17 @@ public class App { throw new UserErrorException("Missing required native library dependency: libsignal-client"); } - final File configPath; - var config = ns.getString("config"); - if (config != null) { - configPath = new File(config); - } else { - configPath = getDefaultConfigPath(); - } - - final var serviceEnvironmentCli = ns.get("service-environment"); - final var serviceEnvironment = serviceEnvironmentCli == ServiceEnvironmentCli.LIVE - ? ServiceEnvironment.LIVE - : ServiceEnvironment.STAGING; + final var signalAccountFiles = loadSignalAccountFiles(); - final var trustNewIdentityCli = ns.get("trust-new-identities"); - final var trustNewIdentity = trustNewIdentityCli == TrustNewIdentityCli.ON_FIRST_USE - ? TrustNewIdentity.ON_FIRST_USE - : trustNewIdentityCli == TrustNewIdentityCli.ALWAYS ? TrustNewIdentity.ALWAYS : TrustNewIdentity.NEVER; - - final var disableSendLog = Boolean.TRUE.equals(ns.getBoolean("disable-send-log")); - - final SignalAccountFiles signalAccountFiles; - try { - signalAccountFiles = new SignalAccountFiles(configPath, - serviceEnvironment, - BaseConfig.USER_AGENT, - new Settings(trustNewIdentity, disableSendLog)); - } catch (IOException e) { - throw new IOErrorException("Failed to read local accounts list", e); - } + handleCommand(command, commandHandler, account, signalAccountFiles); + } + private void handleCommand( + final Command command, + final CommandHandler commandHandler, + String account, + final SignalAccountFiles signalAccountFiles + ) throws CommandException { if (command instanceof ProvisioningCommand provisioningCommand) { if (account != null) { throw new UserErrorException("You cannot specify a account (phone number) when linking"); @@ -218,11 +188,59 @@ public class App { return; } - if (!(command instanceof LocalCommand)) { - throw new UserErrorException("Command only works in multi-account mode"); + if (command instanceof LocalCommand localCommand) { + handleLocalCommand(localCommand, account, signalAccountFiles, commandHandler); + } + + throw new UserErrorException("Command only works in multi-account mode"); + } + + private OutputWriter getOutputWriter(final Command command) throws UserErrorException { + final var outputTypeInput = ns.get("output"); + final var outputType = outputTypeInput == null ? command.getSupportedOutputTypes() + .stream() + .findFirst() + .orElse(null) : outputTypeInput; + final var writer = new BufferedWriter(new OutputStreamWriter(System.out, IOUtils.getConsoleCharset())); + final var outputWriter = outputType == null + ? null + : outputType == OutputType.JSON ? new JsonWriterImpl(writer) : new PlainTextWriterImpl(writer); + + if (outputWriter != null && !command.getSupportedOutputTypes().contains(outputType)) { + throw new UserErrorException("Command doesn't support output type " + outputType); + } + return outputWriter; + } + + private SignalAccountFiles loadSignalAccountFiles() throws IOErrorException { + final File configPath; + final var config = ns.getString("config"); + if (config != null) { + configPath = new File(config); + } else { + configPath = getDefaultConfigPath(); } - handleLocalCommand((LocalCommand) command, account, signalAccountFiles, commandHandler); + final var serviceEnvironmentCli = ns.get("service-environment"); + final var serviceEnvironment = serviceEnvironmentCli == ServiceEnvironmentCli.LIVE + ? ServiceEnvironment.LIVE + : ServiceEnvironment.STAGING; + + final var trustNewIdentityCli = ns.get("trust-new-identities"); + final var trustNewIdentity = trustNewIdentityCli == TrustNewIdentityCli.ON_FIRST_USE + ? TrustNewIdentity.ON_FIRST_USE + : trustNewIdentityCli == TrustNewIdentityCli.ALWAYS ? TrustNewIdentity.ALWAYS : TrustNewIdentity.NEVER; + + final var disableSendLog = Boolean.TRUE.equals(ns.getBoolean("disable-send-log")); + + try { + return new SignalAccountFiles(configPath, + serviceEnvironment, + BaseConfig.USER_AGENT, + new Settings(trustNewIdentity, disableSendLog)); + } catch (IOException e) { + throw new IOErrorException("Failed to read local accounts list", e); + } } private void handleProvisioningCommand(