Skip to content

Commit 9b772a2

Browse files
Merge pull request #215 from nICEnnnnnnnLee/dev
V6.34 Update
2 parents ccec7d8 + 5b64e62 commit 9b772a2

File tree

16 files changed

+346
-233
lines changed

16 files changed

+346
-233
lines changed

.github/release.info

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,43 @@
1-
* 新增: release 附件中`win64_jre`压缩文件加入`exe`程序
2-
* 新增: 添加专栏图片解析
3-
* 新增: 添加专栏文集图片解析
4-
* 新增: 添加图文动态解析
5-
* 新增: 添加图文动态个人收藏解析
6-
* 新增: 可以JVM传入参数`-Dbilibili.prop.dataDirPath={dataDirPath}`来指定数据文件夹位置(可以不是程序所在目录)
7-
* 新增: 可以JVM传入参数`-Dbilibili.prop.log=true/false`来尽可能减少打印信息
8-
* 新增: 可以在登录时获取服务器时间并以之为基准
9-
* 新增(ui): 配置面板中,针对文件/文件夹类型的配置,可以通过文件选择器来选择路径
10-
* 新增(ci): 现在可以手动触发release ci,此时可以选择是否同步上传代码、附件到第三方
11-
* 新增(ci): 现在会将`commit hash`,`workflow id`信息写入作品信息页面,`buildTime`改为`GMT+8`时区
12-
* 已知问题: jpackage 打包的exe程序无法自重启 [JDK-8325924](https://bugs.openjdk.org/browse/JDK-8325924)/[JDK-8325203](https://bugs.openjdk.org/browse/JDK-8325203)
13-
* 具体修改详见[V6.32...V6.33](https://github.com/nICEnnnnnnnLee/BilibiliDown/compare/V6.31...V6.32)
1+
该版本主要用来解决某些使用上的问题,如果您已经可以正常使用,可以忽略该更新。
2+
* 精简jre支持的https加密套件有限,不支持ecc。这会导致默认的ffmpeg源bitbucket下载失败。随着网站加密套件的更新,未来或许还会有更多的`TLS handshake failure`。
3+
这个问题在旧版本可以通过更换ffmpeg源,或者自行获取ffmpeg并在程序设置好path的方式来解决。
4+
新版本为精简JRE添加了模块`jdk.crypto.ec`,用于解决部分HTTPS链接握手出错的问题。
5+
需要注意的是,这个模块在JDK 22被标为deprecated,相关实现会被挪到`java.base`模块。详见[JDK-8312267](https://bugs.openjdk.org/browse/JDK-8312267)
6+
另外,新版本为Windows x64用户打包的`zip`、`msi`添加了精简编译的`ffmpeg.exe`。
7+
8+
* 在转码/合并失败时,现在会提示检查ffmpeg配置。
9+
现在Web端基本上获取不到高清晰度的mp4、flv。随着时间推移,ffmpeg成了必选项,以前的逻辑、设计和提示语都有点过时。
10+
尝试让用户明白三件事情:
11+
+ ffmpeg是必需的。
12+
+ 程序可以提供仅基础功能的精简版编译下载。
13+
+ 如果计算机里有现成的ffmpeg,可以通过配置进行指定。
14+
15+
* 修复程序自更新时下载Beta版本报错的问题。
16+
下载Github Action的artifact链接301到新链接后,继承使用原来的header会报错,这个行为有点抽象。
17+
18+
* 现在程序会检查数据目录的`写`权限。#214
19+
不推荐将程序放在系统盘。如果你这么做了,你需要进行额外的操作(三选一):
20+
+ 以管理员身份运行程序(不推荐)
21+
+ 参考#214 将程序目录设置为可写可修改
22+
+ 设置另外的有权限的数据目录,通过传入JVM参数`-Dbilibili.prop.dataDirPath`进行指定。不会可以在参考文档中搜索关键词。
23+
24+
* 部分环境可能出现显示错误的情况。#213
25+
问题存在,但找不到原因。可以通过更换入口类规避。
26+
现在可以通过传入JVM参数`-Dbilibili.prop.mainClass`参数给`launch.jar`,来指定`INeedBiliAV.jar`的运行入口。
27+
28+
修改`BilibiliDown.cfg`
29+
```
30+
[Application]
31+
app.classpath=launch.jar
32+
app.mainclass=nicelee.memory.App
33+
34+
[JavaOptions]
35+
java-options=-Dfile.encoding=utf-8
36+
java-options=-Dbilibili.prop.mainClass=nicelee.ui.FrameMain_v3_4
37+
```
38+
39+
或者脚本
40+
`java -Dbilibili.prop.mainClass=nicelee.ui.FrameMain_v3_4 -jar launch.jar`
1441
<hr/>
1542

1643
如果你是Win64用户,且没有java环境,请下载附件`*.win_x64_jre11.release.zip`或 `*.win_x64.msi`

.github/scripts/gen_zip_sha1_for_release.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,15 @@ zip -m "BilibiliDown.v$VERSION_NUMBER.release.zip" ./update.bat
2929
zip -rm "BilibiliDown.v$VERSION_NUMBER.release.zip" ./config/
3030
zip -rm "BilibiliDown.v$VERSION_NUMBER.release.zip" ./LICENSE/
3131

32-
wget https://github.com/nICEnnnnnnnLee/BilibiliDown/releases/download/V4.5/minimal-bilibilidown-jre11.0.23_9_win_x64.zip
33-
unzip minimal-bilibilidown-jre11.0.23_9_win_x64.zip
32+
wget https://github.com/nICEnnnnnnnLee/BilibiliDown/releases/download/V4.5/minimal-bilibilidown-jre11.0.23_9.crypto.ec_win_x64.zip
33+
unzip minimal-bilibilidown-jre11.0.23_9.crypto.ec_win_x64.zip
3434
cp "BilibiliDown.v$VERSION_NUMBER.release.zip" "BilibiliDown.v$VERSION_NUMBER.win_x64_jre11.release.zip"
3535
zip -rm "BilibiliDown.v$VERSION_NUMBER.win_x64_jre11.release.zip" ./minimal-bilibilidown-jre/
3636

37+
wget https://github.com/nICEnnnnnnnLee/BilibiliDown/releases/download/V4.5/ffmpeg-20240123-win-amd64.exe
38+
mv ffmpeg-20240123-win-amd64.exe ffmpeg.exe
39+
zip -m "BilibiliDown.v$VERSION_NUMBER.win_x64_jre11.release.zip" ./ffmpeg.exe
40+
3741
(sha1sum "BilibiliDown.v$VERSION_NUMBER.win_x64_jre11.release.zip"| cut -d' ' -f1) > "BilibiliDown.v$VERSION_NUMBER.win_x64_jre11.release.zip.sha1"
3842
(sha1sum "BilibiliDown.v$VERSION_NUMBER.release.zip"| cut -d' ' -f1) > "BilibiliDown.v$VERSION_NUMBER.release.zip.sha1"
3943

UPDATE.md

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,50 @@
11
## UPDATE
2+
* V6.34
3+
该版本主要用来解决某些使用上的问题,如果您已经可以正常使用,可以忽略该更新。
4+
* 精简jre支持的https加密套件有限,不支持ecc。这会导致默认的ffmpeg源bitbucket下载失败。随着网站加密套件的更新,未来或许还会有更多的`TLS handshake failure`
5+
这个问题在旧版本可以通过更换ffmpeg源,或者自行获取ffmpeg并在程序设置好path的方式来解决。
6+
新版本为精简JRE添加了模块`jdk.crypto.ec`,用于解决部分HTTPS链接握手出错的问题。
7+
需要注意的是,这个模块在JDK 22被标为deprecated,相关实现会被挪到`java.base`模块。详见[JDK-8312267](https://bugs.openjdk.org/browse/JDK-8312267)
8+
另外,新版本为Windows x64用户打包的`zip``msi`添加了精简编译的`ffmpeg.exe`
9+
10+
* 在转码/合并失败时,现在会提示检查ffmpeg配置。
11+
现在Web端基本上获取不到高清晰度的mp4、flv。随着时间推移,ffmpeg成了必选项,以前的逻辑、设计和提示语都有点过时。
12+
尝试让用户明白三件事情:
13+
+ ffmpeg是必需的。
14+
+ 程序可以提供仅基础功能的精简版编译下载。
15+
+ 如果计算机里有现成的ffmpeg,可以通过配置进行指定。
16+
17+
* 修复程序自更新时下载Beta版本报错的问题。
18+
下载Github Action的artifact需要登录,虽然不甘心,但可以理解。
19+
下载链接301到新链接后,继承使用原来的header会报错,这个行为有点抽象。
20+
大部分工具都是follow redirect可以直接下载的,但这里的逻辑是那小部分。
21+
22+
* 现在程序会检查数据目录的``权限。#214
23+
不推荐将程序放在系统盘。如果你这么做了,你需要进行额外的操作(三选一):
24+
+ 以管理员身份运行程序(不推荐)
25+
+ 参考#214 将程序目录设置为可写可修改
26+
+ 设置另外的有权限的数据目录,通过传入JVM参数`-Dbilibili.prop.dataDirPath`进行指定。不会可以在参考文档中搜索关键词。
27+
28+
* 部分环境可能出现显示错误的情况。#213
29+
问题存在,但找不到原因。可以通过更换入口类规避。
30+
现在可以通过传入JVM参数`-Dbilibili.prop.mainClass`参数给`launch.jar`,来指定`INeedBiliAV.jar`的运行入口。
31+
32+
修改`BilibiliDown.cfg`
33+
```
34+
[Application]
35+
app.classpath=launch.jar
36+
app.mainclass=nicelee.memory.App
37+
38+
[JavaOptions]
39+
java-options=-Dfile.encoding=utf-8
40+
java-options=-Dbilibili.prop.mainClass=nicelee.ui.FrameMain_v3_4
41+
```
42+
43+
或者脚本
44+
`java -Dbilibili.prop.mainClass=nicelee.ui.FrameMain_v3_4 -jar launch.jar`
45+
246
* V6.33 `2024-08-18`
3-
* 新增: release中`win64_jre`压缩文件加入`exe`程序
47+
* 新增: release 附件中`win64_jre`压缩文件加入`exe`程序
448
* 新增: 添加专栏图片解析
549
* 新增: 添加专栏文集图片解析
650
* 新增: 添加图文动态解析

src-launcher/nicelee/memory/App.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@ public static void main(String[] args) throws FileNotFoundException, IOException
4040

4141
System.out.println(pd.getCodeSource().getLocation().getPath());
4242
MemoryClassLoader mcl = new MemoryClassLoader(pd);
43+
String mainClass = System.getProperty("bilibili.prop.mainClass", "nicelee.ui.FrameMain");
44+
System.out.println("Current main class:" + mainClass);
4345
try {
44-
Class<?> clazz = mcl.loadClass("nicelee.ui.FrameMain");
46+
Class<?> clazz = mcl.loadClass(mainClass);
4547
Method method = clazz.getMethod("main", new Class<?>[] { String[].class });
4648
method.invoke(null, (Object) args);
4749
} catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InvocationTargetException

src/nicelee/bilibili/downloaders/impl/FLVDownloader.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
import nicelee.bilibili.annotations.Bilibili;
88
import nicelee.bilibili.downloaders.IDownloader;
99
import nicelee.bilibili.enums.StatusEnum;
10+
import nicelee.bilibili.exceptions.BilibiliError;
1011
import nicelee.bilibili.util.CmdUtil;
1112
import nicelee.bilibili.util.HttpHeaders;
1213
import nicelee.bilibili.util.HttpRequestUtil;
13-
import nicelee.bilibili.util.Logger;
1414
import nicelee.ui.Global;
1515

1616

@@ -131,12 +131,7 @@ protected boolean download(String url, String avId, int qn, int page, String suf
131131
// 下载完毕后,进行合并
132132
convertingStatus = StatusEnum.PROCESSING;
133133
boolean result = CmdUtil.convert(fName + suffix, links.length);
134-
if (result) {
135-
convertingStatus = StatusEnum.SUCCESS;
136-
} else {
137-
convertingStatus = StatusEnum.FAIL;
138-
}
139-
return result;
134+
return throwErrorIfNotConvertOk(result);
140135
} else {
141136
url = tryBetterUrl(url);
142137
String fileName = fName + suffix;
@@ -149,6 +144,15 @@ protected boolean download(String url, String avId, int qn, int page, String suf
149144
}
150145
}
151146

147+
protected boolean throwErrorIfNotConvertOk(boolean ok) {
148+
if (ok) {
149+
convertingStatus = StatusEnum.SUCCESS;
150+
return true;
151+
} else {
152+
convertingStatus = StatusEnum.FAIL;
153+
throw new BilibiliError("转码失败,请检查ffmpeg配置");
154+
}
155+
}
152156
/**
153157
* 返回当前状态
154158
*

src/nicelee/bilibili/downloaders/impl/M4SDownloader.java

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,7 @@ public boolean download(String url, String avId, int qn, int page) {
5353
if (util.download(links[1], audioName, header.getBiliWwwM4sHeaders(avId))) {
5454
convertingStatus = StatusEnum.PROCESSING;
5555
boolean result = CmdUtil.convert(null, audioName, dstName);
56-
if (result)
57-
convertingStatus = StatusEnum.SUCCESS;
58-
else
59-
convertingStatus = StatusEnum.FAIL;
60-
return result;
56+
return throwErrorIfNotConvertOk(result);
6157
}
6258
return false;
6359
}
@@ -74,24 +70,15 @@ public boolean download(String url, String avId, int qn, int page) {
7470
totalTaskCnt = currentTask = 1;
7571
convertingStatus = StatusEnum.PROCESSING;
7672
boolean result = CmdUtil.convert(videoName, null, dstName);
77-
if (result)
78-
convertingStatus = StatusEnum.SUCCESS;
79-
else
80-
convertingStatus = StatusEnum.FAIL;
81-
return result;
73+
return throwErrorIfNotConvertOk(result);
8274
}else if (util.download(links[1], audioName, header.getBiliWwwM4sHeaders(avId))) {
8375
// 如下载成功,统计数据后重置
8476
sumSuccessDownloaded += util.getTotalFileSize();
8577
util.reset();
8678
// 下载完毕后,进行合并
8779
convertingStatus = StatusEnum.PROCESSING;
8880
boolean result = CmdUtil.convert(videoName, audioName, dstName);
89-
if (result) {
90-
convertingStatus = StatusEnum.SUCCESS;
91-
} else {
92-
convertingStatus = StatusEnum.FAIL;
93-
}
94-
return result;
81+
return throwErrorIfNotConvertOk(result);
9582
}
9683
return false;
9784
}

src/nicelee/bilibili/downloaders/impl/VersionBetaDownloader.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import java.io.File;
44
import java.io.IOException;
5+
import java.net.HttpURLConnection;
6+
import java.net.URL;
57
import java.util.HashMap;
8+
import java.util.Map;
69
import java.util.regex.Matcher;
710
import java.util.regex.Pattern;
811

@@ -13,6 +16,7 @@
1316

1417
import nicelee.bilibili.annotations.Bilibili;
1518
import nicelee.bilibili.enums.StatusEnum;
19+
import nicelee.bilibili.util.HttpHeaders;
1620
import nicelee.bilibili.util.Logger;
1721
import nicelee.bilibili.util.VersionManagerUtil;
1822
import nicelee.ui.Global;
@@ -73,6 +77,7 @@ public boolean download(String _url, String avId, int qn, int page) {
7377
// sumSuccessDownloaded = artifact.optLong("size_in_bytes", 0);
7478
Logger.println(downName);
7579
Logger.println(url);
80+
String realUrl = getLocation(url, headers);
7681
// 开始下载
7782
if (file == null) {
7883
file = new File(updateDir, downName);
@@ -81,7 +86,7 @@ public boolean download(String _url, String avId, int qn, int page) {
8186
util.setSavePath(updateDir.getCanonicalPath());
8287
} catch (IOException e1) {
8388
}
84-
boolean succ = util.download(url, downName, headers);
89+
boolean succ = util.download(realUrl, downName, new HttpHeaders().getCommonHeaders());
8590
if (succ) {
8691
sumSuccessDownloaded += util.getTotalFileSize();
8792
util.reset();
@@ -100,4 +105,27 @@ public boolean download(String _url, String avId, int qn, int page) {
100105
return succ;
101106
}
102107

108+
private String getLocation(String url, Map<String, String> headers) {
109+
try {
110+
URL url0 = new URL(url);
111+
HttpURLConnection conn = (HttpURLConnection) url0.openConnection();
112+
conn.setInstanceFollowRedirects(false);
113+
for (Map.Entry<String, String> entry : headers.entrySet()) {
114+
conn.setRequestProperty(entry.getKey(), entry.getValue());
115+
}
116+
conn.connect();
117+
118+
int code = conn.getResponseCode();
119+
if (code == 301 || code == 302) {
120+
String location = conn.getHeaderField("Location");
121+
Logger.println(location);
122+
return getLocation(location, headers);
123+
} else {
124+
return url;
125+
}
126+
} catch (IOException e) {
127+
e.printStackTrace();
128+
return url;
129+
}
130+
}
103131
}

src/nicelee/ui/FrameMain.java

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,17 @@
1616
import javax.swing.JTabbedPane;
1717
import javax.swing.UIManager;
1818

19-
import nicelee.bilibili.INeedAV;
2019
import nicelee.bilibili.INeedLogin;
2120
import nicelee.bilibili.PackageScanLoader;
22-
import nicelee.bilibili.model.VideoInfo;
2321
import nicelee.bilibili.util.CmdUtil;
2422
import nicelee.bilibili.util.ConfigUtil;
2523
import nicelee.bilibili.util.HttpCookies;
26-
import nicelee.bilibili.util.Logger;
2724
import nicelee.bilibili.util.RepoUtil;
2825
import nicelee.bilibili.util.ResourcesUtil;
2926
import nicelee.bilibili.util.SysUtil;
3027
import nicelee.ui.item.MJTitleBar;
3128
import nicelee.ui.thread.BatchDownloadRbyRThread;
3229
import nicelee.ui.thread.CookieRefreshThread;
33-
import nicelee.ui.thread.DownloadRunnable;
3430
import nicelee.ui.thread.LoginThread;
3531
import nicelee.ui.thread.MonitoringThread;
3632

@@ -46,7 +42,7 @@ public class FrameMain extends JFrame {
4642
public static void main(String[] args) {
4743
System.out.println();
4844
// System.getProperties().setProperty("file.encoding", "utf-8");
49-
boolean isFFmpegSurported = SysUtil.surportFFmpegOfficially();
45+
boolean isFFmpegSupported = SysUtil.surportFFmpegOfficially();
5046
System.out.println("Java version:" + System.getProperty("java.specification.version"));
5147
System.out.println(ResourcesUtil.baseDirectory());
5248
// 读取配置文件
@@ -56,6 +52,8 @@ public static void main(String[] args) {
5652
System.out.println(Global.version);
5753
System.exit(0);
5854
}
55+
// 初始化 - 检查对数据文件夹是否有“写”的权限
56+
InitCheck.checkFileAccess();
5957
// 显示过渡动画
6058
Global.frWaiting = new FrameWaiting();
6159
Global.frWaiting.start();
@@ -79,7 +77,6 @@ public static void main(String[] args) {
7977
// }
8078
// 初始化主题
8179
initUITheme();
82-
8380
// 初始化UI
8481
FrameMain main = new FrameMain();
8582
main.InitUI();
@@ -110,28 +107,7 @@ public static void main(String[] args) {
110107
loginTh.start();
111108

112109
// 初始化 - ffmpeg环境判断
113-
CmdUtil.DEFAULT_WORKING_DIR = ResourcesUtil.baseDirFile();
114-
String ffmpeg = ResourcesUtil.resolve(Global.ffmpegPath);
115-
String[] cmd = new String[] { ffmpeg, "-version" };
116-
if (!CmdUtil.run(cmd)) {
117-
if (isFFmpegSurported) {
118-
Object[] options = { "是", "否" };
119-
int m = JOptionPane.showOptionDialog(null,
120-
"检测到当前没有ffmpeg环境, mp4及小部分flv文件将无法转码或合并.\r\n 是否下载ffmpeg(自编译, 3M左右)?", "请选择:",
121-
JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
122-
Logger.println(m);
123-
if (m == 0) {
124-
VideoInfo avInfo = new INeedAV().getVideoDetail("ffmpeg", 0, false);
125-
DownloadRunnable downThread = new DownloadRunnable(avInfo, avInfo.getClips().get(1234L), 0);
126-
Global.queryThreadPool.execute(downThread);
127-
}
128-
} else {
129-
JOptionPane.showMessageDialog(null, "当前没有ffmpeg环境,大部分mp4及小部分flv文件将无法转码或合并", "请注意!!",
130-
JOptionPane.WARNING_MESSAGE);
131-
}
132-
} else {
133-
CmdUtil.FFMPEG_PATH = ffmpeg;
134-
}
110+
InitCheck.checkFFmpeg(isFFmpegSupported);
135111

136112
//
137113
if (Global.saveToRepo) {

0 commit comments

Comments
 (0)