diff --git a/src/server/mind_server.js b/src/server/mind_server.js
index f18299f..165cb01 100644
--- a/src/server/mind_server.js
+++ b/src/server/mind_server.js
@@ -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', () => {
diff --git a/src/server/public/index.html b/src/server/public/index.html
index 090a5c7..4343abf 100644
--- a/src/server/public/index.html
+++ b/src/server/public/index.html
@@ -1,9 +1,11 @@
-
+
Mindcraft
+
+
Mindcraft
@@ -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');