From Wiki96
(Update SCM api) |
m (Reverted edits by 94.233.241.205 (talk) to last revision by 178.34.160.137) Tag: Rollback |
||
(4 intermediate revisions by 3 users not shown) | |||
Line 68: | Line 68: | ||
=== Basic CRUD === | === Basic CRUD === | ||
Below is a simple program demonstrating simple CRUD operations.<syntaxhighlight lang="javascript"> | Below is a simple program demonstrating simple CRUD operations.<syntaxhighlight lang="javascript" line="1"> | ||
const { sysConf: SCM } = w96; | const { sysConf: SCM } = w96; | ||
Line 98: | Line 98: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Object Listing === | |||
Basic GUI program listing all the objects in the specified path.<syntaxhighlight lang="javascript" line="1"> | |||
//!wrt | |||
const { sysConf: SCM } = w96; | |||
const { Theme } = w96.ui; | |||
const { ListBox } = w96.ui.components; | |||
// Define program class. | |||
class ListingProgramBasic extends WApplication { | |||
constructor() { super() } | |||
async main(argv) { | |||
await super.main(argv); | |||
// Allow path from argv | |||
const path = argv[1] || ""; | |||
// Create application window | |||
const wnd = this.createWindow({ | |||
title: "SCM Lister", | |||
icon: await Theme.getIconUrl("mime/executable", '16x16'), | |||
initialHeight: 300, | |||
initialWidth: 300 | |||
}, true); | |||
// Get body and append list box | |||
const body = wnd.getBodyContainer(); | |||
const listBox = new ListBox(); | |||
for(let i of SCM.ls(path)) | |||
listBox.addItem(`${i.name} : ${i.type}`, i.name); | |||
body.appendChild(listBox.getElement()); | |||
// Show window | |||
wnd.show(); | |||
} | |||
} | |||
// Execute program class | |||
return await WApplication.execAsync(new ListingProgramBasic(), this.boxedEnv.args); | |||
</syntaxhighlight> | |||
[[Category:API]] |
Latest revision as of 17:35, 16 May 2023
This is the SCM API Reference, an API used to manipulate the current system configuration. Read more about SCM here.
Function Table
All SCM functions are contained within the w96.sysConf
namespace.
Call | Arguments | Returns | Description |
---|---|---|---|
loadAll | None | Promise<void> | Loads the SCM configuration from disk. System reserved. |
createRoot | name:String, description:String | None | Creates a configuration root. System reserved. |
syncAll | None | Promise<void> | Synchronizes the current SCM configuration to disk. |
syncRoot | name:String | Promise<void> | Synchronizes changes to a configuration root to disk. This is recommended over syncAll(), if you know the specific roots you will be working on. |
getIndex | name:String | Index Object | Returns the index of the specified configuration root name. |
get | path: String | Any | Returns the value of the specified path. |
set | path: String, value: any | None | Sets the value for the specified path. |
setAndSync | path: String, value: any | Promise<void> | Same as set(), but synchronizes changes to root after set. |
remove | path: String | Boolean | Removes the specified path. Returns a boolean specifiying if the removal was successful. |
removeAndSync | path: String | Promise<boolean> | Same as remove(), but synchronizes changes to root after removal. |
ls | path: String | List of keys | Returns the keys in the specified path. If path is left empty, this will return a list of roots. |
Examples
Basic CRUD
Below is a simple program demonstrating simple CRUD operations.
const { sysConf: SCM } = w96;
// Test if the key exists
// We use this conditional to set any default values
if(!SCM.get("Software/TestSoftware")) {
// Key does not exist, set some default values
SCM.set("Software/TestSoftware/Hello", "World");
SCM.set("Software/TestSoftware/Number", 2);
SCM.set("Software/TestSoftware/True", true);
// Commit changes
await SCM.syncRoot("Software");
}
// Echo back the configuration values
alert(`Hello = ${SCM.get("Software/TestSoftware/Hello")}<br>
Number = ${SCM.get("Software/TestSoftware/Number")}<br>
True = ${SCM.get("Software/TestSoftware/True")}`);
// Update the number
await SCM.setAndSync("Software/TestSoftware/Number", SCM.get("Software/TestSoftware/Number") + 1);
// Delete the boolean
if(await SCM.removeAndSync("Software/TestSoftware/True")) {
console.log("The boolean is gone.");
} else {
console.log("There is no boolean.");
}
Object Listing
Basic GUI program listing all the objects in the specified path.
//!wrt
const { sysConf: SCM } = w96;
const { Theme } = w96.ui;
const { ListBox } = w96.ui.components;
// Define program class.
class ListingProgramBasic extends WApplication {
constructor() { super() }
async main(argv) {
await super.main(argv);
// Allow path from argv
const path = argv[1] || "";
// Create application window
const wnd = this.createWindow({
title: "SCM Lister",
icon: await Theme.getIconUrl("mime/executable", '16x16'),
initialHeight: 300,
initialWidth: 300
}, true);
// Get body and append list box
const body = wnd.getBodyContainer();
const listBox = new ListBox();
for(let i of SCM.ls(path))
listBox.addItem(`${i.name} : ${i.type}`, i.name);
body.appendChild(listBox.getElement());
// Show window
wnd.show();
}
}
// Execute program class
return await WApplication.execAsync(new ListingProgramBasic(), this.boxedEnv.args);