Files
Silk-Fly-Launcher/renderer/renderer.js
2026-01-22 13:52:13 +01:00

139 lines
4.7 KiB
JavaScript

const title = document.getElementById("title");
const view = document.getElementById("view");
const HomeTemplate = document.getElementById("home-template");
const installedModsTemplate = document.getElementById("installed-mods-template");
const onlineModsTemplate = document.getElementById("online-mods-template");
const settingsTemplate = document.getElementById("settings-template");
const modTemplate = document.getElementById("mod-template");
const versionText = HomeTemplate.content.getElementById("version-text");
let bepinexVersion
navigate("home")
let savePath
files.userSavePath().then(path => {
savePath = `${path}\\config.json`
files.fileExists(savePath).then(result => {
if(!result) {
autoDetectGamePath()
}
});
});
async function navigate(page) {
view.replaceChildren()
switch (page) {
case "home":
title.innerText = "Home";
const HomeTemplateCopy = HomeTemplate.content.cloneNode(true)
const versionText = HomeTemplateCopy.getElementById("version-text")
versionText.innerText =
`Chrome version: (v${versions.chrome()}), ` +
`Node.js version: (v${versions.node()}), Electron version: (v${versions.electron()})`
view.appendChild(HomeTemplateCopy)
break;
case "mods-installed":
title.innerText = "Installed Mods";
const installedModsTemplateCopy = installedModsTemplate.content.cloneNode(true)
view.appendChild(installedModsTemplateCopy)
break;
case "mods-online":
title.innerText = "Online Mods";
const onlineModsTemplateCopy = onlineModsTemplate.content.cloneNode(true)
const ModsContainer = onlineModsTemplateCopy.getElementById("mods-container")
view.appendChild(onlineModsTemplateCopy)
for(let i = 0; i <= 10; i++) {
const modTemplateCopy = modTemplate.content.cloneNode(true)
const modLinkButton = modTemplateCopy.getElementById("external-link")
modLinkButton.addEventListener('click', function(event) {
event.preventDefault()
const modLink = modLinkButton.href
electronAPI.openExternalLink(modLink)
})
ModsContainer.appendChild(modTemplateCopy)
}
break;
case "general-settings":
title.innerText = "Settings";
const settingsTemplateCopy = settingsTemplate.content.cloneNode(true)
const silksongPathInput = settingsTemplateCopy.getElementById("silksong-path-input")
silksongPathInput.value = await save.loadSilksongPath()
silksongPathInput.addEventListener('input', async function(event) {
let silksongPath = silksongPathInput.value
await save.saveSilksongPath(silksongPath)
});
view.appendChild(settingsTemplateCopy)
}
}
function launch(mode) {
alert(`Launching the game in ${mode} mode.`);
}
async function autoDetectGamePath() {
const defaultsSilksongPaths = [
":/Program Files (x86)/Steam/steamapps/common/Hollow Knight Silksong",
":/SteamLibrary/steamapps/common/Hollow Knight Silksong"
]
for (const path of defaultsSilksongPaths) {
for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {
const fullPath = `${String.fromCharCode(i)}${path}`
if (await files.fileExists(fullPath)) {
await save.saveSilksongPath(fullPath)
if (document.getElementById("silksong-path-input")) {
document.getElementById("silksong-path-input").value = await save.loadSilksongPath()
}
return
}
}
}
}
async function deleteData() {
await files.delete(savePath)
document.getElementById("silksong-path-input").value = await save.loadSilksongPath()
}
async function exportData() {
await files.export()
}
async function importData() {
await files.import()
document.getElementById("silksong-path-input").value = await save.loadSilksongPath()
}
async function downloadMod() {
console.log("WIP")
}
async function installBepinex() {
bepinexVersion = await bepinex.install()
setBepinexVersion()
}
async function uninstallBepinex() {
bepinexVersion = await bepinex.uninstall()
setBepinexVersion()
}
async function setBepinexVersion() {
const bepinexVersionText = document.getElementById("bepinex-version-text")
if(await bepinexVersion == undefined) {
bepinexVersionText.innerText = "BepInEx is not installed"
}
else {
bepinexVersionText.innerText = `BepInEx ${bepinexVersion} is installed`
}
}