import { log, utils } from "@/env"; import { M3U8Rule } from "@/main/M3U8Rule"; import { CommonUtil } from "@components/utils/CommonUtil"; import type { UtilsAjaxHookResult } from "@whitesev/utils/dist/types/src/types/ajaxHooker.js"; export const NetWorkHook = { get ajaxHooker(): UtilsAjaxHookResult { // @ts-ignore if (this.__ajaxHooker == null) { // @ts-ignore this.__ajaxHooker = utils.ajaxHooker(); } // @ts-ignore return this.__ajaxHooker as UtilsAjaxHookResult; }, hook() { this.ajaxHooker.hook((request) => { let url = CommonUtil.fixUrl(request.url); try { let urlObj = new URL(url); let pathName = urlObj.pathname; if (!pathName.endsWith(".m3u8")) { return; } request.response = (response) => { let m3u8Text = response.responseText; if (m3u8Text.trim() === "") { return; } if (!m3u8Text.includes("#EXT-X-ENDLIST")) { // 直播 return; } // 点播 let handlerM3U8Text = M3U8Rule.runRule(m3u8Text); response.responseText = handlerM3U8Text; }; } catch (error) { log.error("m3u8过滤器 hook network出错", error); } }); }, unhook() { this.ajaxHooker.unhook(); }, };