From 2044a7d7a58ada7ca1e67a80012e3ffdaf86c88c Mon Sep 17 00:00:00 2001 From: AsamK Date: Wed, 8 Sep 2021 20:38:24 +0200 Subject: [PATCH] Print stack trace of exception causes in verbose mode --- src/main/java/org/asamk/signal/App.java | 10 +++++----- src/main/java/org/asamk/signal/Main.java | 6 +++++- .../org/asamk/signal/commands/AddDeviceCommand.java | 4 ++-- .../java/org/asamk/signal/commands/BlockCommand.java | 4 ++-- .../org/asamk/signal/commands/DaemonCommand.java | 4 ++-- .../asamk/signal/commands/GetUserStatusCommand.java | 3 +-- .../org/asamk/signal/commands/JoinGroupCommand.java | 4 ++-- .../java/org/asamk/signal/commands/LinkCommand.java | 2 +- .../asamk/signal/commands/ListDevicesCommand.java | 8 ++------ .../org/asamk/signal/commands/QuitGroupCommand.java | 2 +- .../org/asamk/signal/commands/ReceiveCommand.java | 4 ++-- .../org/asamk/signal/commands/RegisterCommand.java | 2 +- .../asamk/signal/commands/RemoteDeleteCommand.java | 4 ++-- .../asamk/signal/commands/RemoveDeviceCommand.java | 2 +- .../org/asamk/signal/commands/RemovePinCommand.java | 4 ++-- .../java/org/asamk/signal/commands/SendCommand.java | 12 ++++++------ .../asamk/signal/commands/SendContactsCommand.java | 2 +- .../asamk/signal/commands/SendReactionCommand.java | 4 ++-- .../signal/commands/SendSyncRequestCommand.java | 2 +- .../org/asamk/signal/commands/SetPinCommand.java | 5 +++-- .../org/asamk/signal/commands/UnblockCommand.java | 4 ++-- .../org/asamk/signal/commands/UnregisterCommand.java | 2 +- .../asamk/signal/commands/UpdateAccountCommand.java | 2 +- .../asamk/signal/commands/UpdateContactCommand.java | 2 +- .../asamk/signal/commands/UpdateGroupCommand.java | 4 ++-- .../asamk/signal/commands/UpdateProfileCommand.java | 2 +- .../signal/commands/UploadStickerPackCommand.java | 2 +- .../org/asamk/signal/commands/VerifyCommand.java | 4 ++-- .../signal/commands/exceptions/CommandException.java | 4 ++++ .../signal/commands/exceptions/IOErrorException.java | 6 ++++-- .../exceptions/UnexpectedErrorException.java | 4 ++-- src/main/java/org/asamk/signal/util/ErrorUtils.java | 2 +- 32 files changed, 66 insertions(+), 60 deletions(-) diff --git a/src/main/java/org/asamk/signal/App.java b/src/main/java/org/asamk/signal/App.java index 1ff1a909..4aa510d6 100644 --- a/src/main/java/org/asamk/signal/App.java +++ b/src/main/java/org/asamk/signal/App.java @@ -16,6 +16,7 @@ import org.asamk.signal.commands.ProvisioningCommand; import org.asamk.signal.commands.RegistrationCommand; import org.asamk.signal.commands.SignalCreator; import org.asamk.signal.commands.exceptions.CommandException; +import org.asamk.signal.commands.exceptions.IOErrorException; import org.asamk.signal.commands.exceptions.UnexpectedErrorException; import org.asamk.signal.commands.exceptions.UserErrorException; import org.asamk.signal.manager.Manager; @@ -225,7 +226,7 @@ public class App { + e.getMessage() + " (" + e.getClass().getSimpleName() - + ")"); + + ")", e); } try (var m = manager) { command.handleCommand(ns, m); @@ -299,20 +300,19 @@ public class App { } catch (NotRegisteredException e) { throw new UserErrorException("User " + username + " is not registered."); } catch (Throwable e) { - logger.debug("Loading state file failed", e); throw new UnexpectedErrorException("Error loading state file for user " + username + ": " + e.getMessage() + " (" + e.getClass().getSimpleName() - + ")"); + + ")", e); } try { manager.checkAccountState(); } catch (IOException e) { - throw new UnexpectedErrorException("Error while checking account " + username + ": " + e.getMessage()); + throw new IOErrorException("Error while checking account " + username + ": " + e.getMessage(), e); } return manager; @@ -337,7 +337,7 @@ public class App { } } catch (DBusException | IOException e) { logger.error("Dbus client failed", e); - throw new UnexpectedErrorException("Dbus client failed"); + throw new UnexpectedErrorException("Dbus client failed", e); } } diff --git a/src/main/java/org/asamk/signal/Main.java b/src/main/java/org/asamk/signal/Main.java index e0747500..fc63b89e 100644 --- a/src/main/java/org/asamk/signal/Main.java +++ b/src/main/java/org/asamk/signal/Main.java @@ -40,7 +40,8 @@ public class Main { installSecurityProviderWorkaround(); // Configuring the logger needs to happen before any logger is initialized - configureLogging(isVerbose(args)); + final var isVerbose = isVerbose(args); + configureLogging(isVerbose); var parser = App.buildArgumentParser(); @@ -51,6 +52,9 @@ public class Main { new App(ns).init(); } catch (CommandException e) { System.err.println(e.getMessage()); + if (isVerbose && e.getCause() != null) { + e.getCause().printStackTrace(); + } status = getStatusForError(e); } System.exit(status); diff --git a/src/main/java/org/asamk/signal/commands/AddDeviceCommand.java b/src/main/java/org/asamk/signal/commands/AddDeviceCommand.java index 1616a01f..e609ec1e 100644 --- a/src/main/java/org/asamk/signal/commands/AddDeviceCommand.java +++ b/src/main/java/org/asamk/signal/commands/AddDeviceCommand.java @@ -42,12 +42,12 @@ public class AddDeviceCommand implements JsonRpcLocalCommand { m.addDeviceLink(new URI(ns.getString("uri"))); } catch (IOException e) { logger.error("Add device link failed", e); - throw new IOErrorException("Add device link failed"); + throw new IOErrorException("Add device link failed", e); } catch (URISyntaxException e) { throw new UserErrorException("Device link uri has invalid format: " + e.getMessage()); } catch (InvalidKeyException e) { logger.error("Add device link failed", e); - throw new UnexpectedErrorException("Add device link failed."); + throw new UnexpectedErrorException("Add device link failed.", e); } } } diff --git a/src/main/java/org/asamk/signal/commands/BlockCommand.java b/src/main/java/org/asamk/signal/commands/BlockCommand.java index 77a622b1..5394022e 100644 --- a/src/main/java/org/asamk/signal/commands/BlockCommand.java +++ b/src/main/java/org/asamk/signal/commands/BlockCommand.java @@ -43,7 +43,7 @@ public class BlockCommand implements JsonRpcLocalCommand { } catch (NotMasterDeviceException e) { throw new UserErrorException("This command doesn't work on linked devices."); } catch (IOException e) { - throw new UnexpectedErrorException("Failed to sync block to linked devices: " + e.getMessage()); + throw new UnexpectedErrorException("Failed to sync block to linked devices: " + e.getMessage(), e); } } @@ -55,7 +55,7 @@ public class BlockCommand implements JsonRpcLocalCommand { } catch (GroupNotFoundException e) { logger.warn("Group not found {}: {}", groupId.toBase64(), e.getMessage()); } catch (IOException e) { - throw new UnexpectedErrorException("Failed to sync block to linked devices: " + e.getMessage()); + throw new UnexpectedErrorException("Failed to sync block to linked devices: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/DaemonCommand.java b/src/main/java/org/asamk/signal/commands/DaemonCommand.java index 0591486c..4a322b99 100644 --- a/src/main/java/org/asamk/signal/commands/DaemonCommand.java +++ b/src/main/java/org/asamk/signal/commands/DaemonCommand.java @@ -75,7 +75,7 @@ public class DaemonCommand implements MultiLocalCommand { } } catch (DBusException | IOException e) { logger.error("Dbus command failed", e); - throw new UnexpectedErrorException("Dbus command failed"); + throw new UnexpectedErrorException("Dbus command failed", e); } } @@ -113,7 +113,7 @@ public class DaemonCommand implements MultiLocalCommand { signalControl.run(); } catch (DBusException | IOException e) { logger.error("Dbus command failed", e); - throw new UnexpectedErrorException("Dbus command failed"); + throw new UnexpectedErrorException("Dbus command failed", e); } } diff --git a/src/main/java/org/asamk/signal/commands/GetUserStatusCommand.java b/src/main/java/org/asamk/signal/commands/GetUserStatusCommand.java index cf4be085..316f59b1 100644 --- a/src/main/java/org/asamk/signal/commands/GetUserStatusCommand.java +++ b/src/main/java/org/asamk/signal/commands/GetUserStatusCommand.java @@ -43,8 +43,7 @@ public class GetUserStatusCommand implements JsonRpcLocalCommand { try { registered = m.areUsersRegistered(new HashSet<>(ns.getList("recipient"))); } catch (IOException e) { - logger.debug("Failed to check registered users", e); - throw new IOErrorException("Unable to check if users are registered"); + throw new IOErrorException("Unable to check if users are registered", e); } // Output diff --git a/src/main/java/org/asamk/signal/commands/JoinGroupCommand.java b/src/main/java/org/asamk/signal/commands/JoinGroupCommand.java index 8c1b9fb2..f5585881 100644 --- a/src/main/java/org/asamk/signal/commands/JoinGroupCommand.java +++ b/src/main/java/org/asamk/signal/commands/JoinGroupCommand.java @@ -78,10 +78,10 @@ public class JoinGroupCommand implements JsonRpcLocalCommand { + e.getMessage() + " (" + e.getClass().getSimpleName() - + ")"); + + ")", e); } catch (DBusExecutionException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } catch (GroupLinkNotActiveException e) { throw new UserErrorException("Group link is not valid: " + e.getMessage()); } diff --git a/src/main/java/org/asamk/signal/commands/LinkCommand.java b/src/main/java/org/asamk/signal/commands/LinkCommand.java index 9fcaf04d..fbc03300 100644 --- a/src/main/java/org/asamk/signal/commands/LinkCommand.java +++ b/src/main/java/org/asamk/signal/commands/LinkCommand.java @@ -49,7 +49,7 @@ public class LinkCommand implements ProvisioningCommand { } catch (TimeoutException e) { throw new UserErrorException("Link request timed out, please try again."); } catch (IOException e) { - throw new IOErrorException("Link request error: " + e.getMessage()); + throw new IOErrorException("Link request error: " + e.getMessage(), e); } catch (UserAlreadyExists e) { throw new UserErrorException("The user " + e.getUsername() diff --git a/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java b/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java index 40f30681..ad0d3531 100644 --- a/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java +++ b/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java @@ -40,8 +40,7 @@ public class ListDevicesCommand implements JsonRpcLocalCommand { try { devices = m.getLinkedDevices(); } catch (IOException e) { - logger.debug("Failed to get linked devices", e); - throw new IOErrorException("Failed to get linked devices: " + e.getMessage()); + throw new IOErrorException("Failed to get linked devices: " + e.getMessage(), e); } if (outputWriter instanceof PlainTextWriter) { @@ -71,10 +70,7 @@ public class ListDevicesCommand implements JsonRpcLocalCommand { public final long lastSeenTimestamp; private JsonDevice( - final long id, - final String name, - final long createdTimestamp, - final long lastSeenTimestamp + final long id, final String name, final long createdTimestamp, final long lastSeenTimestamp ) { this.id = id; this.name = name; diff --git a/src/main/java/org/asamk/signal/commands/QuitGroupCommand.java b/src/main/java/org/asamk/signal/commands/QuitGroupCommand.java index c64d19cc..67a6596b 100644 --- a/src/main/java/org/asamk/signal/commands/QuitGroupCommand.java +++ b/src/main/java/org/asamk/signal/commands/QuitGroupCommand.java @@ -70,7 +70,7 @@ public class QuitGroupCommand implements JsonRpcLocalCommand { + e.getMessage() + " (" + e.getClass().getSimpleName() - + ")"); + + ")", e); } catch (GroupNotFoundException e) { throw new UserErrorException("Failed to send to group: " + e.getMessage()); } catch (LastGroupAdminException e) { diff --git a/src/main/java/org/asamk/signal/commands/ReceiveCommand.java b/src/main/java/org/asamk/signal/commands/ReceiveCommand.java index f248d662..62b3164b 100644 --- a/src/main/java/org/asamk/signal/commands/ReceiveCommand.java +++ b/src/main/java/org/asamk/signal/commands/ReceiveCommand.java @@ -126,7 +126,7 @@ public class ReceiveCommand implements ExtendedDbusCommand, LocalCommand { } } catch (DBusException e) { logger.error("Dbus client failed", e); - throw new UnexpectedErrorException("Dbus client failed"); + throw new UnexpectedErrorException("Dbus client failed", e); } while (true) { try { @@ -157,7 +157,7 @@ public class ReceiveCommand implements ExtendedDbusCommand, LocalCommand { ignoreAttachments, handler); } catch (IOException e) { - throw new IOErrorException("Error while receiving messages: " + e.getMessage()); + throw new IOErrorException("Error while receiving messages: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/RegisterCommand.java b/src/main/java/org/asamk/signal/commands/RegisterCommand.java index dad692d2..96530889 100644 --- a/src/main/java/org/asamk/signal/commands/RegisterCommand.java +++ b/src/main/java/org/asamk/signal/commands/RegisterCommand.java @@ -49,7 +49,7 @@ public class RegisterCommand implements RegistrationCommand { } throw new UserErrorException(message); } catch (IOException e) { - throw new IOErrorException("Request verify error: " + e.getMessage()); + throw new IOErrorException("Request verify error: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/RemoteDeleteCommand.java b/src/main/java/org/asamk/signal/commands/RemoteDeleteCommand.java index 6e1e92f7..7d7067c4 100644 --- a/src/main/java/org/asamk/signal/commands/RemoteDeleteCommand.java +++ b/src/main/java/org/asamk/signal/commands/RemoteDeleteCommand.java @@ -65,7 +65,7 @@ public class RemoteDeleteCommand implements DbusCommand, JsonRpcLocalCommand { throw new UserErrorException(e.getMessage()); } catch (IOException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } } @@ -106,7 +106,7 @@ public class RemoteDeleteCommand implements DbusCommand, JsonRpcLocalCommand { throw new UserErrorException("Failed to send to group: " + e.getMessage()); } catch (DBusExecutionException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } } diff --git a/src/main/java/org/asamk/signal/commands/RemoveDeviceCommand.java b/src/main/java/org/asamk/signal/commands/RemoveDeviceCommand.java index 1f47e2b3..d67cc5ea 100644 --- a/src/main/java/org/asamk/signal/commands/RemoveDeviceCommand.java +++ b/src/main/java/org/asamk/signal/commands/RemoveDeviceCommand.java @@ -34,7 +34,7 @@ public class RemoveDeviceCommand implements JsonRpcLocalCommand { int deviceId = ns.getInt("device-id"); m.removeLinkedDevices(deviceId); } catch (IOException e) { - throw new IOErrorException("Error while removing device: " + e.getMessage()); + throw new IOErrorException("Error while removing device: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/RemovePinCommand.java b/src/main/java/org/asamk/signal/commands/RemovePinCommand.java index 42ca8880..d1ad276a 100644 --- a/src/main/java/org/asamk/signal/commands/RemovePinCommand.java +++ b/src/main/java/org/asamk/signal/commands/RemovePinCommand.java @@ -32,9 +32,9 @@ public class RemovePinCommand implements JsonRpcLocalCommand { try { m.setRegistrationLockPin(Optional.absent()); } catch (UnauthenticatedResponseException e) { - throw new UnexpectedErrorException("Remove pin failed with unauthenticated response: " + e.getMessage()); + throw new UnexpectedErrorException("Remove pin failed with unauthenticated response: " + e.getMessage(), e); } catch (IOException e) { - throw new IOErrorException("Remove pin error: " + e.getMessage()); + throw new IOErrorException("Remove pin error: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/SendCommand.java b/src/main/java/org/asamk/signal/commands/SendCommand.java index 7ab445fc..1973b1a1 100644 --- a/src/main/java/org/asamk/signal/commands/SendCommand.java +++ b/src/main/java/org/asamk/signal/commands/SendCommand.java @@ -86,7 +86,7 @@ public class SendCommand implements DbusCommand, JsonRpcLocalCommand { return; } catch (IOException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } } @@ -110,7 +110,7 @@ public class SendCommand implements DbusCommand, JsonRpcLocalCommand { ErrorUtils.handleSendMessageResults(results.getResults()); } catch (AttachmentInvalidException | IOException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) { throw new UserErrorException(e.getMessage()); } @@ -147,7 +147,7 @@ public class SendCommand implements DbusCommand, JsonRpcLocalCommand { .getSimpleName() + ")"); } catch (DBusExecutionException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } } @@ -176,7 +176,7 @@ public class SendCommand implements DbusCommand, JsonRpcLocalCommand { outputResult(outputWriter, timestamp); return; } catch (DBusExecutionException e) { - throw new UnexpectedErrorException("Failed to send group message: " + e.getMessage()); + throw new UnexpectedErrorException("Failed to send group message: " + e.getMessage(), e); } } @@ -189,7 +189,7 @@ public class SendCommand implements DbusCommand, JsonRpcLocalCommand { throw new UntrustedKeyErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() .getSimpleName() + ")"); } catch (DBusExecutionException e) { - throw new UnexpectedErrorException("Failed to send note to self message: " + e.getMessage()); + throw new UnexpectedErrorException("Failed to send note to self message: " + e.getMessage(), e); } } @@ -203,7 +203,7 @@ public class SendCommand implements DbusCommand, JsonRpcLocalCommand { .getSimpleName() + ")"); } catch (DBusExecutionException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } } diff --git a/src/main/java/org/asamk/signal/commands/SendContactsCommand.java b/src/main/java/org/asamk/signal/commands/SendContactsCommand.java index 07dca322..1cc59bff 100644 --- a/src/main/java/org/asamk/signal/commands/SendContactsCommand.java +++ b/src/main/java/org/asamk/signal/commands/SendContactsCommand.java @@ -29,7 +29,7 @@ public class SendContactsCommand implements JsonRpcLocalCommand { try { m.sendContacts(); } catch (IOException e) { - throw new IOErrorException("SendContacts error: " + e.getMessage()); + throw new IOErrorException("SendContacts error: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/SendReactionCommand.java b/src/main/java/org/asamk/signal/commands/SendReactionCommand.java index 11a16b2e..338e70ac 100644 --- a/src/main/java/org/asamk/signal/commands/SendReactionCommand.java +++ b/src/main/java/org/asamk/signal/commands/SendReactionCommand.java @@ -81,7 +81,7 @@ public class SendReactionCommand implements DbusCommand, JsonRpcLocalCommand { throw new UserErrorException(e.getMessage()); } catch (IOException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } } @@ -129,7 +129,7 @@ public class SendReactionCommand implements DbusCommand, JsonRpcLocalCommand { throw new UserErrorException("Failed to send to group: " + e.getMessage()); } catch (DBusExecutionException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } } diff --git a/src/main/java/org/asamk/signal/commands/SendSyncRequestCommand.java b/src/main/java/org/asamk/signal/commands/SendSyncRequestCommand.java index e9a2f94e..aef2d410 100644 --- a/src/main/java/org/asamk/signal/commands/SendSyncRequestCommand.java +++ b/src/main/java/org/asamk/signal/commands/SendSyncRequestCommand.java @@ -29,7 +29,7 @@ public class SendSyncRequestCommand implements JsonRpcLocalCommand { try { m.requestAllSyncData(); } catch (IOException e) { - throw new IOErrorException("Request sync data error: " + e.getMessage()); + throw new IOErrorException("Request sync data error: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/SetPinCommand.java b/src/main/java/org/asamk/signal/commands/SetPinCommand.java index 3636a8b1..ec4a0e3b 100644 --- a/src/main/java/org/asamk/signal/commands/SetPinCommand.java +++ b/src/main/java/org/asamk/signal/commands/SetPinCommand.java @@ -35,9 +35,10 @@ public class SetPinCommand implements JsonRpcLocalCommand { var registrationLockPin = ns.getString("pin"); m.setRegistrationLockPin(Optional.of(registrationLockPin)); } catch (UnauthenticatedResponseException e) { - throw new UnexpectedErrorException("Set pin error failed with unauthenticated response: " + e.getMessage()); + throw new UnexpectedErrorException("Set pin error failed with unauthenticated response: " + e.getMessage(), + e); } catch (IOException e) { - throw new IOErrorException("Set pin error: " + e.getMessage()); + throw new IOErrorException("Set pin error: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/UnblockCommand.java b/src/main/java/org/asamk/signal/commands/UnblockCommand.java index 46bd9daa..812065bc 100644 --- a/src/main/java/org/asamk/signal/commands/UnblockCommand.java +++ b/src/main/java/org/asamk/signal/commands/UnblockCommand.java @@ -42,7 +42,7 @@ public class UnblockCommand implements JsonRpcLocalCommand { } catch (NotMasterDeviceException e) { throw new UserErrorException("This command doesn't work on linked devices."); } catch (IOException e) { - throw new UnexpectedErrorException("Failed to sync unblock to linked devices: " + e.getMessage()); + throw new UnexpectedErrorException("Failed to sync unblock to linked devices: " + e.getMessage(), e); } } @@ -53,7 +53,7 @@ public class UnblockCommand implements JsonRpcLocalCommand { } catch (GroupNotFoundException e) { logger.warn("Unknown group id: {}", groupId); } catch (IOException e) { - throw new UnexpectedErrorException("Failed to sync unblock to linked devices: " + e.getMessage()); + throw new UnexpectedErrorException("Failed to sync unblock to linked devices: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/UnregisterCommand.java b/src/main/java/org/asamk/signal/commands/UnregisterCommand.java index cf09c480..60260046 100644 --- a/src/main/java/org/asamk/signal/commands/UnregisterCommand.java +++ b/src/main/java/org/asamk/signal/commands/UnregisterCommand.java @@ -37,7 +37,7 @@ public class UnregisterCommand implements LocalCommand { m.unregister(); } } catch (IOException e) { - throw new IOErrorException("Unregister error: " + e.getMessage()); + throw new IOErrorException("Unregister error: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/UpdateAccountCommand.java b/src/main/java/org/asamk/signal/commands/UpdateAccountCommand.java index 600a38c4..e8211aee 100644 --- a/src/main/java/org/asamk/signal/commands/UpdateAccountCommand.java +++ b/src/main/java/org/asamk/signal/commands/UpdateAccountCommand.java @@ -31,7 +31,7 @@ public class UpdateAccountCommand implements JsonRpcLocalCommand { try { m.updateAccountAttributes(deviceName); } catch (IOException e) { - throw new IOErrorException("UpdateAccount error: " + e.getMessage()); + throw new IOErrorException("UpdateAccount error: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java b/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java index 8b9f9aa5..6c2916eb 100644 --- a/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java +++ b/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java @@ -46,7 +46,7 @@ public class UpdateContactCommand implements JsonRpcLocalCommand { m.setContactName(recipient, name); } } catch (IOException e) { - throw new IOErrorException("Update contact error: " + e.getMessage()); + throw new IOErrorException("Update contact error: " + e.getMessage(), e); } catch (NotMasterDeviceException e) { throw new UserErrorException("This command doesn't work on linked devices."); } diff --git a/src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java b/src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java index 6df70ac2..b0269894 100644 --- a/src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java +++ b/src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java @@ -175,7 +175,7 @@ public class UpdateGroupCommand implements DbusCommand, JsonRpcLocalCommand { throw new UserErrorException(e.getMessage()); } catch (IOException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } } @@ -212,7 +212,7 @@ public class UpdateGroupCommand implements DbusCommand, JsonRpcLocalCommand { throw new UserErrorException("Failed to add avatar attachment for group\": " + e.getMessage()); } catch (DBusExecutionException e) { throw new UnexpectedErrorException("Failed to send message: " + e.getMessage() + " (" + e.getClass() - .getSimpleName() + ")"); + .getSimpleName() + ")", e); } } diff --git a/src/main/java/org/asamk/signal/commands/UpdateProfileCommand.java b/src/main/java/org/asamk/signal/commands/UpdateProfileCommand.java index 15c29e85..f6dcb30e 100644 --- a/src/main/java/org/asamk/signal/commands/UpdateProfileCommand.java +++ b/src/main/java/org/asamk/signal/commands/UpdateProfileCommand.java @@ -51,7 +51,7 @@ public class UpdateProfileCommand implements JsonRpcLocalCommand { try { m.setProfile(givenName, familyName, about, aboutEmoji, avatarFile); } catch (IOException e) { - throw new IOErrorException("Update profile error: " + e.getMessage()); + throw new IOErrorException("Update profile error: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/UploadStickerPackCommand.java b/src/main/java/org/asamk/signal/commands/UploadStickerPackCommand.java index 7af6fed8..53b64b8c 100644 --- a/src/main/java/org/asamk/signal/commands/UploadStickerPackCommand.java +++ b/src/main/java/org/asamk/signal/commands/UploadStickerPackCommand.java @@ -50,7 +50,7 @@ public class UploadStickerPackCommand implements JsonRpcLocalCommand { writer.write(Map.of("url", url)); } } catch (IOException e) { - throw new IOErrorException("Upload error (maybe image size too large):" + e.getMessage()); + throw new IOErrorException("Upload error (maybe image size too large):" + e.getMessage(), e); } catch (StickerPackInvalidException e) { throw new UserErrorException("Invalid sticker pack: " + e.getMessage()); } diff --git a/src/main/java/org/asamk/signal/commands/VerifyCommand.java b/src/main/java/org/asamk/signal/commands/VerifyCommand.java index 2f9388ba..b7fffcd2 100644 --- a/src/main/java/org/asamk/signal/commands/VerifyCommand.java +++ b/src/main/java/org/asamk/signal/commands/VerifyCommand.java @@ -44,9 +44,9 @@ public class VerifyCommand implements RegistrationCommand { } catch (KeyBackupServicePinException e) { throw new UserErrorException("Verification failed! Invalid pin, tries remaining: " + e.getTriesRemaining()); } catch (KeyBackupSystemNoDataException e) { - throw new UnexpectedErrorException("Verification failed! No KBS data."); + throw new UnexpectedErrorException("Verification failed! No KBS data.", e); } catch (IOException e) { - throw new IOErrorException("Verify error: " + e.getMessage()); + throw new IOErrorException("Verify error: " + e.getMessage(), e); } } } diff --git a/src/main/java/org/asamk/signal/commands/exceptions/CommandException.java b/src/main/java/org/asamk/signal/commands/exceptions/CommandException.java index c82ef542..bae7af43 100644 --- a/src/main/java/org/asamk/signal/commands/exceptions/CommandException.java +++ b/src/main/java/org/asamk/signal/commands/exceptions/CommandException.java @@ -5,4 +5,8 @@ public class CommandException extends Exception { public CommandException(final String message) { super(message); } + + public CommandException(final String message, final Throwable cause) { + super(message, cause); + } } diff --git a/src/main/java/org/asamk/signal/commands/exceptions/IOErrorException.java b/src/main/java/org/asamk/signal/commands/exceptions/IOErrorException.java index e405600c..91436693 100644 --- a/src/main/java/org/asamk/signal/commands/exceptions/IOErrorException.java +++ b/src/main/java/org/asamk/signal/commands/exceptions/IOErrorException.java @@ -1,8 +1,10 @@ package org.asamk.signal.commands.exceptions; +import java.io.IOException; + public final class IOErrorException extends CommandException { - public IOErrorException(final String message) { - super(message); + public IOErrorException(final String message, IOException cause) { + super(message, cause); } } diff --git a/src/main/java/org/asamk/signal/commands/exceptions/UnexpectedErrorException.java b/src/main/java/org/asamk/signal/commands/exceptions/UnexpectedErrorException.java index b6f231df..7e893d35 100644 --- a/src/main/java/org/asamk/signal/commands/exceptions/UnexpectedErrorException.java +++ b/src/main/java/org/asamk/signal/commands/exceptions/UnexpectedErrorException.java @@ -2,7 +2,7 @@ package org.asamk.signal.commands.exceptions; public final class UnexpectedErrorException extends CommandException { - public UnexpectedErrorException(final String message) { - super(message); + public UnexpectedErrorException(final String message, final Throwable cause) { + super(message, cause); } } diff --git a/src/main/java/org/asamk/signal/util/ErrorUtils.java b/src/main/java/org/asamk/signal/util/ErrorUtils.java index 8a3de142..39e32198 100644 --- a/src/main/java/org/asamk/signal/util/ErrorUtils.java +++ b/src/main/java/org/asamk/signal/util/ErrorUtils.java @@ -88,6 +88,6 @@ public class ErrorUtils { for (var error : errors) { message.append(error).append("\n"); } - throw new IOErrorException(message.toString()); + throw new IOErrorException(message.toString(), null); } } -- 2.50.1