动漫备用源失败时清除默认备用源设置
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
clearBangumiImageFallbackCacheIfFailed,
|
||||||
processImageUrl,
|
processImageUrl,
|
||||||
tryApplyBangumiImageFallback,
|
tryApplyBangumiImageFallback,
|
||||||
tryApplyDoubanImageFallback,
|
tryApplyDoubanImageFallback,
|
||||||
@@ -65,6 +66,11 @@ const ProxyImage: React.FC<ProxyImageProps> = ({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clearBangumiImageFallbackCacheIfFailed(img, originalSrc)) {
|
||||||
|
setCurrentSrc(processImageUrl(originalSrc));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (retryOnError && !img.dataset.retried) {
|
if (retryOnError && !img.dataset.retried) {
|
||||||
img.dataset.retried = 'true';
|
img.dataset.retried = 'true';
|
||||||
window.setTimeout(() => {
|
window.setTimeout(() => {
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import {
|
|||||||
import { isNetdiskSource } from '@/lib/netdisk/source';
|
import { isNetdiskSource } from '@/lib/netdisk/source';
|
||||||
import {
|
import {
|
||||||
base58Decode,
|
base58Decode,
|
||||||
|
clearBangumiImageFallbackCacheIfFailed,
|
||||||
getBangumiImageFallbackUrl,
|
getBangumiImageFallbackUrl,
|
||||||
getDoubanImageFallbackUrl,
|
getDoubanImageFallbackUrl,
|
||||||
markBangumiImageFallbackActive,
|
markBangumiImageFallbackActive,
|
||||||
@@ -981,6 +982,14 @@ const VideoCard = forwardRef<VideoCardHandle, VideoCardProps>(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
clearBangumiImageFallbackCacheIfFailed(img, actualPoster)
|
||||||
|
) {
|
||||||
|
clearBangumiImageTimeout();
|
||||||
|
setDisplayPoster(processedPoster);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 图片加载失败时的重试机制
|
// 图片加载失败时的重试机制
|
||||||
if (!img.dataset.retried) {
|
if (!img.dataset.retried) {
|
||||||
img.dataset.retried = 'true';
|
img.dataset.retried = 'true';
|
||||||
|
|||||||
@@ -233,6 +233,47 @@ export function markBangumiImageFallbackActive(): void {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeComparableUrl(url: string): string {
|
||||||
|
if (typeof window === 'undefined') return url;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return new URL(url, window.location.href).href;
|
||||||
|
} catch {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function clearBangumiImageFallbackCacheIfFailed(
|
||||||
|
target: HTMLImageElement,
|
||||||
|
originalUrl: string
|
||||||
|
): boolean {
|
||||||
|
if (!originalUrl || !isBangumiImageUrl(originalUrl)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fallbackUrl = getBangumiImageFallbackUrl(originalUrl);
|
||||||
|
if (!fallbackUrl) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const normalizedFallbackUrl = normalizeComparableUrl(fallbackUrl);
|
||||||
|
const failedUrls = [target.currentSrc, target.src]
|
||||||
|
.filter(Boolean)
|
||||||
|
.map(normalizeComparableUrl);
|
||||||
|
const isFallbackFailure =
|
||||||
|
target.dataset.bangumiBackupTried === 'true' ||
|
||||||
|
failedUrls.includes(normalizedFallbackUrl);
|
||||||
|
|
||||||
|
if (!isFallbackFailure) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.dataset.bangumiBackupFailed = 'true';
|
||||||
|
delete target.dataset.bangumiBackupTried;
|
||||||
|
clearBangumiImageFallbackCache();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function isBangumiImageFallbackActive(): boolean {
|
function isBangumiImageFallbackActive(): boolean {
|
||||||
if (typeof window === 'undefined') return false;
|
if (typeof window === 'undefined') return false;
|
||||||
|
|
||||||
@@ -329,6 +370,10 @@ export function tryApplyBangumiImageFallback(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (target.dataset.bangumiBackupFailed === 'true') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const fallbackUrl = getBangumiImageFallbackUrl(originalUrl);
|
const fallbackUrl = getBangumiImageFallbackUrl(originalUrl);
|
||||||
if (
|
if (
|
||||||
!fallbackUrl ||
|
!fallbackUrl ||
|
||||||
|
|||||||
Reference in New Issue
Block a user