fix: Z-Library 按需获取下载地址并发布 v2.1.4
构建与发布 / 单测与集成测试 (push) Has been cancelled
构建与发布 / 打包 ${{ matrix.platform }} ${{ matrix.arch }} (arm64, linux, ubuntu-24.04-arm) (push) Has been cancelled
构建与发布 / 打包 ${{ matrix.platform }} ${{ matrix.arch }} (arm64, macos, macos-15) (push) Has been cancelled
构建与发布 / 打包 ${{ matrix.platform }} ${{ matrix.arch }} (x64, linux, ubuntu-24.04) (push) Has been cancelled
构建与发布 / 打包 ${{ matrix.platform }} ${{ matrix.arch }} (x64, windows, windows-2025) (push) Has been cancelled
构建与发布 / 发布 GitHub Release (push) Has been cancelled
构建与发布 / 单测与集成测试 (push) Has been cancelled
构建与发布 / 打包 ${{ matrix.platform }} ${{ matrix.arch }} (arm64, linux, ubuntu-24.04-arm) (push) Has been cancelled
构建与发布 / 打包 ${{ matrix.platform }} ${{ matrix.arch }} (arm64, macos, macos-15) (push) Has been cancelled
构建与发布 / 打包 ${{ matrix.platform }} ${{ matrix.arch }} (x64, linux, ubuntu-24.04) (push) Has been cancelled
构建与发布 / 打包 ${{ matrix.platform }} ${{ matrix.arch }} (x64, windows, windows-2025) (push) Has been cancelled
构建与发布 / 发布 GitHub Release (push) Has been cancelled
This commit is contained in:
+42
-2
@@ -314,7 +314,11 @@ const Browse = (() => {
|
||||
}
|
||||
state.currentDetail = res.data;
|
||||
renderDetail(res.data);
|
||||
loadDownload(postId, activeSourceId, token);
|
||||
if (sourceDownloadsOnDemand(activeSourceId)) {
|
||||
renderOnDemandDownload(postId, activeSourceId, token);
|
||||
} else {
|
||||
loadDownload(postId, activeSourceId, token);
|
||||
}
|
||||
refreshAddButton();
|
||||
}
|
||||
|
||||
@@ -323,6 +327,11 @@ const Browse = (() => {
|
||||
return s ? s.name : id;
|
||||
}
|
||||
|
||||
function sourceDownloadsOnDemand(id) {
|
||||
const source = state.sourceList.find((item) => item.id === id);
|
||||
return !!(source && source.downloadOnDemand);
|
||||
}
|
||||
|
||||
function renderDetail(d) {
|
||||
const tagsHtml = (d.tags || []).map((t) => {
|
||||
const idx = t.indexOf(':');
|
||||
@@ -391,7 +400,10 @@ const Browse = (() => {
|
||||
$('dlRetry').onclick = () => loadDownload(postId, sourceId, token);
|
||||
return;
|
||||
}
|
||||
const d = res.data;
|
||||
renderDownloadResult(box, res.data);
|
||||
}
|
||||
|
||||
function renderDownloadResult(box, d) {
|
||||
let html = '';
|
||||
const files = d.files || [];
|
||||
if (files.length) {
|
||||
@@ -412,6 +424,34 @@ const Browse = (() => {
|
||||
box.querySelectorAll('[data-open]').forEach((a) => { a.onclick = (e) => { e.preventDefault(); window.api.openExternal(a.dataset.open); }; });
|
||||
}
|
||||
|
||||
function renderOnDemandDownload(postId, sourceId, token) {
|
||||
const box = $('downloadBox');
|
||||
if (!box) return;
|
||||
box.innerHTML = `<div class="dl-files"><div class="dl-file-row">
|
||||
<span class="dl-file-name">每日免费下载额度有限,仅在点击后获取下载地址</span>
|
||||
<button class="dl-btn" id="onDemandDownloadBtn">下载</button>
|
||||
</div></div>`;
|
||||
const btn = $('onDemandDownloadBtn');
|
||||
btn.onclick = async () => {
|
||||
const oldError = box.querySelector('.dl-error');
|
||||
if (oldError) oldError.remove();
|
||||
btn.disabled = true;
|
||||
btn.textContent = '获取中...';
|
||||
const res = await window.api.sources.download(sourceId, postId);
|
||||
if (!box.isConnected || token !== state.detailToken) return;
|
||||
if (!res.ok) {
|
||||
btn.disabled = false;
|
||||
btn.textContent = '重试';
|
||||
btn.title = res.error || '获取下载地址失败';
|
||||
box.insertAdjacentHTML('beforeend', `<div class="dl-error">获取失败:${escapeHtml(res.error)}</div>`);
|
||||
return;
|
||||
}
|
||||
renderDownloadResult(box, res.data);
|
||||
const download = box.querySelector('.dl-btn[data-file]');
|
||||
if (download) download.click();
|
||||
};
|
||||
}
|
||||
|
||||
// 当前条目的元数据,供下载时自动建库用
|
||||
function entryMeta() {
|
||||
const d = state.currentDetail || {};
|
||||
|
||||
Reference in New Issue
Block a user