|
|
|
@ -5,6 +5,11 @@ import { convertSubtitlesToSrt } from "@/components/player/utils/captions";
@@ -5,6 +5,11 @@ import { convertSubtitlesToSrt } from "@/components/player/utils/captions";
|
|
|
|
|
import { CaptionListItem } from "@/stores/player/slices/source"; |
|
|
|
|
import { SimpleCache } from "@/utils/cache"; |
|
|
|
|
|
|
|
|
|
import { |
|
|
|
|
isExtensionActiveCached, |
|
|
|
|
sendExtensionRequest, |
|
|
|
|
} from "../extension/messaging"; |
|
|
|
|
|
|
|
|
|
export const subtitleTypeList = list().map((type) => `.${type}`); |
|
|
|
|
const downloadCache = new SimpleCache<string, string>(); |
|
|
|
|
downloadCache.setCompare((a, b) => a === b); |
|
|
|
@ -21,7 +26,22 @@ export async function downloadCaption(
@@ -21,7 +26,22 @@ export async function downloadCaption(
|
|
|
|
|
|
|
|
|
|
let data: string | undefined; |
|
|
|
|
if (caption.needsProxy) { |
|
|
|
|
if (isExtensionActiveCached()) { |
|
|
|
|
const extensionResponse = await sendExtensionRequest({ |
|
|
|
|
url: caption.url, |
|
|
|
|
method: "GET", |
|
|
|
|
}); |
|
|
|
|
if ( |
|
|
|
|
!extensionResponse?.success || |
|
|
|
|
typeof extensionResponse.response.body !== "string" |
|
|
|
|
) { |
|
|
|
|
throw new Error("failed to get caption data from extension"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
data = extensionResponse.response.body; |
|
|
|
|
} else { |
|
|
|
|
data = await proxiedFetch<string>(caption.url, { responseType: "text" }); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
data = await fetch(caption.url).then((v) => v.text()); |
|
|
|
|
} |
|
|
|
|