import {Constants} from "../constants"; import {fetchPost} from "../util/fetch"; /// #if !MOBILE import {getAllModels} from "../layout/getAll"; import {ipcRenderer} from "electron"; /// #endif import {showMessage} from "./message"; import {Dialog} from "./index"; import {isMobile} from "../util/functions"; import {exportLayout} from "../layout/util"; export const lockFile = (id: string) => { const html = `
🔒 ${window.siyuan.languages.lockFile0} v${Constants.SIYUAN_VERSION}

${window.siyuan.languages.lockFile1}

${window.siyuan.languages.lockFile2}

`; let logElement = document.getElementById("errorLog"); if (logElement) { logElement.innerHTML = html; } else { document.body.insertAdjacentHTML("beforeend", `
${html}
`); logElement = document.getElementById("errorLog"); } logElement.querySelector(".b3-button--cancel").addEventListener("click", () => { /// #if !MOBILE getAllModels().editor.find((item) => { if (item.editor.protyle.block.rootID === id) { item.parent.parent.removeTab(item.parent.id); logElement.remove(); return true; } }); /// #endif }); logElement.querySelector(".b3-button--text").addEventListener("click", () => { fetchPost("/api/filetree/lockFile", {id}, (response) => { if (response.code === 0) { window.location.reload(); } }); }); }; export const kernelError = () => { let iosReStart = ""; if (window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers) { iosReStart = `
`; } const html = `
💔 ${window.siyuan.languages.kernelFault0} v${Constants.SIYUAN_VERSION}

${window.siyuan.languages.kernelFault1}

${window.siyuan.languages.kernelFault2}

${iosReStart}
`; let logElement = document.getElementById("errorLog"); if (logElement) { logElement.innerHTML = html; } else { document.body.insertAdjacentHTML("beforeend", `
${html}
`); logElement = document.getElementById("errorLog"); } const restartElement = logElement.querySelector(".b3-button"); if (restartElement && window.webkit?.messageHandlers) { restartElement.addEventListener("click", () => { logElement.remove(); window.webkit.messageHandlers.startKernelFast.postMessage("startKernelFast"); }); } }; export const exitSiYuan = () => { fetchPost("/api/system/exit", {force: false}, (response) => { if (response.code === 1) { const msgId = showMessage(response.msg, response.data.closeTimeout, "error"); const buttonElement = document.querySelector(`#message [data-id="${msgId}"] button`); if (buttonElement) { buttonElement.addEventListener("click", () => { fetchPost("/api/system/exit", {force: true}, () => { /// #if !BROWSER ipcRenderer.send(Constants.SIYUAN_CONFIG_CLOSETRAY); ipcRenderer.send(Constants.SIYUAN_QUIT); /// #else if (["ios", "android"].includes(window.siyuan.config.system.container) && (window.webkit?.messageHandlers || window.JSAndroid)) { window.location.href = "siyuan://api/system/exit"; } /// #endif }); }); } } else { /// #if !BROWSER ipcRenderer.send(Constants.SIYUAN_CONFIG_CLOSETRAY); ipcRenderer.send(Constants.SIYUAN_QUIT); /// #else if (["ios", "android"].includes(window.siyuan.config.system.container) && (window.webkit?.messageHandlers || window.JSAndroid)) { window.location.href = "siyuan://api/system/exit"; } /// #endif } }); }; export const transactionError = (data: { code: number, data: string }) => { if (data.code === 1) { lockFile(data.data); return; } if (document.getElementById("transactionError")) { return; } const dialog = new Dialog({ disableClose: true, title: `${window.siyuan.languages.stateExcepted} v${Constants.SIYUAN_VERSION}`, content: `
${window.siyuan.languages.rebuildIndexTip}
`, width: isMobile() ? "80vw" : "520px", }); const btnsElement = dialog.element.querySelectorAll(".b3-button"); btnsElement[0].addEventListener("click", () => { exportLayout(false, () => { exitSiYuan(); }); }); btnsElement[1].addEventListener("click", () => { dialog.destroy(); fetchPost("/api/filetree/refreshFiletree", {}); }); }; export const progressStatus = (data: IWebSocketData) => { document.querySelector("#status .status__msg").innerHTML = data.data; }; export const progressLoading = (data: IWebSocketData) => { let progressElement = document.getElementById("progress"); if (!progressElement) { document.body.insertAdjacentHTML("beforeend", '
'); progressElement = document.getElementById("progress"); } // code 0: 有进度;1: 无进度;2: 关闭 if (data.code === 2) { progressElement.remove(); return; } if (data.code === 0) { progressElement.innerHTML = `
${data.data.current}/${data.data.total}
${data.msg}
`; } else if (data.code === 1) { if (progressElement.lastElementChild) { progressElement.lastElementChild.lastElementChild.innerHTML = data.msg; } else { progressElement.innerHTML = `
${data.msg}
`; } } }; export const bootSync = () => { fetchPost("/api/sync/getBootSync", {}, response => { if (response.code === 1) { const dialog = new Dialog({ width: isMobile() ? "80vw" : "50vw", title: "🌩️ " + window.siyuan.languages.bootSyncFailed, content: `
${response.msg}
` }); const btnsElement = dialog.element.querySelectorAll(".b3-button"); btnsElement[0].addEventListener("click", () => { dialog.destroy(); }); btnsElement[1].addEventListener("click", () => { if (btnsElement[1].getAttribute("disabled")) { return; } btnsElement[1].setAttribute("disabled", "disabled"); fetchPost("/api/sync/performBootSync", {}, (syncResponse) => { if (syncResponse.code === 0) { dialog.destroy(); } btnsElement[1].removeAttribute("disabled"); }); }); } }); }; export const setTitle = (title: string) => { const dragElement = document.getElementById("drag"); if (title === window.siyuan.languages.siyuanNote) { const versionTitle = title + " v" + Constants.SIYUAN_VERSION; document.title = versionTitle; dragElement.textContent = versionTitle; dragElement.setAttribute("title", versionTitle); } else { document.title = title + " - " + window.siyuan.languages.siyuanNote + " v" + Constants.SIYUAN_VERSION; dragElement.textContent = title; dragElement.setAttribute("title", title); } }; export const downloadProgress = (data: { id: string, percent: number }) => { const bazzarElement = document.getElementById("configBazaarReadme"); if (!bazzarElement) { return; } const btnElement = bazzarElement.querySelector(`[data-url="${data.id}"]`) as HTMLElement; if (btnElement) { if (data.percent >= 1) { btnElement.parentElement.classList.add("fn__none"); } else { btnElement.classList.add("b3-button--progress"); btnElement.innerHTML = ``; } } };