mirror of
https://github.com/fireinrain/JHS-enhance.git
synced 2026-09-28 07:36:38 +08:00
新增下载高清封面
This commit is contained in:
Vendored
+21
-11
@@ -1,7 +1,7 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name JHS-enhance
|
// @name JHS-enhance
|
||||||
// @namespace JHS-enhance
|
// @namespace JHS-enhance
|
||||||
// @version 3.3.10
|
// @version 3.3.11
|
||||||
// @author xiebro,fireinrain
|
// @author xiebro,fireinrain
|
||||||
// @description Jav-鉴黄师 增强脚本。列表页:作品状态标签、一键筛选、新作品检测、演员黑名单过滤;详情页:磁力链接高亮、DMM 多画质预览视频、标题翻译、整合字幕搜索(迅雷+SubTitleCat)并支持 115 直传、多源预览图(javfree/projectjav/javstore)含来源切换;数据:115 网盘目录匹配与多目录选择、云盘备份/恢复、跨 Tab 同步;其他:自动翻页、分类折叠、Top250、以图识图、热门榜单、评论查看、相关清单。支持 JavDB / JavBus / JavSee / SeeJav / FC2 / JavTrailers
|
// @description Jav-鉴黄师 增强脚本。列表页:作品状态标签、一键筛选、新作品检测、演员黑名单过滤;详情页:磁力链接高亮、DMM 多画质预览视频、标题翻译、整合字幕搜索(迅雷+SubTitleCat)并支持 115 直传、多源预览图(javfree/projectjav/javstore)含来源切换;数据:115 网盘目录匹配与多目录选择、云盘备份/恢复、跨 Tab 同步;其他:自动翻页、分类折叠、Top250、以图识图、热门榜单、评论查看、相关清单。支持 JavDB / JavBus / JavSee / SeeJav / FC2 / JavTrailers
|
||||||
// @license MIT
|
// @license MIT
|
||||||
@@ -10428,7 +10428,7 @@ ${err.stack}` : "");
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
const fromJavxyCover = async (code) => {
|
const getJavxyCover = async (code) => {
|
||||||
const query = String(code || "").trim();
|
const query = String(code || "").trim();
|
||||||
if (!query) return null;
|
if (!query) return null;
|
||||||
for (const endpoint of JAVXY_ENDPOINTS) {
|
for (const endpoint of JAVXY_ENDPOINTS) {
|
||||||
@@ -15714,20 +15714,20 @@ ${err.stack}` : "");
|
|||||||
}));
|
}));
|
||||||
$("#downloadCoverBtn").on("click", (async () => {
|
$("#downloadCoverBtn").on("click", (async () => {
|
||||||
if (!isEligibleDmmCoverCode(carNum2)) {
|
if (!isEligibleDmmCoverCode(carNum2)) {
|
||||||
layer.msg("当前番号不支持下载高清封面");
|
show.error("当前番号不支持下载高清封面");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const $btn = $("#downloadCoverBtn");
|
const $btn = $("#downloadCoverBtn");
|
||||||
$btn.addClass("is-loading").prop("disabled", true);
|
$btn.addClass("is-loading").prop("disabled", true);
|
||||||
try {
|
try {
|
||||||
const coverData = await fromJavxyCover(carNum2);
|
const coverData = await getJavxyCover(carNum2);
|
||||||
if (!coverData) {
|
if (!coverData) {
|
||||||
layer.msg("未找到高清封面");
|
show.error("未找到高清封面");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const coverUrl = coverData.url || coverData.highCover || coverData.cover;
|
const coverUrl = coverData.url || coverData.highCover || coverData.cover;
|
||||||
if (!coverUrl) {
|
if (!coverUrl) {
|
||||||
layer.msg("封面链接为空");
|
show.error("封面链接为空");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const fileName = `${carNum2}-cover.jpg`;
|
const fileName = `${carNum2}-cover.jpg`;
|
||||||
@@ -15737,16 +15737,26 @@ ${err.stack}` : "");
|
|||||||
responseType: "blob",
|
responseType: "blob",
|
||||||
onload: (response) => {
|
onload: (response) => {
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
utils.download(response.response, fileName);
|
const blobUrl = URL.createObjectURL(response.response);
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.href = blobUrl;
|
||||||
|
a.download = fileName;
|
||||||
|
document.body.appendChild(a);
|
||||||
|
a.click();
|
||||||
|
setTimeout(() => {
|
||||||
|
document.body.removeChild(a);
|
||||||
|
URL.revokeObjectURL(blobUrl);
|
||||||
|
}, 100);
|
||||||
|
show.ok("封面下载已开始");
|
||||||
} else {
|
} else {
|
||||||
layer.msg(`封面下载失败: ${response.status}`);
|
show.error(`封面下载失败: ${response.status}`);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onerror: () => layer.msg("封面下载网络错误"),
|
onerror: () => show.error("封面下载网络错误"),
|
||||||
ontimeout: () => layer.msg("封面下载超时")
|
ontimeout: () => show.error("封面下载超时")
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
layer.msg("获取封面信息失败");
|
show.error("获取封面信息失败");
|
||||||
} finally {
|
} finally {
|
||||||
$btn.removeClass("is-loading").prop("disabled", false);
|
$btn.removeClass("is-loading").prop("disabled", false);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -211,7 +211,7 @@ const getJavxyVideoUrls = async (code, failedSources = []) => {
|
|||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
const fromJavxyCover = async (code) => {
|
const getJavxyCover = async (code) => {
|
||||||
const query = String(code || '').trim();
|
const query = String(code || '').trim();
|
||||||
if (!query) return null;
|
if (!query) return null;
|
||||||
|
|
||||||
@@ -240,7 +240,7 @@ export {
|
|||||||
fromJavxyCcCd,
|
fromJavxyCcCd,
|
||||||
fallbackJavxyResult,
|
fallbackJavxyResult,
|
||||||
getJavxyVideoUrls,
|
getJavxyVideoUrls,
|
||||||
fromJavxyCover,
|
getJavxyCover,
|
||||||
normalizeJavxySource,
|
normalizeJavxySource,
|
||||||
isJpSourceTemporarilyFailed,
|
isJpSourceTemporarilyFailed,
|
||||||
markJpSourceTemporarilyFailed,
|
markJpSourceTemporarilyFailed,
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import {
|
|||||||
} from '../core/constants.js';
|
} from '../core/constants.js';
|
||||||
import { HotkeyManager } from './preview-video.js';
|
import { HotkeyManager } from './preview-video.js';
|
||||||
import {GM_xmlhttpRequest} from 'vite-plugin-monkey/dist/client';
|
import {GM_xmlhttpRequest} from 'vite-plugin-monkey/dist/client';
|
||||||
import {fromJavxyCover} from '../api/javxy.js';
|
import {getJavxyCover} from '../api/javxy.js';
|
||||||
|
|
||||||
class DetailPageButtonPlugin extends BasePlugin {
|
class DetailPageButtonPlugin extends BasePlugin {
|
||||||
getName() {
|
getName() {
|
||||||
@@ -102,20 +102,20 @@ class DetailPageButtonPlugin extends BasePlugin {
|
|||||||
}));
|
}));
|
||||||
$("#downloadCoverBtn").on("click", (async () => {
|
$("#downloadCoverBtn").on("click", (async () => {
|
||||||
if (!isEligibleDmmCoverCode(carNum2)) {
|
if (!isEligibleDmmCoverCode(carNum2)) {
|
||||||
layer.msg("当前番号不支持下载高清封面");
|
show.error("当前番号不支持下载高清封面");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const $btn = $("#downloadCoverBtn");
|
const $btn = $("#downloadCoverBtn");
|
||||||
$btn.addClass("is-loading").prop("disabled", true);
|
$btn.addClass("is-loading").prop("disabled", true);
|
||||||
try {
|
try {
|
||||||
const coverData = await fromJavxyCover(carNum2);
|
const coverData = await getJavxyCover(carNum2);
|
||||||
if (!coverData) {
|
if (!coverData) {
|
||||||
layer.msg("未找到高清封面");
|
show.error("未找到高清封面");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const coverUrl = coverData.url || coverData.highCover || coverData.cover;
|
const coverUrl = coverData.url || coverData.highCover || coverData.cover;
|
||||||
if (!coverUrl) {
|
if (!coverUrl) {
|
||||||
layer.msg("封面链接为空");
|
show.error("封面链接为空");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const fileName = `${carNum2}-cover.jpg`;
|
const fileName = `${carNum2}-cover.jpg`;
|
||||||
@@ -125,16 +125,26 @@ class DetailPageButtonPlugin extends BasePlugin {
|
|||||||
responseType: 'blob',
|
responseType: 'blob',
|
||||||
onload: (response) => {
|
onload: (response) => {
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
utils.download(response.response, fileName);
|
const blobUrl = URL.createObjectURL(response.response);
|
||||||
|
const a = document.createElement('a');
|
||||||
|
a.href = blobUrl;
|
||||||
|
a.download = fileName;
|
||||||
|
document.body.appendChild(a);
|
||||||
|
a.click();
|
||||||
|
setTimeout(() => {
|
||||||
|
document.body.removeChild(a);
|
||||||
|
URL.revokeObjectURL(blobUrl);
|
||||||
|
}, 100);
|
||||||
|
show.ok("封面下载已开始");
|
||||||
} else {
|
} else {
|
||||||
layer.msg(`封面下载失败: ${response.status}`);
|
show.error(`封面下载失败: ${response.status}`);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onerror: () => layer.msg("封面下载网络错误"),
|
onerror: () => show.error("封面下载网络错误"),
|
||||||
ontimeout: () => layer.msg("封面下载超时"),
|
ontimeout: () => show.error("封面下载超时"),
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
layer.msg("获取封面信息失败");
|
show.error("获取封面信息失败");
|
||||||
} finally {
|
} finally {
|
||||||
$btn.removeClass("is-loading").prop("disabled", false);
|
$btn.removeClass("is-loading").prop("disabled", false);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user