]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/App.java
Allow registering new accounts on both live and staging environments
[signal-cli] / src / main / java / org / asamk / signal / App.java
index 5853e4b8322bec2773d73ad2196e909d805aea1d..91af270d7cb38e7bff1f74ffcc60827fcf8d6ea4 100644 (file)
@@ -34,6 +34,7 @@ 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;
+import org.freedesktop.dbus.connections.impl.DBusConnectionBuilder;
 import org.freedesktop.dbus.errors.ServiceUnknown;
 import org.freedesktop.dbus.errors.UnknownMethod;
 import org.freedesktop.dbus.exceptions.DBusException;
@@ -45,7 +46,7 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
-import java.nio.charset.Charset;
+import java.util.Set;
 
 import static net.sourceforge.argparse4j.DefaultSettings.VERSION_0_9_0_DEFAULT_SETTINGS;
 
@@ -122,7 +123,7 @@ public class App {
         var outputType = outputTypeInput == null
                 ? command.getSupportedOutputTypes().stream().findFirst().orElse(null)
                 : outputTypeInput;
-        var writer = new BufferedWriter(new OutputStreamWriter(System.out, Charset.defaultCharset()));
+        var writer = new BufferedWriter(new OutputStreamWriter(System.out, IOUtils.getConsoleCharset()));
         var outputWriter = outputType == null
                 ? null
                 : outputType == OutputType.JSON ? new JsonWriterImpl(writer) : new PlainTextWriterImpl(writer);
@@ -163,10 +164,15 @@ public class App {
                 ? TrustNewIdentity.ON_FIRST_USE
                 : trustNewIdentityCli == TrustNewIdentityCli.ALWAYS ? TrustNewIdentity.ALWAYS : TrustNewIdentity.NEVER;
 
-        final SignalAccountFiles signalAccountFiles = new SignalAccountFiles(configPath,
-                serviceEnvironment,
-                BaseConfig.USER_AGENT,
-                trustNewIdentity);
+        final SignalAccountFiles signalAccountFiles;
+        try {
+            signalAccountFiles = new SignalAccountFiles(configPath,
+                    serviceEnvironment,
+                    BaseConfig.USER_AGENT,
+                    trustNewIdentity);
+        } catch (IOException e) {
+            throw new IOErrorException("Failed to read local accounts list", e);
+        }
 
         if (command instanceof ProvisioningCommand provisioningCommand) {
             if (account != null) {
@@ -183,7 +189,12 @@ public class App {
                 return;
             }
 
-            var accounts = signalAccountFiles.getAllLocalAccountNumbers();
+            Set<String> accounts = null;
+            try {
+                accounts = signalAccountFiles.getAllLocalAccountNumbers();
+            } catch (IOException e) {
+                throw new IOErrorException("Failed to load local accounts file", e);
+            }
             if (accounts.size() == 0) {
                 throw new UserErrorException("No local users found, you first need to register or link an account");
             } else if (accounts.size() > 1) {
@@ -294,6 +305,8 @@ public class App {
     ) throws CommandException {
         try (var multiAccountManager = signalAccountFiles.initMultiAccountManager()) {
             command.handleCommand(ns, multiAccountManager, outputWriter);
+        } catch (IOException e) {
+            throw new IOErrorException("Failed to load local accounts file", e);
         }
     }
 
@@ -360,7 +373,7 @@ public class App {
             } else {
                 busType = DBusConnection.DBusBusType.SESSION;
             }
-            try (var dBusConn = DBusConnection.getConnection(busType)) {
+            try (var dBusConn = DBusConnectionBuilder.forType(busType).build()) {
                 if (command instanceof ProvisioningCommand c) {
                     if (account != null) {
                         throw new UserErrorException("You cannot specify a account (phone number) when linking");