import { GreasyforkApi } from "@/api/GreasyForkApi"; import { DOMUtils, log, pops, utils } from "@/env"; import i18next from "i18next"; import Qmsg from "qmsg"; import { GreasyforkMenu } from "../GreasyforkMenu"; export const PopsPanelUISetting = { /** * 面板-脚本列表|库 * @param type * @param event * @param rightHeaderElement * @param rightContainerElement * @returns */ async UIScriptList(type: "script-list" | "script-library", rightContainerElement: HTMLUListElement) { if (!GreasyforkMenu.isLogin) { Qmsg.error(i18next.t("请先登录账号!")); return; } const $userLink = GreasyforkMenu.getUserLinkElement(); const userLink = $userLink!.href; const userId = userLink ?.split("/") ?.pop() ?.match(/([0-9]+)/)?.[0] as string; const $loading = pops.loading({ mask: { enable: true, }, $parent: rightContainerElement, content: { text: i18next.t("获取信息中,请稍后..."), }, addIndexCSS: false, }); const userInfo = await GreasyforkApi.getUserAllInfo(userId); $loading.close(); if (!userInfo) { return; } log.info(userInfo); const scriptList = type === "script-list" ? userInfo["scriptList"] : userInfo["scriptLibraryList"]; Qmsg.success( i18next.t("获取成功,共 {{count}} 个", { count: scriptList.length, }) ); for (const scriptInfo of scriptList) { const $li = DOMUtils.createElement("li", { className: "w-script-list-item", innerHTML: /*html*/ `
${scriptInfo["name"]}

${i18next.t("评分:")}${scriptInfo["fan_score"]}

${i18next.t("语言:")}${scriptInfo["locale"]}

${i18next.t("版本:")}${scriptInfo["version"]}

${i18next.t("更新:")}${utils.getDaysDifference( new Date(scriptInfo["code_updated_at"]).getTime(), void 0, "auto" )}前

`, }); const $scriptInfo = $li.querySelector(".w-script-info") as HTMLElement; const $syncCode = DOMUtils.createElement("div", { className: "pops-panel-button", innerHTML: /*html*/ ` `, }); if (scriptInfo["deleted"]) { /* 该脚本已给删除 */ $li.classList.add("w-script-deleted"); $syncCode.querySelector("button")!.setAttribute("disabled", "true"); } DOMUtils.on($syncCode, "click", async function () { log.success("同步", scriptInfo); const $button = $syncCode.querySelector("button") as HTMLButtonElement; const $span = $syncCode.querySelector("button span") as HTMLSpanElement; const $icon = DOMUtils.createElement( "i", { className: "pops-bottom-icon", innerHTML: pops.config.iconSVG.loading, }, { "is-loading": true, } ); $button.setAttribute("disabled", "true"); $button.setAttribute("data-icon", "true"); $span.innerText = i18next.t("同步中..."); DOMUtils.before($span, $icon); const scriptId = scriptInfo?.["id"]; const syncFormDataInfo = await GreasyforkApi.getSourceCodeSyncFormDataInfo(scriptId.toString()); if (syncFormDataInfo) { const { formData: codeSyncFormData, url: syncUrl } = syncFormDataInfo; const SCRIPT_SYNC_TYPE_ID_FORMDATA_KEY = "script[script_sync_type_id]"; const SCRIPT_SYNC_TYPE = "script[sync_type]"; if (codeSyncFormData.has(SCRIPT_SYNC_TYPE_ID_FORMDATA_KEY) || codeSyncFormData.has(SCRIPT_SYNC_TYPE)) { /** * 同步方式 */ let syncMode = ""; if (codeSyncFormData.has(SCRIPT_SYNC_TYPE_ID_FORMDATA_KEY)) { /* 1是手动同步、2是自动同步、3是webhook同步 */ // 旧版本是这样的 let syncTypeId = codeSyncFormData.get(SCRIPT_SYNC_TYPE_ID_FORMDATA_KEY) as FormDataEntryValue; if (syncTypeId.toString() === "1") { syncMode = i18next.t("手动"); } else if (syncTypeId.toString() === "2") { syncMode = i18next.t("自动"); } else if (syncTypeId.toString() === "3") { syncMode = "webhook"; } } else if (codeSyncFormData.has(SCRIPT_SYNC_TYPE)) { // 新版本直接是 script[sync_type] syncMode = codeSyncFormData.get(SCRIPT_SYNC_TYPE) as string; } const $oldSyncType = $li.querySelector(".w-script-sync-type")!; if ($oldSyncType) { $oldSyncType.querySelector("p")!.innerText = i18next.t("同步方式:{{syncMode}}", { syncMode }); } else { DOMUtils.append( $scriptInfo, /*html*/ `

${i18next.t("同步方式:{{syncMode}}", { syncMode, })}

` ); } const syncUpdateResponse = await GreasyforkApi.sourceCodeSync( scriptInfo["id"].toString(), codeSyncFormData, syncUrl ); if (syncUpdateResponse) { Qmsg.success(i18next.t("同步成功")); } else { Qmsg.error(i18next.t("同步失败")); } } else { Qmsg.error(i18next.t("该脚本未设置同步信息")); } } $button.removeAttribute("disabled"); $button.removeAttribute("data-icon"); $span.innerText = i18next.t("同步代码"); $icon.remove(); }); $li.appendChild($syncCode); rightContainerElement.appendChild($li); } }, };