Files

134 lines
3.8 KiB
JavaScript

import { ComfyApp, app } from "../../scripts/app.js"
import { api } from "../../scripts/api.js";
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
const debounce_update_url_settings = debounce(update_settings, 1000);
const debounce_update_bucket_settings = debounce(update_settings, 1000);
const debounce_update_access_settings = debounce(update_settings, 1000);
const debounce_update_secret_settings = debounce(update_settings, 1000);
async function update_settings(setting, value) {
console.log(`Setting ${setting}: ${value}`);
const data = {}
data[setting] = value;
const resp = await api.fetchApi(`/saveimages3/setting/${setting}`, {
method: 'PATCH',
body: JSON.stringify(data),
cache: 'no-store',
});
if (resp.status === 200) {
return await resp.text();
}
throw new Error(resp.statusText);
}
class SaveImageS3Plugin
{
extentionName = "Chipset.SaveImageS3";
createSettingsURL = () => {
this.settingsURL = {
id: "Chipset.SaveImageS3.URL",
type: "string",
name: "S3 URL",
category: ['SaveImageS3', 'Configuration', 'url'],
tooltip: 'S3 URL',
type: "text",
defaultValue: "",
onChange: (value) => {
debounce_update_url_settings("url", value);
}
}
}
createSettingsAccessKey = () => {
this.settingsAccessKey = {
id: plugin.extentionName + ".AccessKey",
type: "string",
name: "Access Key",
category: ['SaveImageS3', 'Configuration', 'access'],
tooltip: 'Access Key',
type: "text",
defaultValue: "",
onChange: (value) => {
debounce_update_access_settings('access', value);
}
}
}
createSettingsSecretKey = () => {
this.settingsSecretKey = {
id: plugin.extentionName + ".SecretKey",
type: "string",
name: "Secret Key",
category: ['SaveImageS3', 'Configuration', 'secret'],
tooltip: 'Secret Key',
type: "text",
defaultValue: "",
onChange: (value) => {
debounce_update_secret_settings('secret', value);
}
}
}
createSettingsBucketName = () => {
this.settingsBucketName = {
id: plugin.extentionName + ".BucketName",
type: "string",
name: "Bucket Name",
category: ['SaveImageS3', 'Configuration', 'bucket'],
tooltip: 'Bucket Name',
type: "text",
defaultValue: "",
onChange: (value) => {
debounce_update_bucket_settings('bucket', value);
}
}
}
addSettingsUI = () => {
app.ui.settings.addSetting(this.settingsSecretKey);
app.ui.settings.addSetting(this.settingsAccessKey);
app.ui.settings.addSetting(this.settingsBucketName);
app.ui.settings.addSetting(this.settingsURL);
}
}
const plugin = new SaveImageS3Plugin();
app.registerExtension({
name: plugin.extentionName,
async setup() {
console.log("Comfy.SaveImageS3 setup!!!");
plugin.createSettingsURL();
plugin.createSettingsAccessKey();
plugin.createSettingsSecretKey();
plugin.createSettingsBucketName();
plugin.addSettingsUI();
},
async beforeRegisterNodeDef(nodeType, nodeData, app) {
// console.log(nodeType.comfyClass);
if (nodeType.comfyClass=="SaveImageS3") {
console.log("SaveImageS3 node is registed")
}
}
})