Skip to content

Commit

Permalink
Merge pull request #215 from nICEnnnnnnnLee/dev
Browse files Browse the repository at this point in the history
 V6.34 Update
  • Loading branch information
nICEnnnnnnnLee authored Sep 3, 2024
2 parents ccec7d8 + 5b64e62 commit 9b772a2
Show file tree
Hide file tree
Showing 16 changed files with 346 additions and 233 deletions.
53 changes: 40 additions & 13 deletions .github/release.info
Original file line number Diff line number Diff line change
@@ -1,16 +1,43 @@
* 新增: release 附件中`win64_jre`压缩文件加入`exe`程序
* 新增: 添加专栏图片解析
* 新增: 添加专栏文集图片解析
* 新增: 添加图文动态解析
* 新增: 添加图文动态个人收藏解析
* 新增: 可以JVM传入参数`-Dbilibili.prop.dataDirPath={dataDirPath}`来指定数据文件夹位置(可以不是程序所在目录)
* 新增: 可以JVM传入参数`-Dbilibili.prop.log=true/false`来尽可能减少打印信息
* 新增: 可以在登录时获取服务器时间并以之为基准
* 新增(ui): 配置面板中,针对文件/文件夹类型的配置,可以通过文件选择器来选择路径
* 新增(ci): 现在可以手动触发release ci,此时可以选择是否同步上传代码、附件到第三方
* 新增(ci): 现在会将`commit hash`,`workflow id`信息写入作品信息页面,`buildTime`改为`GMT+8`时区
* 已知问题: jpackage 打包的exe程序无法自重启 [JDK-8325924](https://bugs.openjdk.org/browse/JDK-8325924)/[JDK-8325203](https://bugs.openjdk.org/browse/JDK-8325203)
* 具体修改详见[V6.32...V6.33](https://github.com/nICEnnnnnnnLee/BilibiliDown/compare/V6.31...V6.32)
该版本主要用来解决某些使用上的问题,如果您已经可以正常使用,可以忽略该更新。
* 精简jre支持的https加密套件有限,不支持ecc。这会导致默认的ffmpeg源bitbucket下载失败。随着网站加密套件的更新,未来或许还会有更多的`TLS handshake failure`。
这个问题在旧版本可以通过更换ffmpeg源,或者自行获取ffmpeg并在程序设置好path的方式来解决。
新版本为精简JRE添加了模块`jdk.crypto.ec`,用于解决部分HTTPS链接握手出错的问题。
需要注意的是,这个模块在JDK 22被标为deprecated,相关实现会被挪到`java.base`模块。详见[JDK-8312267](https://bugs.openjdk.org/browse/JDK-8312267)
另外,新版本为Windows x64用户打包的`zip`、`msi`添加了精简编译的`ffmpeg.exe`。

* 在转码/合并失败时,现在会提示检查ffmpeg配置。
现在Web端基本上获取不到高清晰度的mp4、flv。随着时间推移,ffmpeg成了必选项,以前的逻辑、设计和提示语都有点过时。
尝试让用户明白三件事情:
+ ffmpeg是必需的。
+ 程序可以提供仅基础功能的精简版编译下载。
+ 如果计算机里有现成的ffmpeg,可以通过配置进行指定。

* 修复程序自更新时下载Beta版本报错的问题。
下载Github Action的artifact链接301到新链接后,继承使用原来的header会报错,这个行为有点抽象。

* 现在程序会检查数据目录的`写`权限。#214
不推荐将程序放在系统盘。如果你这么做了,你需要进行额外的操作(三选一):
+ 以管理员身份运行程序(不推荐)
+ 参考#214 将程序目录设置为可写可修改
+ 设置另外的有权限的数据目录,通过传入JVM参数`-Dbilibili.prop.dataDirPath`进行指定。不会可以在参考文档中搜索关键词。

* 部分环境可能出现显示错误的情况。#213
问题存在,但找不到原因。可以通过更换入口类规避。
现在可以通过传入JVM参数`-Dbilibili.prop.mainClass`参数给`launch.jar`,来指定`INeedBiliAV.jar`的运行入口。

修改`BilibiliDown.cfg`
```
[Application]
app.classpath=launch.jar
app.mainclass=nicelee.memory.App

[JavaOptions]
java-options=-Dfile.encoding=utf-8
java-options=-Dbilibili.prop.mainClass=nicelee.ui.FrameMain_v3_4
```

或者脚本
`java -Dbilibili.prop.mainClass=nicelee.ui.FrameMain_v3_4 -jar launch.jar`
<hr/>

如果你是Win64用户,且没有java环境,请下载附件`*.win_x64_jre11.release.zip`或 `*.win_x64.msi`
8 changes: 6 additions & 2 deletions .github/scripts/gen_zip_sha1_for_release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,15 @@ zip -m "BilibiliDown.v$VERSION_NUMBER.release.zip" ./update.bat
zip -rm "BilibiliDown.v$VERSION_NUMBER.release.zip" ./config/
zip -rm "BilibiliDown.v$VERSION_NUMBER.release.zip" ./LICENSE/

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

wget https://github.com/nICEnnnnnnnLee/BilibiliDown/releases/download/V4.5/ffmpeg-20240123-win-amd64.exe
mv ffmpeg-20240123-win-amd64.exe ffmpeg.exe
zip -m "BilibiliDown.v$VERSION_NUMBER.win_x64_jre11.release.zip" ./ffmpeg.exe

(sha1sum "BilibiliDown.v$VERSION_NUMBER.win_x64_jre11.release.zip"| cut -d' ' -f1) > "BilibiliDown.v$VERSION_NUMBER.win_x64_jre11.release.zip.sha1"
(sha1sum "BilibiliDown.v$VERSION_NUMBER.release.zip"| cut -d' ' -f1) > "BilibiliDown.v$VERSION_NUMBER.release.zip.sha1"

46 changes: 45 additions & 1 deletion UPDATE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,50 @@
## UPDATE
* V6.34
该版本主要用来解决某些使用上的问题,如果您已经可以正常使用,可以忽略该更新。
* 精简jre支持的https加密套件有限,不支持ecc。这会导致默认的ffmpeg源bitbucket下载失败。随着网站加密套件的更新,未来或许还会有更多的`TLS handshake failure`
这个问题在旧版本可以通过更换ffmpeg源,或者自行获取ffmpeg并在程序设置好path的方式来解决。
新版本为精简JRE添加了模块`jdk.crypto.ec`,用于解决部分HTTPS链接握手出错的问题。
需要注意的是,这个模块在JDK 22被标为deprecated,相关实现会被挪到`java.base`模块。详见[JDK-8312267](https://bugs.openjdk.org/browse/JDK-8312267)
另外,新版本为Windows x64用户打包的`zip``msi`添加了精简编译的`ffmpeg.exe`

* 在转码/合并失败时,现在会提示检查ffmpeg配置。
现在Web端基本上获取不到高清晰度的mp4、flv。随着时间推移,ffmpeg成了必选项,以前的逻辑、设计和提示语都有点过时。
尝试让用户明白三件事情:
+ ffmpeg是必需的。
+ 程序可以提供仅基础功能的精简版编译下载。
+ 如果计算机里有现成的ffmpeg,可以通过配置进行指定。

* 修复程序自更新时下载Beta版本报错的问题。
下载Github Action的artifact需要登录,虽然不甘心,但可以理解。
下载链接301到新链接后,继承使用原来的header会报错,这个行为有点抽象。
大部分工具都是follow redirect可以直接下载的,但这里的逻辑是那小部分。

* 现在程序会检查数据目录的``权限。#214
不推荐将程序放在系统盘。如果你这么做了,你需要进行额外的操作(三选一):
+ 以管理员身份运行程序(不推荐)
+ 参考#214 将程序目录设置为可写可修改
+ 设置另外的有权限的数据目录,通过传入JVM参数`-Dbilibili.prop.dataDirPath`进行指定。不会可以在参考文档中搜索关键词。

* 部分环境可能出现显示错误的情况。#213
问题存在,但找不到原因。可以通过更换入口类规避。
现在可以通过传入JVM参数`-Dbilibili.prop.mainClass`参数给`launch.jar`,来指定`INeedBiliAV.jar`的运行入口。

修改`BilibiliDown.cfg`
```
[Application]
app.classpath=launch.jar
app.mainclass=nicelee.memory.App

[JavaOptions]
java-options=-Dfile.encoding=utf-8
java-options=-Dbilibili.prop.mainClass=nicelee.ui.FrameMain_v3_4
```
或者脚本
`java -Dbilibili.prop.mainClass=nicelee.ui.FrameMain_v3_4 -jar launch.jar`

* V6.33 `2024-08-18`
* 新增: release中`win64_jre`压缩文件加入`exe`程序
* 新增: release 附件中`win64_jre`压缩文件加入`exe`程序
* 新增: 添加专栏图片解析
* 新增: 添加专栏文集图片解析
* 新增: 添加图文动态解析
Expand Down
4 changes: 3 additions & 1 deletion src-launcher/nicelee/memory/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,10 @@ public static void main(String[] args) throws FileNotFoundException, IOException

System.out.println(pd.getCodeSource().getLocation().getPath());
MemoryClassLoader mcl = new MemoryClassLoader(pd);
String mainClass = System.getProperty("bilibili.prop.mainClass", "nicelee.ui.FrameMain");
System.out.println("Current main class:" + mainClass);
try {
Class<?> clazz = mcl.loadClass("nicelee.ui.FrameMain");
Class<?> clazz = mcl.loadClass(mainClass);
Method method = clazz.getMethod("main", new Class<?>[] { String[].class });
method.invoke(null, (Object) args);
} catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
Expand Down
18 changes: 11 additions & 7 deletions src/nicelee/bilibili/downloaders/impl/FLVDownloader.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
import nicelee.bilibili.annotations.Bilibili;
import nicelee.bilibili.downloaders.IDownloader;
import nicelee.bilibili.enums.StatusEnum;
import nicelee.bilibili.exceptions.BilibiliError;
import nicelee.bilibili.util.CmdUtil;
import nicelee.bilibili.util.HttpHeaders;
import nicelee.bilibili.util.HttpRequestUtil;
import nicelee.bilibili.util.Logger;
import nicelee.ui.Global;


Expand Down Expand Up @@ -131,12 +131,7 @@ protected boolean download(String url, String avId, int qn, int page, String suf
// 下载完毕后,进行合并
convertingStatus = StatusEnum.PROCESSING;
boolean result = CmdUtil.convert(fName + suffix, links.length);
if (result) {
convertingStatus = StatusEnum.SUCCESS;
} else {
convertingStatus = StatusEnum.FAIL;
}
return result;
return throwErrorIfNotConvertOk(result);
} else {
url = tryBetterUrl(url);
String fileName = fName + suffix;
Expand All @@ -149,6 +144,15 @@ protected boolean download(String url, String avId, int qn, int page, String suf
}
}

protected boolean throwErrorIfNotConvertOk(boolean ok) {
if (ok) {
convertingStatus = StatusEnum.SUCCESS;
return true;
} else {
convertingStatus = StatusEnum.FAIL;
throw new BilibiliError("转码失败,请检查ffmpeg配置");
}
}
/**
* 返回当前状态
*
Expand Down
19 changes: 3 additions & 16 deletions src/nicelee/bilibili/downloaders/impl/M4SDownloader.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,7 @@ public boolean download(String url, String avId, int qn, int page) {
if (util.download(links[1], audioName, header.getBiliWwwM4sHeaders(avId))) {
convertingStatus = StatusEnum.PROCESSING;
boolean result = CmdUtil.convert(null, audioName, dstName);
if (result)
convertingStatus = StatusEnum.SUCCESS;
else
convertingStatus = StatusEnum.FAIL;
return result;
return throwErrorIfNotConvertOk(result);
}
return false;
}
Expand All @@ -74,24 +70,15 @@ public boolean download(String url, String avId, int qn, int page) {
totalTaskCnt = currentTask = 1;
convertingStatus = StatusEnum.PROCESSING;
boolean result = CmdUtil.convert(videoName, null, dstName);
if (result)
convertingStatus = StatusEnum.SUCCESS;
else
convertingStatus = StatusEnum.FAIL;
return result;
return throwErrorIfNotConvertOk(result);
}else if (util.download(links[1], audioName, header.getBiliWwwM4sHeaders(avId))) {
// 如下载成功,统计数据后重置
sumSuccessDownloaded += util.getTotalFileSize();
util.reset();
// 下载完毕后,进行合并
convertingStatus = StatusEnum.PROCESSING;
boolean result = CmdUtil.convert(videoName, audioName, dstName);
if (result) {
convertingStatus = StatusEnum.SUCCESS;
} else {
convertingStatus = StatusEnum.FAIL;
}
return result;
return throwErrorIfNotConvertOk(result);
}
return false;
}
Expand Down
30 changes: 29 additions & 1 deletion src/nicelee/bilibili/downloaders/impl/VersionBetaDownloader.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import java.io.File;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand All @@ -13,6 +16,7 @@

import nicelee.bilibili.annotations.Bilibili;
import nicelee.bilibili.enums.StatusEnum;
import nicelee.bilibili.util.HttpHeaders;
import nicelee.bilibili.util.Logger;
import nicelee.bilibili.util.VersionManagerUtil;
import nicelee.ui.Global;
Expand Down Expand Up @@ -73,6 +77,7 @@ public boolean download(String _url, String avId, int qn, int page) {
// sumSuccessDownloaded = artifact.optLong("size_in_bytes", 0);
Logger.println(downName);
Logger.println(url);
String realUrl = getLocation(url, headers);
// 开始下载
if (file == null) {
file = new File(updateDir, downName);
Expand All @@ -81,7 +86,7 @@ public boolean download(String _url, String avId, int qn, int page) {
util.setSavePath(updateDir.getCanonicalPath());
} catch (IOException e1) {
}
boolean succ = util.download(url, downName, headers);
boolean succ = util.download(realUrl, downName, new HttpHeaders().getCommonHeaders());
if (succ) {
sumSuccessDownloaded += util.getTotalFileSize();
util.reset();
Expand All @@ -100,4 +105,27 @@ public boolean download(String _url, String avId, int qn, int page) {
return succ;
}

private String getLocation(String url, Map<String, String> headers) {
try {
URL url0 = new URL(url);
HttpURLConnection conn = (HttpURLConnection) url0.openConnection();
conn.setInstanceFollowRedirects(false);
for (Map.Entry<String, String> entry : headers.entrySet()) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
conn.connect();

int code = conn.getResponseCode();
if (code == 301 || code == 302) {
String location = conn.getHeaderField("Location");
Logger.println(location);
return getLocation(location, headers);
} else {
return url;
}
} catch (IOException e) {
e.printStackTrace();
return url;
}
}
}
32 changes: 4 additions & 28 deletions src/nicelee/ui/FrameMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,17 @@
import javax.swing.JTabbedPane;
import javax.swing.UIManager;

import nicelee.bilibili.INeedAV;
import nicelee.bilibili.INeedLogin;
import nicelee.bilibili.PackageScanLoader;
import nicelee.bilibili.model.VideoInfo;
import nicelee.bilibili.util.CmdUtil;
import nicelee.bilibili.util.ConfigUtil;
import nicelee.bilibili.util.HttpCookies;
import nicelee.bilibili.util.Logger;
import nicelee.bilibili.util.RepoUtil;
import nicelee.bilibili.util.ResourcesUtil;
import nicelee.bilibili.util.SysUtil;
import nicelee.ui.item.MJTitleBar;
import nicelee.ui.thread.BatchDownloadRbyRThread;
import nicelee.ui.thread.CookieRefreshThread;
import nicelee.ui.thread.DownloadRunnable;
import nicelee.ui.thread.LoginThread;
import nicelee.ui.thread.MonitoringThread;

Expand All @@ -46,7 +42,7 @@ public class FrameMain extends JFrame {
public static void main(String[] args) {
System.out.println();
// System.getProperties().setProperty("file.encoding", "utf-8");
boolean isFFmpegSurported = SysUtil.surportFFmpegOfficially();
boolean isFFmpegSupported = SysUtil.surportFFmpegOfficially();
System.out.println("Java version:" + System.getProperty("java.specification.version"));
System.out.println(ResourcesUtil.baseDirectory());
// 读取配置文件
Expand All @@ -56,6 +52,8 @@ public static void main(String[] args) {
System.out.println(Global.version);
System.exit(0);
}
// 初始化 - 检查对数据文件夹是否有“写”的权限
InitCheck.checkFileAccess();
// 显示过渡动画
Global.frWaiting = new FrameWaiting();
Global.frWaiting.start();
Expand All @@ -79,7 +77,6 @@ public static void main(String[] args) {
// }
// 初始化主题
initUITheme();

// 初始化UI
FrameMain main = new FrameMain();
main.InitUI();
Expand Down Expand Up @@ -110,28 +107,7 @@ public static void main(String[] args) {
loginTh.start();

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

//
if (Global.saveToRepo) {
Expand Down
Loading

0 comments on commit 9b772a2

Please sign in to comment.