Files
umbrix-libcore/extension/html/rpc/extensionPage.js

87 lines
2.7 KiB
JavaScript
Raw Normal View History

const { extensionClient } = require('./client.js');
const extension = require("./extension_grpc_web_pb.js");
2024-09-26 23:16:20 +02:00
const { renderForm } = require('./formRenderer.js');
const { listExtensions } = require('./extensionList.js');
2024-09-30 23:16:24 +02:00
var currentExtensionId = undefined;
2024-09-26 23:16:20 +02:00
function openExtensionPage(extensionId) {
2024-09-30 23:16:24 +02:00
currentExtensionId = extensionId;
$("#extension-list-container").hide();
$("#extension-page-container").show();
$("#connection-page").hide();
connect()
}
function connect() {
2024-09-26 23:16:20 +02:00
const request = new extension.ExtensionRequest();
request.setExtensionId(currentExtensionId);
2024-09-26 23:16:20 +02:00
const stream = extensionClient.connect(request, {});
2024-09-30 23:16:24 +02:00
2024-09-26 23:16:20 +02:00
stream.on('data', (response) => {
2024-09-30 23:16:24 +02:00
console.log('Receving ', response);
2024-09-26 23:16:20 +02:00
if (response.getExtensionId() === currentExtensionId) {
2024-09-30 23:16:24 +02:00
ui = JSON.parse(response.getJsonUi())
if (response.getType() == proto.hiddifyrpc.ExtensionResponseType.SHOW_DIALOG) {
renderForm(ui, "dialog", handleSubmitButtonClick, undefined);
} else {
renderForm(ui, "", handleSubmitButtonClick, handleStopButtonClick);
2024-09-26 23:16:20 +02:00
}
2024-09-30 23:16:24 +02:00
2024-09-26 23:16:20 +02:00
}
});
2024-09-30 23:16:24 +02:00
2024-09-26 23:16:20 +02:00
stream.on('error', (err) => {
console.error('Error opening extension page:', err);
// openExtensionPage(extensionId);
2024-09-26 23:16:20 +02:00
});
2024-09-30 23:16:24 +02:00
2024-09-26 23:16:20 +02:00
stream.on('end', () => {
console.log('Stream ended');
setTimeout(connect, 1000);
2024-09-30 23:16:24 +02:00
2024-09-26 23:16:20 +02:00
});
}
2024-09-30 23:16:24 +02:00
async function handleSubmitButtonClick(event, button) {
2024-09-26 23:16:20 +02:00
event.preventDefault();
bootstrap.Modal.getOrCreateInstance("#extension-dialog").hide();
2024-09-30 23:16:24 +02:00
const request = new extension.SendExtensionDataRequest();
request.setButton(button);
if (event.type != 'hidden.bs.modal') {
const formData = new FormData(event.target.closest('form'));
const datamap = request.getDataMap()
formData.forEach((value, key) => {
datamap.set(key, value);
});
}
2024-09-26 23:16:20 +02:00
request.setExtensionId(currentExtensionId);
try {
await extensionClient.submitForm(request, {});
2024-09-26 23:16:20 +02:00
console.log('Form submitted successfully.');
} catch (err) {
console.error('Error submitting form:', err);
}
}
async function handleStopButtonClick(event) {
event.preventDefault();
const request = new extension.ExtensionRequest();
request.setExtensionId(currentExtensionId);
2024-09-30 23:16:24 +02:00
bootstrap.Modal.getOrCreateInstance("#extension-dialog").hide();
2024-09-26 23:16:20 +02:00
try {
await extensionClient.stop(request, {});
2024-09-26 23:16:20 +02:00
console.log('Extension stopped successfully.');
currentExtensionId = undefined;
listExtensions(); // Return to the extension list
} catch (err) {
console.error('Error stopping extension:', err);
}
}
module.exports = { openExtensionPage };