add per device condition

This commit is contained in:
zxkmm 2024-01-16 23:26:54 +08:00
parent 953d15c661
commit 5b73589267
4 changed files with 171 additions and 0 deletions

View file

@ -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<string> {
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);
}
}
}

View file

@ -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