2 Commits

Author SHA1 Message Date
Hichem Fantar
2fef7d7ffc chore: format files and enable format on save 2024-07-15 00:08:16 +01:00
Hichem Fantar
c27570d0af chore: Update package.json dependencies and description 2024-07-15 00:06:51 +01:00
9 changed files with 84 additions and 275 deletions

View File

@@ -59,24 +59,12 @@ body {
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
}
#of-about-button-div {
#of-versionnumberdiv {
position: fixed;
bottom: 4px;
right: 8px;
}
#of-about-flash-div {
position: fixed;
bottom: 4px;
right: 8px;
}
#of-config-button-div {
position: fixed;
bottom: 4px;
left: 8px;
}
.btn-primary {
background-image: url("../../assets/img/btn-primary-bg.png");
background-repeat: repeat;
@@ -97,18 +85,6 @@ body {
background-repeat: repeat;
}
.form-check-input {
width: 25px;
height: 25px;
}
.form-check-label {
height: 25px;
margin-top: 5px;
margin-left: 10px;
font-size: 1rem;
}
#of-aboutmodal > .modal-dialog > .modal-content {
background-color: #093363;
border-color: #6699ff;
@@ -210,19 +186,3 @@ button > i {
background: #000;
clear: both;
}
@keyframes pulse {
0% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.pulsing {
animation: pulse 2s infinite;
}

View File

@@ -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, "../OfflineCache");
var offlineRootDefault = path.join(cacheRoot, "Offline");
var offlineRoot = offlineRootDefault;
var cdnString = "http://cdn.dexlabs.systems/ff/big";
@@ -78,36 +78,7 @@ function getAppVersion() {
function setAppVersionText() {
$("#of-aboutversionnumber").text("Version " + getAppVersion());
}
function checkForNewAppVersion() {
$("#of-about-button").removeClass("pulsing");
setAppVersionText();
if (config["autoupdate-check"] === true) {
$.getJSON(
"https://api.github.com/repos/OpenFusionProject/OpenFusionClient/releases/latest",
{},
function (data) {
$.each(data, function (index, element) {
if (index === "tag_name" && element != remote.require("app").getVersion()) {
console.log("New version available: " + element);
var downloadPage =
"https://github.com/OpenFusionProject/OpenFusionClient/releases/latest";
$("#of-aboutversionnumber").html(
"Version " +
getAppVersion() +
`<br>A new version is available! ` +
`Click <a href="#" onclick='remote.require("shell").openExternal("` +
downloadPage +
`");'>here</a> to download.`
);
$("#of-about-button").addClass("pulsing");
return false; // break out of loop early
}
});
}
);
}
$("#of-versionnumber").text("v" + getAppVersion());
}
function validateServerSave(modalName) {
@@ -358,22 +329,13 @@ 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(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))
!remotefs.existsSync(input.value) ||
!remotefs.statSync(input.value).isDirectory()
) {
input.classList.add("invalidinput");
button.setAttribute("disabled", "");
@@ -412,7 +374,6 @@ function loadConfig() {
offlineRoot = config["offline-cache-location"] || offlineRootDefault;
$("#editconfig-offlinecachelocation:text").val(offlineRoot);
checkForNewAppVersion();
validateCacheLocation();
}
@@ -988,17 +949,6 @@ 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() {

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity type="win32" name="OpenFusion.Client" version="1.6.0.0" processorArchitecture="x86" />
<assemblyIdentity type="win32" name="OpenFusion.Client" version="1.5.2.0" processorArchitecture="x86" />
<dependency>
<dependentAssembly>
<assemblyIdentity type="Win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">

View File

@@ -1,7 +1,7 @@
{
"autoupdate-check": true,
"cache-swapping": true,
"enable-offline-cache": true,
"enable-offline-cache": false,
"verify-offline-cache": false,
"last-version-initialized": "1.6"
}

View File

@@ -108,6 +108,18 @@
</button>
</div>
<div class="col-4 d-inline-flex justify-content-end">
<button
class="btn btn-primary mr-1"
data-toggle="modal"
data-bs-tooltip=""
data-placement="bottom"
id="of-editconfig-button"
type="button"
title="Edit Configuration"
data-target="#of-editconfigmodal"
>
<i class="fas fa-cog"></i>
</button>
<button
class="btn btn-primary mr-1"
data-toggle="modal"
@@ -171,7 +183,6 @@
data-target="#of-restoreserversmodal"
>Reset to Default Servers</a
>
<br />
<a
href="#of-restoreversionsmodal"
onclick="$('#of-aboutmodal').modal('toggle')"
@@ -490,80 +501,46 @@
</button>
</div>
<div class="modal-body">
<form
id="editconfig-form"
class="needs-validation form-group"
>
<div class="form-check form-row">
<input
class="form-check-input"
type="checkbox"
id="editconfig-autoupdate"
/>
<label
class="form-check-label"
for="editconfig-autoupdate"
>Automatically check for updates</label
>
</div>
<div class="form-check form-row">
<input
class="form-check-input"
type="checkbox"
id="editconfig-cacheswapping"
/>
<label
class="form-check-label"
for="editconfig-cacheswapping"
>Swap game caches to avoid unnecessary
downloads</label
>
</div>
<div class="form-check form-row">
<input
class="form-check-input"
type="checkbox"
id="editconfig-enableofflinecache"
/>
<label
class="form-check-label"
for="editconfig-enableofflinecache"
>Use offline caches when they are
available</label
>
</div>
<div class="form-check form-row mb-3">
<input
class="form-check-input"
type="checkbox"
id="editconfig-verifyofflinecache"
/>
<label
class="form-check-label"
for="editconfig-verifyofflinecache"
>Verify offline caches every time they
are loaded</label
>
</div>
<form id="editconfig-form" class="needs-validation">
<label for="editconfig-autoupdate"
>Automatically update the client:</label
><input
class="form-control form-row w-75"
type="checkbox"
id="editconfig-autoupdate"
/>
<label for="editconfig-cacheswapping"
>Swap game caches to avoid unnecessary
downloads:</label
><input
class="form-control form-row w-75"
type="checkbox"
id="editconfig-cacheswapping"
/>
<label for="editconfig-enableofflinecache"
>Use offline caches when they are
available:</label
><input
class="form-control form-row w-75"
type="checkbox"
id="editconfig-enableofflinecache"
/>
<label for="editconfig-verifyofflinecache"
>Verify offline caches every time they are
loaded:</label
><input
class="form-control form-row w-75"
type="checkbox"
id="editconfig-verifyofflinecache"
/>
<label for="editconfig-offlinecachelocation"
><h5>Offline Cache Location:</h5></label
>
<div class="form-row">
<input
class="form-control w-75"
id="editconfig-offlinecachelocation"
type="text"
oninput="validateCacheLocation()"
/>
<button
type="button"
class="btn btn-primary ml-1"
onclick="browseOfflineCache()"
title="Browse"
>
<i class="fas fa-folder"></i>
</button>
</div>
>Select Offline Cache Location:</label
><input
class="form-control form-row w-75"
id="editconfig-offlinecachelocation"
type="text"
oninput="validateCacheLocation()"
/>
</form>
</div>
<div class="modal-footer">
@@ -691,7 +668,7 @@
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Add Version</h4>
<h4 class="modal-title">Add Server</h4>
<button
type="button"
class="close"
@@ -909,38 +886,15 @@
</div>
</div>
</div>
<div id="of-config-button-div">
<button
class="btn btn-primary mr-1"
<div id="of-versionnumberdiv">
<a
id="of-versionnumber"
class="text-monospace text-secondary"
href="#of-aboutmodal"
data-toggle="modal"
data-bs-tooltip=""
data-placement="right"
id="of-editconfig-button"
type="button"
title="Edit Configuration"
data-target="#of-editconfigmodal"
>
<i class="fas fa-cog"></i>
</button>
</div>
<div id="of-about-button-div">
<button
class="btn btn-primary mr-1"
data-toggle="modal"
data-bs-tooltip=""
data-placement="left"
id="of-about-button"
type="button"
title="About OpenFusionClient"
data-target="#of-aboutmodal"
>v0</a
>
<i class="fas fa-info-circle"></i>
</button>
</div>
<div id="of-about-flash-div" style="z-index: -1">
<button class="btn btn-warning mr-1" tabindex="-1" type="button">
<i class="fas fa-info-circle"></i>
</button>
</div>
</section>
<section>

View File

@@ -30,83 +30,28 @@ var serversPath = path.join(userData, "servers.json");
var versionsPath = path.join(userData, "versions.json");
var hashPath = path.join(userData, "hashes.json");
function backup() {
if (fs.existsSync(configPath)) fs.copySync(configPath, configPath + ".bak");
if (fs.existsSync(serversPath))
fs.copySync(serversPath, serversPath + ".bak");
if (fs.existsSync(versionsPath))
fs.copySync(versionsPath, versionsPath + ".bak");
if (fs.existsSync(hashPath)) fs.copySync(hashPath, hashPath + ".bak");
}
function patchVersions() {
var current = fs.readJsonSync(versionsPath);
var newDefaults = fs.readJsonSync(
path.join(__dirname, "/defaults/versions.json")
);
for (var i = 0; i < newDefaults["versions"].length; i++) {
var newDefault = newDefaults["versions"][i];
var found = false;
for (var j = 0; j < current["versions"].length; j++) {
var version = current["versions"][j];
if (newDefault["name"] === version["name"]) {
current["versions"][j] = newDefault;
found = true;
break;
}
}
if (!found) {
current["versions"].push(newDefault);
}
}
fs.writeFileSync(versionsPath, JSON.stringify(current, null, 4));
}
function patchServers() {
var current = fs.readJsonSync(serversPath);
var newDefaults = fs.readJsonSync(
path.join(__dirname, "/defaults/servers.json")
);
for (var i = 0; i < newDefaults["servers"].length; i++) {
var newDefault = newDefaults["servers"][i];
var found = false;
for (var j = 0; j < current["servers"].length; j++) {
var server = current["servers"][j];
if (newDefault["uuid"] === server["uuid"]) {
current["servers"][j] = newDefault;
found = true;
break;
}
}
if (!found) {
current["servers"].push(newDefault);
}
}
fs.writeFileSync(serversPath, JSON.stringify(current, null, 4));
}
function initialSetup(firstTime) {
backup();
if (firstTime) {
if (!firstTime) {
// Migration from pre-1.6
// Back everything up, just in case
if (fs.existsSync(configPath))
fs.copySync(configPath, configPath + ".bak");
if (fs.existsSync(serversPath))
fs.copySync(serversPath, serversPath + ".bak");
if (fs.existsSync(versionsPath))
fs.copySync(versionsPath, versionsPath + ".bak");
if (fs.existsSync(hashPath)) fs.copySync(hashPath, hashPath + ".bak");
} else {
// First-time setup
// Copy default servers
fs.copySync(
path.join(__dirname, "/defaults/servers.json"),
serversPath
);
fs.copySync(
path.join(__dirname, "/defaults/versions.json"),
versionsPath
);
} else if (fs.existsSync(serversPath)) {
// Migration
// Update default servers and versions
patchVersions();
patchServers();
}
// Copy default versions and config
fs.copySync(path.join(__dirname, "/defaults/versions.json"), versionsPath);
fs.copySync(path.join(__dirname, "/defaults/config.json"), configPath);
fs.copySync(path.join(__dirname, "/defaults/hashes.json"), hashPath);

8
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "OpenFusionClient",
"version": "1.6.0",
"name": "open-fusion-client",
"version": "1.5.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "OpenFusionClient",
"version": "1.6.0",
"name": "open-fusion-client",
"version": "1.5.2",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {

View File

@@ -1,7 +1,7 @@
{
"name": "OpenFusionClient",
"version": "1.6.1",
"description": "OpenFusionClient",
"name": "open-fusion-client",
"version": "1.5.2",
"description": "Electron app to easily connect to FusionFall servers",
"main": "index.js",
"scripts": {
"postinstall": "npx patch-package && npm explore electron-prebuilt -- npm run postinstall",