import Qmsg from "qmsg"; import { NetDiskUserRule } from "./NetDiskUserRule"; import { NetDiskUserRuleDebug } from "@/main/debug/NetDiskUserRuleDebug"; import { log } from "@/env"; import { NetDiskPops } from "@/main/pops/NetDiskPops"; import { NetDiskView } from "@/main/view/NetDiskView"; import dialogCSS from "./css/dialog.css?raw"; import { NetDiskUserRuleSubscribeRule } from "./NetDiskUserRuleSubscribeRule"; export const NetDiskUserRuleUI = { /** * 添加/编辑规则 * @param isEdit * @param ruleKey 当isEdit为true时,传入该值 * @param valueChangeCallBack 添加/编辑保存后的值改变的回调 */ show( isEdit: boolean, ruleKey?: string, valueChangeCallBack?: ( /** * 修改后的新的规则数据 */ rule: NetDiskUserCustomRule ) => void ) { const that = this; let titleText = "添加"; if (isEdit) { titleText = "编辑"; } titleText += "链接识别规则"; let $ruleInput = null as any as HTMLTextAreaElement; /** * 保存按钮的回调 */ function saveCallBack(event: any, isDebug: boolean) { let ruleText = $ruleInput.value.trim(); let parseRuleResult = NetDiskUserRule.parseRuleStrToRule(ruleText); if (parseRuleResult.success) { let userRule = parseRuleResult.data!; if (isEdit) { let flag = NetDiskUserRule.updateRule(ruleKey!, userRule); if (flag) { Qmsg.success("更新成功"); } else { Qmsg.error("更新失败"); return; } } else { NetDiskUserRule.addRule(userRule); Qmsg.success("添加成功"); } valueChangeCallBack?.(userRule); } else { Qmsg.error(parseRuleResult.msg); } } /** * 调试按钮的回调 * @param event */ function debugCallBack(event: any) { let ruleText = $ruleInput.value.trim(); let parseRuleResult = NetDiskUserRule.parseRuleStrToRule(ruleText); if (parseRuleResult.success) { let userRule = parseRuleResult.data!; NetDiskUserRuleDebug.showUI(userRule); } else { Qmsg.error(parseRuleResult.msg); } } /** * 格式化按钮的回调 */ function formatCallBack(event: any) { try { let ruleJSON = JSON.parse($ruleInput.value); let ruleJSONString = NetDiskUserRule.getFormatRule(ruleJSON); $ruleInput.value = ruleJSONString; Qmsg.success("格式化成功"); } catch (error: any) { log.error(error); Qmsg.error(error.message, { timeout: 3500, isHTML: true, }); } } let dialog = NetDiskPops.confirm( { title: { text: titleText, position: "center", }, content: { text: /*html*/ ``, html: true, }, btn: { merge: true, mergeReverse: false, reverse: false, position: "space-between", ok: { text: "保存", callback: (eventDetails, event) => { saveCallBack(event, false); }, }, cancel: { text: "调试", callback: (eventDetails, event) => { debugCallBack(event); }, }, other: { enable: true, text: "格式化", type: "xiaomi-primary", callback: (eventDetails, event) => { formatCallBack(event); }, }, }, class: "whitesevPopNetDiskCustomRules", style: dialogCSS, }, NetDiskView.$config.viewSizeConfig.customRulesView ); $ruleInput = dialog.$shadowRoot.querySelector("textarea")!; let rule; if (isEdit) { rule = NetDiskUserRule.getRule(ruleKey!)!; } else { rule = NetDiskUserRule.getTemplateRule(); } $ruleInput.value = NetDiskUserRule.getFormatRule(rule); }, /** * 添加/编辑规则 * @param subscribeUUID 订阅的UUID * @param ruleKey 当isEdit为true时,传入该值 * @param valueChangeCallBack 添加/编辑保存后的值改变的回调 */ showSubscribe( subscribeUUID: string, ruleKey: string, valueChangeCallBack?: ( /** * 修改后的新的规则数据 */ rule: NetDiskUserCustomRule ) => void ) { const that = this; let titleText = "编辑" + "订阅的链接识别规则"; let $ruleInput = null as any as HTMLTextAreaElement; /** * 保存按钮的回调 */ function saveCallBack(event: any, isDebug: boolean) { let ruleText = $ruleInput.value.trim(); let parseRuleResult = NetDiskUserRule.parseRuleStrToRule(ruleText); if (parseRuleResult.success) { let userRule = parseRuleResult.data!; let flag = NetDiskUserRuleSubscribeRule.updateSubscribeRule(subscribeUUID, userRule); if (flag) { Qmsg.success("更新成功"); } else { Qmsg.error("更新失败"); return; } valueChangeCallBack?.(userRule); } else { Qmsg.error(parseRuleResult.msg); } } /** * 调试按钮的回调 * @param event */ function debugCallBack(event: any) { let ruleText = $ruleInput.value.trim(); let parseRuleResult = NetDiskUserRule.parseRuleStrToRule(ruleText); if (parseRuleResult.success) { let userRule = parseRuleResult.data!; NetDiskUserRuleDebug.showUI(userRule); } else { Qmsg.error(parseRuleResult.msg); } } /** * 格式化按钮的回调 */ function formatCallBack(event: any) { try { let ruleJSON = JSON.parse($ruleInput.value); let ruleJSONString = NetDiskUserRule.getFormatRule(ruleJSON); $ruleInput.value = ruleJSONString; Qmsg.success("格式化成功"); } catch (error: any) { log.error(error); Qmsg.error(error.message, { isHTML: true, timeout: 3500, }); } } let dialog = NetDiskPops.confirm( { title: { text: titleText, position: "center", }, content: { text: /*html*/ ``, html: true, }, btn: { merge: true, mergeReverse: false, reverse: false, position: "space-between", ok: { text: "保存", callback: (eventDetails, event) => { saveCallBack(event, false); }, }, cancel: { text: "调试", callback: (eventDetails, event) => { debugCallBack(event); }, }, other: { enable: true, text: "格式化", type: "xiaomi-primary", callback: (eventDetails, event) => { formatCallBack(event); }, }, }, class: "whitesevPopNetDiskCustomRules", style: dialogCSS, }, NetDiskView.$config.viewSizeConfig.customRulesView ); $ruleInput = dialog.$shadowRoot.querySelector("textarea")!; let rule; rule = NetDiskUserRuleSubscribeRule.getSubscribeRule(subscribeUUID, ruleKey!)!; $ruleInput.value = NetDiskUserRule.getFormatRule(rule); }, };