mirror of
https://github.com/AsamK/signal-cli.git
synced 2026-07-27 00:39:26 +00:00
print qr code when producing a device link uri, but only if System.console is not null
This commit is contained in:
parent
de42f55e37
commit
5795d43d0d
@ -88,6 +88,7 @@ dependencies {
|
||||
implementation(libs.slf4j.api)
|
||||
implementation(libs.slf4j.jul)
|
||||
implementation(libs.logback)
|
||||
implementation(libs.zxing)
|
||||
implementation(project(":libsignal-cli"))
|
||||
}
|
||||
|
||||
|
||||
@ -7,6 +7,7 @@ bouncycastle = "org.bouncycastle:bcprov-jdk18on:1.83"
|
||||
jackson-databind = "com.fasterxml.jackson.core:jackson-databind:2.20.2"
|
||||
argparse4j = "net.sourceforge.argparse4j:argparse4j:0.9.0"
|
||||
dbusjava = "com.github.hypfvieh:dbus-java-transport-native-unixsocket:5.0.0"
|
||||
zxing = "com.google.zxing:core:3.5.4"
|
||||
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
|
||||
slf4j-jul = { module = "org.slf4j:jul-to-slf4j", version.ref = "slf4j" }
|
||||
logback = "ch.qos.logback:logback-classic:1.5.29"
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
package org.asamk.signal.commands;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
import com.google.zxing.WriterException;
|
||||
import com.google.zxing.common.BitMatrix;
|
||||
import com.google.zxing.qrcode.QRCodeWriter;
|
||||
|
||||
import net.sourceforge.argparse4j.inf.Namespace;
|
||||
import net.sourceforge.argparse4j.inf.Subparser;
|
||||
|
||||
@ -14,6 +19,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
public class LinkCommand implements ProvisioningCommand {
|
||||
@ -44,7 +50,11 @@ public class LinkCommand implements ProvisioningCommand {
|
||||
deviceName = "cli";
|
||||
}
|
||||
try {
|
||||
writer.println("{}", m.getDeviceLinkUri());
|
||||
final URI deviceLinkUri = m.getDeviceLinkUri();
|
||||
if (System.console() != null) {
|
||||
printQrCode(writer, deviceLinkUri);
|
||||
}
|
||||
writer.println("{}", deviceLinkUri);
|
||||
var number = m.finishDeviceLink(deviceName);
|
||||
writer.println("Associated with: {}", number);
|
||||
} catch (TimeoutException e) {
|
||||
@ -59,4 +69,25 @@ public class LinkCommand implements ProvisioningCommand {
|
||||
+ "\" before trying again.");
|
||||
}
|
||||
}
|
||||
|
||||
private void printQrCode(final PlainTextWriter writer, final URI deviceLinkUri) {
|
||||
try {
|
||||
var bitMatrix = new QRCodeWriter().encode(deviceLinkUri.toString(), BarcodeFormat.QR_CODE, 0, 0);
|
||||
for (int y = 0; y < bitMatrix.getHeight(); y += 2) {
|
||||
writer.println(formatQRCodeLinePair(bitMatrix, y));
|
||||
}
|
||||
} catch (WriterException e) {
|
||||
logger.error("Failed to generate QR code", e);
|
||||
}
|
||||
}
|
||||
|
||||
private static String formatQRCodeLinePair(final BitMatrix bitMatrix, final int y) {
|
||||
var line = new StringBuilder();
|
||||
for (int x = 0; x < bitMatrix.getWidth(); x++) {
|
||||
boolean upper = bitMatrix.get(x, y);
|
||||
boolean lower = y + 1 < bitMatrix.getHeight() && bitMatrix.get(x, y + 1);
|
||||
line.append((upper && lower) ? "█" : (upper ? "▀" : (lower ? "▄" : " ")));
|
||||
}
|
||||
return line.toString();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user