import {needSubscribe} from "../util/needSubscribe"; import {showMessage} from "../dialog/message"; import {fetchPost} from "../util/fetch"; import {Dialog} from "../dialog"; import {confirmDialog} from "../dialog/confirmDialog"; import {isMobile} from "../util/functions"; export const addCloudName = (cloudPanelElement: Element) => { const dialog = new Dialog({ title: window.siyuan.languages.cloudSyncDir, content: `
${window.siyuan.languages.reposTip}
`, width: isMobile() ? "80vw" : "520px", }); const inputElement = dialog.element.querySelector("input") as HTMLInputElement; const btnsElement = dialog.element.querySelectorAll(".b3-button"); dialog.bindInput(inputElement, () => { (btnsElement[1] as HTMLButtonElement).click(); }); inputElement.focus(); inputElement.select(); btnsElement[0].addEventListener("click", () => { dialog.destroy(); }); btnsElement[1].addEventListener("click", () => { cloudPanelElement.innerHTML = ''; fetchPost("/api/sync/createCloudSyncDir", {name: inputElement.value}, () => { dialog.destroy(); getSyncCloudList(cloudPanelElement, true); }); }); }; export const bindSyncCloudListEvent = (cloudPanelElement: Element) => { cloudPanelElement.addEventListener("click", (event) => { let target = event.target as HTMLElement; while (target && !target.isEqualNode(cloudPanelElement)) { const type = target.getAttribute("data-type"); if (type) { switch (type) { case "addCloud": addCloudName(cloudPanelElement); break; case "removeCloud": confirmDialog(window.siyuan.languages.confirm, `${window.siyuan.languages.confirmDeleteCloudDir} ${target.parentElement.getAttribute("data-name")}`, () => { cloudPanelElement.innerHTML = ''; fetchPost("/api/sync/removeCloudSyncDir", {name: target.parentElement.getAttribute("data-name")}, (response) => { window.siyuan.config.sync.cloudName = response.data; getSyncCloudList(cloudPanelElement, true); }); }); break; case "selectCloud": cloudPanelElement.innerHTML = ''; fetchPost("/api/sync/setCloudSyncDir", {name: target.getAttribute("data-name")}, () => { window.siyuan.config.sync.cloudName = target.getAttribute("data-name"); getSyncCloudList(cloudPanelElement, true); }); break; } event.preventDefault(); event.stopPropagation(); break; } target = target.parentElement; } }); }; export const getSyncCloudList = (cloudPanelElement: Element, reload = false) => { if (!reload && cloudPanelElement.firstElementChild.tagName !== "IMG") { return; } fetchPost("/api/sync/listCloudSyncDir", {}, (response) => { let syncListHTML = `
`; if (response.code !== 1) { syncListHTML = '
`; } cloudPanelElement.innerHTML = syncListHTML; }); }; export const syncGuide = (element?: Element) => { if (needSubscribe() || (element && element.classList.contains("fn__rotate"))) { return; } if (!window.siyuan.config.repo.key) { setKey(); return; } if (!window.siyuan.config.sync.enabled) { setSync(); return; } fetchPost("/api/sync/performSync", {}); }; const setSync = (key?: string, dialog?: Dialog) => { if (key) { window.siyuan.config.repo.key = key; } if (!window.siyuan.config.sync.enabled) { const listHTML = `
${window.siyuan.languages.syncConfGuide3}
`; if (dialog) { dialog.element.querySelector(".b3-dialog__header").innerHTML = window.siyuan.languages.cloudSyncDir; dialog.element.querySelector(".b3-dialog__container").lastElementChild.innerHTML = listHTML; } else { dialog = new Dialog({ title: window.siyuan.languages.cloudSyncDir, content: listHTML, width: isMobile() ? "80vw" : "520px", }); } const contentElement = dialog.element.querySelector(".b3-dialog__content").lastElementChild; bindSyncCloudListEvent(contentElement); getSyncCloudList(contentElement); dialog.element.querySelector(".b3-button").addEventListener("click", () => { dialog.destroy(); fetchPost("/api/sync/setSyncEnable", {enabled: true}, (response) => { if (response.code === 1) { showMessage(response.msg); } else { window.siyuan.config.sync.enabled = true; confirmDialog(window.siyuan.languages.syncConfGuide4, window.siyuan.languages.syncConfGuide5, () => { fetchPost("/api/sync/performSync", {}); }); } }); }); } else { if (dialog) { dialog.destroy(); } confirmDialog(window.siyuan.languages.syncConfGuide4, window.siyuan.languages.syncConfGuide5, () => { fetchPost("/api/sync/performSync", {}); }); } }; const setKey = () => { const dialog = new Dialog({ title: window.siyuan.languages.syncConfGuide1, content: `
${window.siyuan.languages.syncConfGuide2}
`, width: isMobile() ? "80vw" : "520px", }); dialog.element.querySelector(".b3-button--cancel").addEventListener("click", () => { dialog.destroy(); }); dialog.element.querySelector("#initKeyByPW").addEventListener("click", () => { const inputElement = dialog.element.querySelector(".b3-text-field") as HTMLInputElement if (!inputElement.value) { showMessage(window.siyuan.languages._kernel[142]); return; } confirmDialog("🔑 " + window.siyuan.languages.genKeyByPW, window.siyuan.languages.initRepoKeyTip, () => { fetchPost("/api/repo/InitRepoKeyFromPassphrase", {pass: inputElement.value}, (response) => { setSync(response.data.key, dialog); }); }); }); };