From: AsamK Date: Sat, 21 Aug 2021 16:31:14 +0000 (+0200) Subject: Add json output listDevices and uploadStickerPack commands X-Git-Tag: v0.9.0~64 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/70fc2381d3c99a5d262ce7cd4c51b46c6d4dff98 Add json output listDevices and uploadStickerPack commands --- diff --git a/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java b/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java index 16f602f1..40f30681 100644 --- a/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java +++ b/src/main/java/org/asamk/signal/commands/ListDevicesCommand.java @@ -3,6 +3,7 @@ package org.asamk.signal.commands; import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Subparser; +import org.asamk.signal.JsonWriter; import org.asamk.signal.OutputWriter; import org.asamk.signal.PlainTextWriter; import org.asamk.signal.commands.exceptions.CommandException; @@ -15,8 +16,9 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.List; +import java.util.stream.Collectors; -public class ListDevicesCommand implements LocalCommand { +public class ListDevicesCommand implements JsonRpcLocalCommand { private final static Logger logger = LoggerFactory.getLogger(ListDevicesCommand.class); @@ -34,8 +36,6 @@ public class ListDevicesCommand implements LocalCommand { public void handleCommand( final Namespace ns, final Manager m, final OutputWriter outputWriter ) throws CommandException { - final var writer = (PlainTextWriter) outputWriter; - List devices; try { devices = m.getLinkedDevices(); @@ -44,13 +44,42 @@ public class ListDevicesCommand implements LocalCommand { throw new IOErrorException("Failed to get linked devices: " + e.getMessage()); } - for (var d : devices) { - writer.println("- Device {}{}:", d.getId(), (d.getId() == m.getDeviceId() ? " (this device)" : "")); - writer.indent(w -> { - w.println("Name: {}", d.getName()); - w.println("Created: {}", DateUtils.formatTimestamp(d.getCreated())); - w.println("Last seen: {}", DateUtils.formatTimestamp(d.getLastSeen())); - }); + if (outputWriter instanceof PlainTextWriter) { + final var writer = (PlainTextWriter) outputWriter; + for (var d : devices) { + writer.println("- Device {}{}:", d.getId(), (d.getId() == m.getDeviceId() ? " (this device)" : "")); + writer.indent(w -> { + w.println("Name: {}", d.getName()); + w.println("Created: {}", DateUtils.formatTimestamp(d.getCreated())); + w.println("Last seen: {}", DateUtils.formatTimestamp(d.getLastSeen())); + }); + } + } else { + final var writer = (JsonWriter) outputWriter; + final var jsonDevices = devices.stream() + .map(d -> new JsonDevice(d.getId(), d.getName(), d.getCreated(), d.getLastSeen())) + .collect(Collectors.toList()); + writer.write(jsonDevices); + } + } + + private static final class JsonDevice { + + public final long id; + public final String name; + public final long createdTimestamp; + public final long lastSeenTimestamp; + + private JsonDevice( + final long id, + final String name, + final long createdTimestamp, + final long lastSeenTimestamp + ) { + this.id = id; + this.name = name; + this.createdTimestamp = createdTimestamp; + this.lastSeenTimestamp = lastSeenTimestamp; } } } diff --git a/src/main/java/org/asamk/signal/commands/UploadStickerPackCommand.java b/src/main/java/org/asamk/signal/commands/UploadStickerPackCommand.java index a5839238..7af6fed8 100644 --- a/src/main/java/org/asamk/signal/commands/UploadStickerPackCommand.java +++ b/src/main/java/org/asamk/signal/commands/UploadStickerPackCommand.java @@ -3,6 +3,7 @@ package org.asamk.signal.commands; import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Subparser; +import org.asamk.signal.JsonWriter; import org.asamk.signal.OutputWriter; import org.asamk.signal.PlainTextWriter; import org.asamk.signal.commands.exceptions.CommandException; @@ -15,8 +16,9 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; +import java.util.Map; -public class UploadStickerPackCommand implements LocalCommand { +public class UploadStickerPackCommand implements JsonRpcLocalCommand { private final static Logger logger = LoggerFactory.getLogger(UploadStickerPackCommand.class); @@ -36,12 +38,17 @@ public class UploadStickerPackCommand implements LocalCommand { public void handleCommand( final Namespace ns, final Manager m, final OutputWriter outputWriter ) throws CommandException { - final var writer = (PlainTextWriter) outputWriter; var path = new File(ns.getString("path")); try { var url = m.uploadStickerPack(path); - writer.println("{}", url); + if (outputWriter instanceof PlainTextWriter) { + final var writer = (PlainTextWriter) outputWriter; + writer.println("{}", url); + } else { + final var writer = (JsonWriter) outputWriter; + writer.write(Map.of("url", url)); + } } catch (IOException e) { throw new IOErrorException("Upload error (maybe image size too large):" + e.getMessage()); } catch (StickerPackInvalidException e) {