From 3c1940f11a81e98c99b9e83213e22fae11d5003e Mon Sep 17 00:00:00 2001
From: hzhilong <1107495265@qq.com>
Date: Mon, 11 Nov 2024 12:22:07 +0800
Subject: [PATCH] =?UTF-8?q?=E5=BC=83=E7=94=A8=E6=8E=A7=E5=88=B6=E5=8F=B0?=
=?UTF-8?q?=E6=89=93=E5=8D=B0=E4=BA=8C=E7=BB=B4=E7=A0=81=E7=9A=84=E6=96=B9?=
=?UTF-8?q?=E5=BC=8F=EF=BC=8C=E6=94=B9=E7=94=A8=E5=9B=BE=E7=89=87=E6=96=87?=
=?UTF-8?q?=E4=BB=B6=E6=98=BE=E7=A4=BA=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../top/ybgnb/bilibili/backup/CLIApp.java | 26 +++++++++++++----
.../ybgnb/bilibili/backup/utils/QRUtil.java | 29 +++++++++++++++++++
3 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/pom.xml b/pom.xml
index 6d89c14..27e0dee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
top.ybgnb
bilibili-backup
哔哩哔哩账号备份
- 1.0.1
+ 1.0.2
8
diff --git a/src/main/java/top/ybgnb/bilibili/backup/CLIApp.java b/src/main/java/top/ybgnb/bilibili/backup/CLIApp.java
index 5e49f28..4c18b22 100644
--- a/src/main/java/top/ybgnb/bilibili/backup/CLIApp.java
+++ b/src/main/java/top/ybgnb/bilibili/backup/CLIApp.java
@@ -27,6 +27,7 @@
import top.ybgnb.bilibili.backup.utils.StringUtils;
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
@@ -143,12 +144,25 @@ private static String loginNewUser() throws BusinessException {
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(
new ThrottlingInterceptor(1000)).build();
LoginService loginService = new LoginService(client);
- log.info("正在获取登录二维码(长时间不显示的话,可按一下方向键下刷新屏幕)...");
- log.info("可尝试按住【Ctrl+鼠标滚轮键】调整字体为较小状态(方便展示二维码)");
+ log.info("正在获取登录二维码...");
+// log.info("正在获取登录二维码(长时间不显示的话,可按一下方向键下刷新屏幕)...");
+// log.info("可尝试按住【Ctrl+鼠标滚轮键】调整字体为较小状态(方便展示二维码)");
QRCode qrCode = loginService.generateQRCode();
log.info("请使用手机哔哩哔哩扫码登录:");
- QRUtil.printQR(qrCode.getUrl());
- log.info("请使用手机哔哩哔哩扫码登录:");
+// QRUtil.printQR(qrCode.getUrl());
+// log.info("请使用手机哔哩哔哩扫码登录:");
+ File dir = new File("qr");
+ if(!dir.exists()){
+ dir.mkdir();
+ }
+ String filePath = "qr/" + System.currentTimeMillis() + ".png";
+ File file = QRUtil.writeQRFile(qrCode.getUrl(), filePath);
+ Runtime runtime = Runtime.getRuntime();
+ try {
+ runtime.exec("cmd /c \"" + file.getAbsolutePath()+"\"");
+ } catch (IOException e) {
+ throw new BusinessException("打开二维码失败");
+ }
long startTime = System.currentTimeMillis();
String cookie = null;
while (System.currentTimeMillis() - startTime < 180000 && StringUtils.isEmpty(cookie)) {
@@ -183,12 +197,12 @@ public void fail(User user) {
}
};
if (BuType.BACKUP.equals(buType)) {
- upper = new BilibiliBackup(builders,new User(cookie), userInfoCallback).start();
+ upper = new BilibiliBackup(builders, new User(cookie), userInfoCallback).start();
} else if (BuType.RESTORE.equals(buType)) {
if (StringUtils.isEmpty(readJsonDir)) {
throw new BusinessException("备份文件为空");
}
- upper = new BilibiliRestore(builders,readJsonDir, new User(cookie), userInfoCallback).start();
+ upper = new BilibiliRestore(builders, readJsonDir, new User(cookie), userInfoCallback).start();
} else if (BuType.READ_ALL_MSG.equals(buType)) {
upper = new BilibiliReadAllMsg(new User(cookie), userInfoCallback).start();
}
diff --git a/src/main/java/top/ybgnb/bilibili/backup/utils/QRUtil.java b/src/main/java/top/ybgnb/bilibili/backup/utils/QRUtil.java
index 81b2b81..701f2c0 100644
--- a/src/main/java/top/ybgnb/bilibili/backup/utils/QRUtil.java
+++ b/src/main/java/top/ybgnb/bilibili/backup/utils/QRUtil.java
@@ -7,6 +7,10 @@
import com.google.zxing.common.BitMatrix;
import top.ybgnb.bilibili.backup.error.BusinessException;
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@@ -42,4 +46,29 @@ public static void printQR(String content) throws BusinessException {
throw new BusinessException("生成二维码失败");
}
}
+
+ public static File writeQRFile(String content, String filePath) throws BusinessException {
+ // 设置字符集编码
+ Map hints = new HashMap<>();
+ hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+ //设置二维码白边的范围(此值可能不生效)
+ hints.put(EncodeHintType.MARGIN, 1);
+ // 生成二维码矩阵
+ try {
+ BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 256, 256, hints);
+ BufferedImage bufferedImage = new BufferedImage(256, 256, BufferedImage.TYPE_INT_BGR);
+ for (int j = 0; j < bitMatrix.getHeight(); j++) {
+ for (int i = 0; i < bitMatrix.getWidth(); i++) {
+ bufferedImage.setRGB(i, j, bitMatrix.get(i, j) ? 0x000000 : 0xFFFFFF);
+ }
+ }
+ File codeImgFile = new File(filePath);
+ ImageIO.write(bufferedImage, "png", codeImgFile);
+ return codeImgFile;
+ } catch (WriterException e) {
+ throw new BusinessException("生成二维码失败");
+ } catch (IOException e) {
+ throw new BusinessException("保存二维码失败");
+ }
+ }
}