diff --git a/public/i18n/en_US.json b/public/i18n/en_US.json index 7a11256..2663b57 100644 --- a/public/i18n/en_US.json +++ b/public/i18n/en_US.json @@ -15,6 +15,16 @@ "hello": { "makesure": "Before using this template, please read the offical sample, make sure that you've known about the pipeline for plugin developing." }, + "onlyEnableListedDevices": "Enable Only on Listed Devices", + "onlyEnableListedDevicesDesc": "When the switch is on, this plugin enabled only on the devices listed in the list. When the switch is off, this plugin enabled on all devices.", + "enableDeviceList": "List of Enabled Devices", + "enableDeviceListDesc": "Devices listed in the table will enable this plugin function when the switch is on. Please avoid manual editing of this table as much as possible.", + "addCurrentDeviceIntoList": "Add Current Device to List", + "addCurrentDeviceIntoListDesc": "Add the current device to the table.", + "addCurrentDeviceIntoListLabel": "Add", + "removeCurrentDeviceFromList": "Remove Current Device from List", + "removeCurrentDeviceFromListDesc": "Remove the current device from the table.", + "removeCurrentDeviceFromListLabel": "Remove", "hintTitle":"About", "hintDesc":"plugin-sample-vite-svelte
@frostime
@88250
@zxkmm" } \ No newline at end of file diff --git a/public/i18n/zh_CN.json b/public/i18n/zh_CN.json index 9b6231e..e8cd59b 100644 --- a/public/i18n/zh_CN.json +++ b/public/i18n/zh_CN.json @@ -15,6 +15,16 @@ "hello": { "makesure": "使用这个模板之前,请阅读官方教程, 确保自己已经理解了插件的基本开发流程。" }, + "onlyEnableListedDevices": "只在以下设备上启用", + "onlyEnableListedDevicesDesc": "当打开开关时,只在表中列出的设备上启用该插件功能。当关闭开关时,在所有设备上启用该插件功能。", + "enableDeviceList": "启用的设备的列表", + "enableDeviceListDesc": "表中列出的设备会在开关打开时启用该插件功能。请尽量避免手动编辑此表", + "addCurrentDeviceIntoList": "添加当前设备", + "addCurrentDeviceIntoListDesc": "把当前设备添加到表中", + "addCurrentDeviceIntoListLabel": "添加", + "removeCurrentDeviceFromList": "移除当前设备", + "removeCurrentDeviceFromListDesc": "把当前设备从表中移除", + "removeCurrentDeviceFromListLabel": "移除", "hintTitle":"关于", "hintDesc":"🔗 plugin-sample-vite-svelte
💻 @frostime
💻 @88250
💻 @zxkmm" diff --git a/src/index.ts b/src/index.ts index eec1136..b58c621 100644 --- a/src/index.ts +++ b/src/index.ts @@ -227,6 +227,46 @@ export default class PluginSample extends Plugin { } } }); + this.settingUtils.addItem({ + key: "onlyEnableListedDevices", + value: false, + type: "checkbox", + title: this.i18n.onlyEnableListedDevices, + description: this.i18n.onlyEnableListedDevicesDesc, + }); + this.settingUtils.addItem({ + key: "enableDeviceList", + value: "", + type: "textarea", + title: this.i18n.enableDeviceList, + description: this.i18n.enableDeviceListDesc, + }); + this.settingUtils.addItem({ + key: "addCurrentDeviceIntoList", + value: "", + type: "button", + title: this.i18n.addCurrentDeviceIntoList, + description: this.i18n.addCurrentDeviceIntoListDesc, + button: { + label: this.i18n.addCurrentDeviceIntoListLabel, + callback: () => { + this.appendCurrentDeviceIntoList(); + } + } + }); + this.settingUtils.addItem({ + key: "removeCurrentDeviceFromList", + value: "", + type: "button", + title: this.i18n.removeCurrentDeviceFromList, + description: this.i18n.removeCurrentDeviceFromListDesc, + button: { + label: this.i18n.removeCurrentDeviceFromListLabel, + callback: () => { + this.removeCurrentDeviceFromList(); + } + } + }); this.settingUtils.addItem({ key: "Hint", value: "", @@ -291,6 +331,29 @@ export default class PluginSample extends Plugin { this.settingUtils.get("Select") + "\n" ); + // within layoutready async caller sample + const layoutReadyAsyncHandler = async () => { + try { + + /*分设备caller真值表: + 当前设备真, 仅允许开关开,后半段为假 :真||假: 执行 + 当前设备真, 仅允许开关关,后半段为真 :真||真: 执行 + 当前设备假, 仅允许开关开,后半段为假 :假||假: 不执行 + 当前设备假, 仅允许开关关,后半段为真 :假||真: 执行 + */ + if ((await this.currentDeviceInList() || !this.settingUtils.get("onlyEnableListedDevices"))) { + console.log("per device enable logic: true\nAKA device in list or onlyEnableListedDevices is false"); + }else{ + console.log("per device enable logic: false\nAKA device not in list and onlyEnableListedDevices is true"); + } + + } + catch (error) { + console.error("within layoutready async caller calling fail", error); + } + } + layoutReadyAsyncHandler(); + let tabDiv = document.createElement("div"); new HelloExample({ target: tabDiv, @@ -852,4 +915,84 @@ export default class PluginSample extends Plugin { }); } } + + async currentDeviceInList() { + try { + var current_device_info = await this.fetchCurrentDeviceInfo(); + + var enableDeviceList = await this.settingUtils.get("enableDeviceList"); + var enableDeviceListArray = enableDeviceList.split("\n"); + + return enableDeviceListArray.includes(current_device_info); + } catch (error) { + console.error("Error checking if current device is enabled:", error); + } + } + + + fetchCurrentDeviceInfo(): Promise { + var current_device_uuid = window.siyuan.config.system.id; + var current_device_name = window.siyuan.config.system.name; + var current_device_info = current_device_uuid + " " + current_device_name; + + return Promise.resolve(current_device_info.toString()); + } + + + async appendCurrentDeviceIntoList() { + try { + // await!!!!! + var current_device_info = await this.fetchCurrentDeviceInfo(); + + var enableDeviceList = this.settingUtils.get("enableDeviceList"); + var enableDeviceListArray = enableDeviceList.split("\n"); + var enableDeviceListArrayLength = enableDeviceListArray.length; + var enableDeviceListArrayLast = enableDeviceListArray[enableDeviceListArrayLength - 1]; + + // remove empty line + if (enableDeviceListArrayLast === "") { + enableDeviceListArray.pop(); + } + + enableDeviceListArray.push(current_device_info); + + var enableDeviceListArrayString = enableDeviceListArray.join("\n"); + + this.settingUtils.assignValue("enableDeviceList", enableDeviceListArrayString); + this.settingUtils.save(); + } catch (error) { + console.error("Error appending current device into list:", error); + } + } + + + + async removeCurrentDeviceFromList() { + + try { + + var current_device_info = await this.fetchCurrentDeviceInfo(); + + var enableDeviceList = this.settingUtils.get("enableDeviceList"); + var enableDeviceListArray = enableDeviceList.split("\n"); + + // make sure visited the entire list + for (var i = enableDeviceListArray.length - 1; i >= 0; i--) { + var deviceInfo = enableDeviceListArray[i]; + + if (deviceInfo === current_device_info) { + enableDeviceListArray.splice(i, 1); + } + } + + // reassemble list + var enableDeviceListArrayString = enableDeviceListArray.join("\n"); + + this.settingUtils.assignValue("enableDeviceList", enableDeviceListArrayString); + this.settingUtils.save(); + } catch (error) { + console.error("Error removing current device from list:", error); + } + + } } diff --git a/src/libs/setting-utils.ts b/src/libs/setting-utils.ts index 7112212..8ed6a7a 100644 --- a/src/libs/setting-utils.ts +++ b/src/libs/setting-utils.ts @@ -81,6 +81,14 @@ export class SettingUtils { } } + async assignValue(_key_: string, _value_: any) { + let item = this.settings.get(_key_); + item.value = _value_; + this.plugin.data[this.name] = item.value; + await this.save(); + window.location.reload(); + } + /** * 将设置项目导出为 JSON 对象 * @returns object