diff --git a/example/pom.xml b/example/pom.xml
index f9a92ee..3653b1e 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -25,7 +25,7 @@
it.tdlight
tdlight-java
- 2.7.8.3
+ 2.7.8.6
diff --git a/src/main/java/it/tdlight/client/QrCodeTerminal.java b/src/main/java/it/tdlight/client/QrCodeTerminal.java
new file mode 100644
index 0000000..9db2e4d
--- /dev/null
+++ b/src/main/java/it/tdlight/client/QrCodeTerminal.java
@@ -0,0 +1,38 @@
+package it.tdlight.client;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.WriterException;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+import java.util.Hashtable;
+
+class QrCodeTerminal {
+
+ public static String getQr(String url) {
+ int width = 40;
+ int height = 40;
+ Hashtable qrParam = new Hashtable<>();
+ qrParam.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
+ qrParam.put(EncodeHintType.CHARACTER_SET, "utf-8");
+ try {
+ BitMatrix bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, width, height, qrParam);
+ return toAscii(bitMatrix);
+ } catch (WriterException ex) {
+ throw new IllegalStateException("Can't encode QR code", ex);
+ }
+ }
+
+ public static String toAscii(BitMatrix bitMatrix) {
+ StringBuilder sb = new StringBuilder();
+ for (int rows = 0; rows < bitMatrix.getHeight(); rows++) {
+ for (int cols = 0; cols < bitMatrix.getWidth(); cols++) {
+ boolean x = bitMatrix.get(rows, cols);
+ sb.append(x ? " " : "██");
+ }
+ sb.append("\n");
+ }
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/it/tdlight/client/ScannerClientInteraction.java b/src/main/java/it/tdlight/client/ScannerClientInteraction.java
index 1584fe7..2380518 100644
--- a/src/main/java/it/tdlight/client/ScannerClientInteraction.java
+++ b/src/main/java/it/tdlight/client/ScannerClientInteraction.java
@@ -62,8 +62,11 @@ final class ScannerClientInteraction implements ClientInteraction {
System.out.println(passwordMessage);
break;
case NOTIFY_LINK:
- System.out.println("Please confirm this login link on another device: "
- + ((ParameterInfoNotifyLink) parameterInfo).getLink());
+ String link = ((ParameterInfoNotifyLink) parameterInfo).getLink();
+ System.out.println("Please confirm this login link on another device: " + link);
+ System.out.println();
+ System.out.println(QrCodeTerminal.getQr(link));
+ System.out.println();
return "";
case TERMS_OF_SERVICE:
TermsOfService tos = ((ParameterInfoTermsOfService) parameterInfo).getTermsOfService();
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 23acfa3..859b536 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -3,6 +3,7 @@ module tdlight.java {
requires org.reactivestreams;
requires org.slf4j;
requires it.unimi.dsi.fastutil;
+ requires com.google.zxing;
exports it.tdlight.tdlight;
exports it.tdlight.tdnative;
exports it.tdlight.tdlib;
diff --git a/tdlib/pom.xml b/tdlib/pom.xml
index c22d54a..0c9cccc 100644
--- a/tdlib/pom.xml
+++ b/tdlib/pom.xml
@@ -68,6 +68,10 @@
net.harawata
appdirs
+
+
+ com.google.zxing
+ core
@@ -81,6 +85,11 @@
net.harawata
appdirs
1.2.1
+
+
+ com.google.zxing
+ core
+ 3.4.1
diff --git a/tdlight/pom.xml b/tdlight/pom.xml
index 52ad260..6d6e83a 100644
--- a/tdlight/pom.xml
+++ b/tdlight/pom.xml
@@ -69,7 +69,11 @@
net.harawata
appdirs
-
+
+ com.google.zxing
+ core
+
+
@@ -81,6 +85,11 @@
net.harawata
appdirs
1.2.1
+
+
+ com.google.zxing
+ core
+ 3.4.1