From: Matúš Košút Date: Sat, 16 May 2020 20:55:53 +0000 (+0200) Subject: Contact config - message expiration time (#308) X-Git-Tag: v0.6.8~4 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/b382a4260b367311945344715842588f333af0a6 Contact config - message expiration time (#308) Co-authored-by: Matus Kosut --- diff --git a/man/signal-cli.1.adoc b/man/signal-cli.1.adoc index ecd7ac9f..aeea729a 100644 --- a/man/signal-cli.1.adoc +++ b/man/signal-cli.1.adoc @@ -252,6 +252,10 @@ Specify the contact phone number. *-n*, *--name*:: Specify the new name for this contact. +*-e*, *--expiration*:: +Set expiration time of messages (seconds). +To disable expiration set expiration time to 0. + === block Block the given contacts or groups (no messages will be received). diff --git a/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java b/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java index 77f38e5e..ae84893d 100644 --- a/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java +++ b/src/main/java/org/asamk/signal/commands/UpdateContactCommand.java @@ -3,6 +3,8 @@ package org.asamk.signal.commands; import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Subparser; +import java.io.IOException; + import org.asamk.signal.manager.Manager; import org.whispersystems.signalservice.api.util.InvalidNumberException; @@ -15,6 +17,10 @@ public class UpdateContactCommand implements LocalCommand { subparser.addArgument("-n", "--name") .required(true) .help("New contact name"); + subparser.addArgument("-e", "--expiration") + .required(false) + .type(int.class) + .help("Set expiration time of messages (seconds)"); subparser.help("Update the details of a given contact"); } @@ -30,8 +36,16 @@ public class UpdateContactCommand implements LocalCommand { try { m.setContactName(number, name); + + Integer expiration = ns.getInt("expiration"); + if (expiration != null) { + m.setExpirationTimer(number, expiration); + } } catch (InvalidNumberException e) { System.out.println("Invalid contact number: " + e.getMessage()); + } catch (IOException e) { + System.err.println("Update contact error: " + e.getMessage()); + return 3; } return 0; diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index 01275cec..b88e1a9f 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -758,10 +758,23 @@ public class Manager implements Closeable { /** * Change the expiration timer for a contact */ - public void setExpirationTimer(SignalServiceAddress address, int messageExpirationTimer) { - ContactInfo c = account.getContactStore().getContact(address); - c.messageExpirationTime = messageExpirationTimer; - account.getContactStore().updateContact(c); + public void setExpirationTimer(SignalServiceAddress address, int messageExpirationTimer) throws IOException { + final SignalServiceDataMessage.Builder messageBuilder = SignalServiceDataMessage.newBuilder(); + ContactInfo contact = account.getContactStore().getContact(address); + contact.messageExpirationTime = messageExpirationTimer; + account.getContactStore().updateContact(contact); + account.save(); + messageBuilder.withExpiration(messageExpirationTimer); + messageBuilder.asExpirationUpdate(); + sendMessage(messageBuilder, Collections.singleton(address)); + } + + /** + * Change the expiration timer for a contact + */ + public void setExpirationTimer(String number, int messageExpirationTimer) throws IOException, InvalidNumberException { + SignalServiceAddress address = canonicalizeAndResolveSignalServiceAddress(number); + setExpirationTimer(address, messageExpirationTimer); } /**