Add browse button to cache path input and refine validation logic

This commit is contained in:
CakeLancelot 2024-10-05 20:59:13 -05:00
parent d8363b61a6
commit 1eee35b230
2 changed files with 39 additions and 9 deletions

View File

@ -11,7 +11,7 @@ var configPath = path.join(userData, "config.json");
var serversPath = path.join(userData, "servers.json"); var serversPath = path.join(userData, "servers.json");
var versionsPath = path.join(userData, "versions.json"); var versionsPath = path.join(userData, "versions.json");
var cacheRoot = path.join(userData, "/../../LocalLow/Unity/Web Player/Cache"); 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 offlineRoot = offlineRootDefault;
var cdnString = "http://cdn.dexlabs.systems/ff/big"; var cdnString = "http://cdn.dexlabs.systems/ff/big";
@ -328,13 +328,22 @@ function editConfig() {
function validateCacheLocation() { function validateCacheLocation() {
var input = document.getElementById("editconfig-offlinecachelocation"); var input = document.getElementById("editconfig-offlinecachelocation");
var button = document.getElementById("editconfig-savebutton"); var button = document.getElementById("editconfig-savebutton");
var parent = path.join(input.value, "/..");
input.classList.remove("invalidinput"); input.classList.remove("invalidinput");
button.removeAttribute("disabled"); 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 ( if (
!remotefs.existsSync(input.value) || !remotefs.existsSync(parent) ||
!remotefs.statSync(input.value).isDirectory() !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"); input.classList.add("invalidinput");
button.setAttribute("disabled", ""); button.setAttribute("disabled", "");
@ -948,6 +957,17 @@ function prepConnection(address, port) {
launchGame(); 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. // 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. // Yes, there are probably better ways to go about this, but it works well enough.
function getSelectedServer() { function getSelectedServer() {

View File

@ -524,12 +524,22 @@
/> />
<label for="editconfig-offlinecachelocation" <label for="editconfig-offlinecachelocation"
>Select Offline Cache Location:</label >Select Offline Cache Location:</label
><input >
class="form-control form-row w-75" <div class="form-row">
id="editconfig-offlinecachelocation" <input
type="text" class="form-control w-75"
oninput="validateCacheLocation()" id="editconfig-offlinecachelocation"
/> type="text"
oninput="validateCacheLocation()"
/>
<button
type="button"
class="btn btn-primary mb-2 ml-1"
onclick="browseOfflineCache()"
>
<i class="fas fa-folder"></i>
</button>
</div>
</form> </form>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">