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"; import {processSync} from "../dialog/processSystem"; /// #if !MOBILE import {openSetting} from "../config"; /// #endif import {App} from "../index"; export const addCloudName = (cloudPanelElement: Element) => { const dialog = new Dialog({ title: window.siyuan.languages.cloudSyncDir, content: `
${window.siyuan.languages.reposTip}
`, width: isMobile() ? "92vw" : "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, cb?: () => void) => { if (!reload && cloudPanelElement.firstElementChild.tagName !== "IMG") { return; } fetchPost("/api/sync/listCloudSyncDir", {}, (response) => { let syncListHTML = `
`; if (response.code === 1) { syncListHTML = `
`; } else if (response.code !== 1) { syncListHTML = '
`; } cloudPanelElement.innerHTML = syncListHTML; if (cb) { cb(); } }); }; export const syncGuide = (app?: App) => { if (window.siyuan.config.readonly) { return; } /// #if MOBILE if (0 === window.siyuan.config.sync.provider && needSubscribe()) { return; } /// #else if (document.querySelector("#barSync")?.classList.contains("toolbar__item--active")) { return; } if (0 === window.siyuan.config.sync.provider && needSubscribe("") && app) { const dialogSetting = openSetting(app); if (window.siyuan.user) { dialogSetting.element.querySelector('.b3-tab-bar [data-name="repos"]').dispatchEvent(new CustomEvent("click")); } else { dialogSetting.element.querySelector('.b3-tab-bar [data-name="account"]').dispatchEvent(new CustomEvent("click")); dialogSetting.element.querySelector('.config__tab-container[data-name="account"]').setAttribute("data-action", "go-repos"); } return; } /// #endif if (!window.siyuan.config.repo.key) { setKey(); return; } if (!window.siyuan.config.sync.enabled) { setSync(); return; } syncNow(); }; const syncNow = () => { if (window.siyuan.config.sync.mode !== 3) { fetchPost("/api/sync/performSync", {}); return; } const manualDialog = new Dialog({ title: window.siyuan.languages.chooseSyncDirection, content: `
`, width: isMobile() ? "92vw" : "520px", }); const btnsElement = manualDialog.element.querySelectorAll(".b3-button"); btnsElement[0].addEventListener("click", () => { manualDialog.destroy(); }); btnsElement[1].addEventListener("click", () => { const uploadElement = manualDialog.element.querySelector("input[name=upload]:checked") as HTMLInputElement; if (!uploadElement) { showMessage(window.siyuan.languages.plsChoose); return; } fetchPost("/api/sync/performSync", {upload: uploadElement.value === "true"}); manualDialog.destroy(); }); }; 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() ? "92vw" : "520px", }); } const contentElement = dialog.element.querySelector(".b3-dialog__content").lastElementChild; bindSyncCloudListEvent(contentElement); const btnElement = dialog.element.querySelector(".b3-button"); getSyncCloudList(contentElement, false, () => { if (contentElement.querySelector("input[checked]")) { btnElement.removeAttribute("disabled"); } else { btnElement.setAttribute("disabled", "disabled"); } }); btnElement.addEventListener("click", () => { dialog.destroy(); fetchPost("/api/sync/setSyncEnable", {enabled: true}, () => { window.siyuan.config.sync.enabled = true; processSync(); confirmDialog(window.siyuan.languages.syncConfGuide4, window.siyuan.languages.syncConfGuide5, () => { syncNow(); }); }); }); } else { if (dialog) { dialog.destroy(); } confirmDialog(window.siyuan.languages.syncConfGuide4, window.siyuan.languages.syncConfGuide5, () => { syncNow(); }); } }; const setKey = () => { const dialog = new Dialog({ title: window.siyuan.languages.syncConfGuide1, content: `
${window.siyuan.languages.syncConfGuide2}
`, width: isMobile() ? "92vw" : "520px", }); dialog.element.querySelector(".b3-button--cancel").addEventListener("click", () => { dialog.destroy(); }); const inputElement = dialog.element.querySelector(".b3-text-field") as HTMLInputElement; dialog.element.querySelector("#initKeyByPW").addEventListener("click", () => { 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); }); }); }); inputElement.focus(); };