From 1eee35b230a918ae79e616fe78e5d430e928375d Mon Sep 17 00:00:00 2001 From: CakeLancelot Date: Sat, 5 Oct 2024 20:59:13 -0500 Subject: [PATCH] Add browse button to cache path input and refine validation logic --- assets/js/server-selector.js | 26 +++++++++++++++++++++++--- index.html | 22 ++++++++++++++++------ 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/assets/js/server-selector.js b/assets/js/server-selector.js index e9f8d76..4fde0a6 100644 --- a/assets/js/server-selector.js +++ b/assets/js/server-selector.js @@ -11,7 +11,7 @@ var configPath = path.join(userData, "config.json"); var serversPath = path.join(userData, "servers.json"); var versionsPath = path.join(userData, "versions.json"); var cacheRoot = path.join(userData, "/../../LocalLow/Unity/Web Player/Cache"); -var offlineRootDefault = path.join(cacheRoot, "Offline"); +var offlineRootDefault = path.join(cacheRoot, "../OfflineCache"); var offlineRoot = offlineRootDefault; var cdnString = "http://cdn.dexlabs.systems/ff/big"; @@ -328,13 +328,22 @@ function editConfig() { function validateCacheLocation() { var input = document.getElementById("editconfig-offlinecachelocation"); var button = document.getElementById("editconfig-savebutton"); + var parent = path.join(input.value, "/.."); input.classList.remove("invalidinput"); button.removeAttribute("disabled"); + // Parent MUST exist and be a directory + // If the target exists, check that is also a directory + // Also, prevent putting the offline cache inside of + // the normal cache folder to prevent shenanigans if ( - !remotefs.existsSync(input.value) || - !remotefs.statSync(input.value).isDirectory() + !remotefs.existsSync(parent) || + !remotefs.statSync(parent).isDirectory() || + (remotefs.existsSync(input.value) && + !remotefs.statSync(input.value).isDirectory()) || + path.join(input.value, ".") === path.join(cacheRoot, "/..") || + path.join(input.value, ".").startsWith(path.join(cacheRoot)) ) { input.classList.add("invalidinput"); button.setAttribute("disabled", ""); @@ -948,6 +957,17 @@ function prepConnection(address, port) { launchGame(); } +function browseOfflineCache() { + var browsePath = dialog.showOpenDialog({ properties: ["openDirectory"] }); + var offlineCacheInput = document.getElementById( + "editconfig-offlinecachelocation" + ); + if (browsePath && offlineCacheInput) { + offlineCacheInput.value = browsePath; + validateCacheLocation(); + } +} + // Returns the UUID of the server with the selected background color. // Yes, there are probably better ways to go about this, but it works well enough. function getSelectedServer() { diff --git a/index.html b/index.html index 8c3cbe7..c568848 100644 --- a/index.html +++ b/index.html @@ -524,12 +524,22 @@ /> + > +
+ + +