mirror of
https://github.com/fireinrain/JHS-enhance.git
synced 2026-10-08 03:06:37 +08:00
修复磁力排序刷新失效
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { BasePlugin } from '../core/base-plugin.js';
|
||||
import { __publicField, isJavBus, isJavDb, Status_FILTER, Status_FAVORITE, Status_HAS_DOWN, Status_HAS_WATCH, YES } from '../core/constants.js';
|
||||
import { GM_openInTab } from 'vite-plugin-monkey/dist/client';
|
||||
import {getDmmVideo, selectDefaultQuality} from '../api/dmm.js';
|
||||
|
||||
class CoverButtonPlugin extends BasePlugin {
|
||||
getName() {
|
||||
|
||||
@@ -54,14 +54,21 @@ class DetailPageButtonPlugin extends BasePlugin {
|
||||
settings = {};
|
||||
}
|
||||
const sortEnabled = settings.sortEnabled || {};
|
||||
const fullSortOrder = (settings.sortOrder && settings.sortOrder.length === 3) ? settings.sortOrder : ["date", "size", "files"];
|
||||
const defaultFullSortOrder = isJavBus ? ["date", "size"] : ["date", "size", "files"];
|
||||
const fullSortOrder = (settings.sortOrder && settings.sortOrder.length === defaultFullSortOrder.length) ? settings.sortOrder : defaultFullSortOrder;
|
||||
const effectiveSortOrder = fullSortOrder.filter(key => sortEnabled[key]);
|
||||
highlightMagnetPlugin.applySortAndFilter({
|
||||
const applySettings = {
|
||||
filterHD: settings.filterHD || !1,
|
||||
filter4K: settings.filter4K || !1,
|
||||
filterSubtitle: settings.filterSubtitle || !1,
|
||||
filterUncensored: settings.filterUncensored || !1,
|
||||
sortOrder: effectiveSortOrder,
|
||||
};
|
||||
const rowReadyCondition = isJavBus
|
||||
? (() => $("#magnet-table tr").length > 1)
|
||||
: (() => $("#magnets-content .item[data-rank]").length > 0);
|
||||
utils.loopDetector(rowReadyCondition, () => {
|
||||
highlightMagnetPlugin.applySortAndFilter(applySettings);
|
||||
});
|
||||
$("#magnets-span").text("取消磁力过滤");
|
||||
} else {
|
||||
@@ -99,14 +106,23 @@ class DetailPageButtonPlugin extends BasePlugin {
|
||||
} catch (e) {
|
||||
settings = {};
|
||||
}
|
||||
const sortEnabled = settings.sortEnabled || {date: !1, size: !1, files: !1};
|
||||
const sortOrder = (settings.sortOrder && settings.sortOrder.length === 3) ? settings.sortOrder : ["date", "size", "files"];
|
||||
const sortEnabled = settings.sortEnabled || (isJavBus ? {date: !1, size: !1} : {date: !1, size: !1, files: !1});
|
||||
const defaultSortOrder = isJavBus ? ["date", "size"] : ["date", "size", "files"];
|
||||
const sortOrder = (settings.sortOrder && settings.sortOrder.length === defaultSortOrder.length) ? settings.sortOrder : defaultSortOrder;
|
||||
const filterHD = settings.filterHD || !1;
|
||||
const filter4K = settings.filter4K || !1;
|
||||
const filterSubtitle = settings.filterSubtitle || !1;
|
||||
const filterUncensored = settings.filterUncensored || !1;
|
||||
const SORT_LABELS = {date: "发布日期", size: "文件大小", files: "文件数量"};
|
||||
const SORT_HINTS = {date: "从新到旧", size: "从大到小", files: "从少到多"};
|
||||
const SORT_LABELS = isJavBus ? {date: "发布日期", size: "文件大小"} : {
|
||||
date: "发布日期",
|
||||
size: "文件大小",
|
||||
files: "文件数量"
|
||||
};
|
||||
const SORT_HINTS = isJavBus ? {date: "从新到旧", size: "从大到小"} : {
|
||||
date: "从新到旧",
|
||||
size: "从大到小",
|
||||
files: "从少到多"
|
||||
};
|
||||
const FILTER_ITEMS = [
|
||||
{key: "HD", label: "高清", checked: filterHD},
|
||||
{key: "4K", label: "4K", checked: filter4K},
|
||||
|
||||
@@ -7,15 +7,28 @@ class HighlightMagnetPlugin extends BasePlugin {
|
||||
}
|
||||
|
||||
parseDateFromAttr(dateStr) {
|
||||
if (!dateStr || dateStr.length !== 8) {
|
||||
const d = new Date(dateStr);
|
||||
return isNaN(d.getTime()) ? 0 : d.getTime();
|
||||
if (!dateStr) return 0;
|
||||
if (dateStr.length === 8) {
|
||||
const y = parseInt(dateStr.substring(0, 4), 10);
|
||||
const m = parseInt(dateStr.substring(4, 6), 10) - 1;
|
||||
const d = parseInt(dateStr.substring(6, 8), 10);
|
||||
const date = new Date(y, m, d);
|
||||
return isNaN(date.getTime()) ? 0 : date.getTime();
|
||||
}
|
||||
const y = parseInt(dateStr.substring(0, 4), 10);
|
||||
const m = parseInt(dateStr.substring(4, 6), 10) - 1;
|
||||
const d = parseInt(dateStr.substring(6, 8), 10);
|
||||
const date = new Date(y, m, d);
|
||||
return isNaN(date.getTime()) ? 0 : date.getTime();
|
||||
const d = new Date(dateStr);
|
||||
return isNaN(d.getTime()) ? 0 : d.getTime();
|
||||
}
|
||||
|
||||
parseSizeToBytes(sizeText) {
|
||||
if (!sizeText) return 0;
|
||||
const s = sizeText.trim().toUpperCase();
|
||||
const num = parseFloat(s);
|
||||
if (isNaN(num)) return 0;
|
||||
if (s.includes('TB')) return num * 1024 * 1024 * 1024 * 1024;
|
||||
if (s.includes('GB')) return num * 1024 * 1024 * 1024;
|
||||
if (s.includes('MB')) return num * 1024 * 1024;
|
||||
if (s.includes('KB')) return num * 1024;
|
||||
return num;
|
||||
}
|
||||
|
||||
getRowInfo(row) {
|
||||
@@ -42,7 +55,33 @@ class HighlightMagnetPlugin extends BasePlugin {
|
||||
};
|
||||
}
|
||||
|
||||
getRowInfoForBus(row) {
|
||||
const $row = $(row);
|
||||
const $nameCell = $row.find('td:first-child');
|
||||
const nameText = ($nameCell.find('a:first-child').text() || '').toLowerCase().trim();
|
||||
const sizeText = ($row.find('td:nth-child(2)').text() || '').trim();
|
||||
const dateText = ($row.find('td:nth-child(3)').text() || '').trim();
|
||||
const hasHDButton = $nameCell.find('a.btn-primary').text().includes('高清');
|
||||
return {
|
||||
row: row,
|
||||
$row: $row,
|
||||
nameText: nameText,
|
||||
date: this.parseDateFromAttr(dateText),
|
||||
dateStr: dateText,
|
||||
size: this.parseSizeToBytes(sizeText),
|
||||
files: 0,
|
||||
tags: [],
|
||||
is4K: nameText.includes('4k') || nameText.includes('[4k]'),
|
||||
isHD: hasHDButton || nameText.includes('高清'),
|
||||
isSubtitle: nameText.includes('字幕') || nameText.includes('-c') || nameText.includes('.chs') || nameText.includes('.cht') || nameText.includes('.chi'),
|
||||
isUncensored: nameText.includes('无码') || nameText.includes('無碼') || nameText.includes('-u') || nameText.includes('-uc'),
|
||||
};
|
||||
}
|
||||
|
||||
async applySortAndFilter(settings) {
|
||||
if (isJavBus) {
|
||||
return this.applySortAndFilterForBus(settings);
|
||||
}
|
||||
if (!isJavDb) return;
|
||||
const $container = $("#magnets-content");
|
||||
const $rows = $container.find(".item[data-rank]");
|
||||
@@ -103,6 +142,61 @@ class HighlightMagnetPlugin extends BasePlugin {
|
||||
hiddenInfos.forEach(info => $(info.row).hide());
|
||||
}
|
||||
|
||||
applySortAndFilterForBus(settings) {
|
||||
const $table = $("#magnet-table");
|
||||
if (!$table.length) return;
|
||||
const allRows = $table.find("tr").toArray();
|
||||
const headerRow = allRows.find(r => $(r).find('td').length === 0 || $(r).css('font-weight') === 'bold' || $(r).css('fontWeight') === 'bold' || $(r).css('font-weight') === '700');
|
||||
const dataRows = headerRow ? allRows.filter(r => r !== headerRow) : allRows.slice(1);
|
||||
if (0 === dataRows.length) return;
|
||||
const rowInfos = dataRows.map(row => this.getRowInfoForBus(row));
|
||||
const {filterHD, filter4K, filterSubtitle, filterUncensored, sortOrder} = settings;
|
||||
const anyFilterEnabled = filterHD || filter4K || filterSubtitle || filterUncensored;
|
||||
let visibleInfos = rowInfos;
|
||||
if (anyFilterEnabled) {
|
||||
visibleInfos = rowInfos.filter(info => {
|
||||
if (filterHD && info.isHD) return !0;
|
||||
if (filter4K && info.is4K) return !0;
|
||||
if (filterSubtitle && info.isSubtitle) return !0;
|
||||
if (filterUncensored && info.isUncensored) return !0;
|
||||
return !1;
|
||||
});
|
||||
}
|
||||
if (sortOrder && sortOrder.length > 0) {
|
||||
visibleInfos.sort((a, b) => {
|
||||
for (const key of sortOrder) {
|
||||
let cmp = 0;
|
||||
switch (key) {
|
||||
case 'date':
|
||||
cmp = b.date - a.date;
|
||||
break;
|
||||
case 'size':
|
||||
cmp = b.size - a.size;
|
||||
break;
|
||||
}
|
||||
if (0 !== cmp) return cmp;
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
}
|
||||
const hiddenInfos = rowInfos.filter(info => !visibleInfos.includes(info));
|
||||
const fragment = document.createDocumentFragment();
|
||||
visibleInfos.forEach(info => fragment.appendChild(info.row));
|
||||
hiddenInfos.forEach(info => fragment.appendChild(info.row));
|
||||
const insertAnchor = headerRow || $table.find("tr").first()[0];
|
||||
if (insertAnchor && insertAnchor.nextSibling) {
|
||||
$(insertAnchor).after(fragment);
|
||||
} else {
|
||||
$table.append(fragment);
|
||||
}
|
||||
visibleInfos.forEach(info => {
|
||||
if (info.is4K) {
|
||||
info.$row.addClass('magnet-4k-highlight');
|
||||
}
|
||||
});
|
||||
hiddenInfos.forEach(info => $(info.row).hide());
|
||||
}
|
||||
|
||||
showAll() {
|
||||
if (isJavDb) {
|
||||
$("#magnets-content .item[data-rank]").toArray().forEach((el => {
|
||||
@@ -111,7 +205,10 @@ class HighlightMagnetPlugin extends BasePlugin {
|
||||
}));
|
||||
}
|
||||
if (isJavBus) {
|
||||
$("#magnet-table tr").toArray().forEach((el => $(el).show()));
|
||||
$("#magnet-table tr").toArray().forEach((el => {
|
||||
$(el).show();
|
||||
$(el).removeClass('magnet-4k-highlight');
|
||||
}));
|
||||
}
|
||||
}
|
||||
handleBus() {
|
||||
|
||||
Reference in New Issue
Block a user