This commit is contained in:
uukelele-scratch 2025-04-10 11:40:56 +01:00
parent f457a89c8e
commit 669144ccc1
2 changed files with 78 additions and 11 deletions

View file

@ -4,6 +4,7 @@ import http from 'http';
import path from 'path';
import { fileURLToPath } from 'url';
import settings, { updateSettings } from '../../settings.js';
import fs from 'fs';
// Module-level variables
let io;
@ -132,11 +133,24 @@ export function createMindServer(port = 8080) {
socket.on('get-settings', (callback) => {
callback(settings);
})
});
socket.on('update-settings', (newSettings) => {
updateSettings(newSettings);
})
});
socket.on('get-profile-dir', (callback) => {
const profileDir = path.join(__dirname, '../../profiles/');
fs.readdir(profileDir, (err, files) => {
if (err) {
console.error("Could not list the profiles.", err);
callback([]);
}
const fileNames = files.filter(file => file.endsWith('.json')).map(file => './profiles/' + file);
callback(fileNames);
});
});
});
server.listen(port, 'localhost', () => {

View file

@ -1,9 +1,11 @@
<!DOCTYPE html>
<html>
<html lang="en">
<head>
<title>Mindcraft</title>
<script src="/socket.io/socket.io.js"></script>
<link rel="stylesheet" type="text/css" href="/styles.css">
<meta viewport="width=device-width, initial-scale=1.0">
<meta charset="UTF-8">
</head>
<body>
<h1>Mindcraft</h1>
@ -181,6 +183,14 @@
socket.emit('send-message', agentName, message)
}
let pathProfiles;
function getProfilesFromPath() {
socket.emit('get-profile-dir', (response) => {
pathProfiles = response;
console.log(response);
})
}
function toggleSettings() {
document.getElementById("settingsContainer").style.display = document.getElementById("settingsContainer").style.display === "none" ? "block" : "none";
document.getElementById("settingsToggler").innerText = document.getElementById("settingsToggler").innerText === "Show Settings" ? "Hide Settings" : "Show Settings";
@ -200,11 +210,37 @@
socket.emit('update-settings', newSettings);
}
function updateListItem(listId, listContent) {
document.getElementById(listId).innerHTML = "";
listContent.forEach(element => {
addProfileItem(listId, element);
});
function updateListItem(listId, listContent, enabled = true, clear = true) {
if (clear) {
document.getElementById(listId).innerHTML = "";
listContent.forEach(element => {
addProfileItem(listId, element, enabled);
});
} else {
const list = document.getElementById(listId);
const existingItemsDivs = document.querySelectorAll(`#${listId} .list-item`);
let existingItems = Array.from(existingItemsDivs)
.map(item => item.querySelector('input[type="text"]').value);
listContent.forEach(element => {
if (existingItems.includes(element)) {
const item = Array.from(list.querySelectorAll('.list-item'))
.find(item => item.querySelector('input[type="text"]').value === element);
if (item) {
console.log(`Setting this to ${enabled}: `)
const checkbox = item.querySelector('input[type="checkbox"]');
console.log(checkbox)
console.log(checkbox.checked)
checkbox.checked = enabled;
console.log("After: ")
console.log(checkbox.checked)
} else {
addProfileItem(listId, element, enabled);
}
} else {
addProfileItem(listId, element, enabled);
}
})
}
}
function updateBooleanRadio(radioName, value) {
@ -240,9 +276,21 @@
updateBooleanRadio("mcChatBotMessages", settings["chat_bot_messages"]);
// array/list fields
updateListItem("mcProfileList", settings["profiles"]);
updateListItem("mcBlockedActions", settings["blocked_actions"]);
updateListItem("mcOnlyChatWith", settings["only_chat_with"]);
// handling profiles is special
updateListItem("mcProfileList", settings["profiles"]);
pathProfiles = undefined;
getProfilesFromPath();
const intervalId = setInterval(() => {
if (pathProfiles !== undefined) {
clearInterval(intervalId);
updateListItem("mcProfileList", pathProfiles, enabled=false);
}
}, 50);
updateListItem("mcProfileList", settings["profiles"], enabled=true, clear = false);
console.log(`updated with ${settings["profiles"]}`);
}
function getNewSettings() {
@ -276,7 +324,7 @@
return settings;
}
function addProfileItem(listName, itemNameArg) {
function addProfileItem(listName, itemNameArg, enabled) {
const itemDiv = document.createElement('div');
itemDiv.className = 'list-item';
@ -287,7 +335,12 @@
const itemCheckbox = document.createElement('input');
itemCheckbox.type = 'checkbox';
itemCheckbox.checked = true;
itemCheckbox.checked = enabled;
if (itemCheckbox.checked) {
itemName.classList.remove('not-selected');
} else {
itemName.classList.add('not-selected');
}
itemCheckbox.onchange = function() {
if (itemCheckbox.checked) {
itemName.classList.remove('not-selected');