From 90eb2040217d996b28600720269d47a636591675 Mon Sep 17 00:00:00 2001 From: GabiZar Date: Sat, 21 Mar 2026 15:19:34 +0100 Subject: [PATCH] Clean UI and fix a bug related to empty Silksong path --- forge.config.cjs | 9 --- main.js | 43 ++++++++------ renderer/assets/icons/folder.svg | 2 +- renderer/assets/icons/github.svg | 2 +- renderer/assets/icons/settings.svg | 3 +- renderer/assets/icons/sort-order-1.svg | 3 +- renderer/assets/icons/sort-order-2.svg | 3 +- renderer/assets/icons/start-modded.svg | 3 +- renderer/assets/icons/start-vanilla.svg | 3 +- renderer/index.html | 77 +++++++++++++------------ renderer/renderer.js | 15 ++--- renderer/style.css | 11 ++-- renderer/welcome.html | 42 +++++++------- 13 files changed, 111 insertions(+), 105 deletions(-) diff --git a/forge.config.cjs b/forge.config.cjs index a047259..02df64a 100644 --- a/forge.config.cjs +++ b/forge.config.cjs @@ -23,15 +23,6 @@ if (buildTarget == "zip" || buildTarget == "all") { }); } -async function fileExists(filePath) { - try { - await fs.access(filePath); - return true; - } catch { - return false; - } -} - module.exports = { packagerConfig: { asar: true, diff --git a/main.js b/main.js index 5df3082..3ea0b6f 100644 --- a/main.js +++ b/main.js @@ -463,9 +463,10 @@ async function createNexus(api) { } catch (error) { if (error.mStatusCode == 401) { mainWindow.webContents.send("showToast", "Invalid Nexus API key", "error"); - } - if (error.code == "ENOTFOUND") { + } else if (error.code == "ENOTFOUND") { mainWindow.webContents.send("showToast", "Unable to communicate with Nexus servers", "error"); + } else { + mainWindow.webContents.send("showToast", "Unable to create Nexus API ", "error"); } nexus = undefined; } @@ -646,24 +647,15 @@ async function searchInstalledMods(keywords, offset = 0, count = 10, sortFilter modsInfo.push(modInfo); } - const modsInfoFiltered = modsInfo.filter((mod) => mod.name.toLowerCase().includes(keywords.toLowerCase())); - const sortFactor = sortOrder == "ASC" ? 1 : -1; - - let modsInfoSorted; - if (sortFilter == "name" || sortFilter == "createdAt" || sortFilter == "updatedAt") { - modsInfoSorted = modsInfoFiltered.sort((a, b) => sortFactor * a[sortFilter].localeCompare(b[sortFilter])); - } else if (sortFilter == "downloads" || sortFilter == "endorsements" || sortFilter == "size") { - if (sortFilter == "size") { - sortFilter = "fileSize"; - } - modsInfoSorted = modsInfoFiltered.sort((a, b) => sortFactor * (a[sortFilter] - b[sortFilter])); - } - - installedTotalModsCount = modsInfoSorted.length; - installedCachedModList = modsInfoSorted.slice(offset, offset + count); + const result = sortAndFilterModsList(modsInfo, keywords, offset, count, sortFilter, sortOrder); + installedCachedModList = result.list; + installedTotalModsCount = result.totalCount; } async function checkInstalledMods() { + if (!loadSilksongPath()) { + return; + } const bepinexPluginsPath = path.join(loadSilksongPath(), "BepInEx", "plugins"); for (const [key, modInfo] of Object.entries(installedModsStore.store)) { @@ -730,6 +722,23 @@ ipcMain.handle("deactivate-mod", async (event, modId) => { } }); +function sortAndFilterModsList(list, keywords, offset, count, sortFilter, sortOrder) { + const listFiltered = list.filter((element) => element.name.toLowerCase().includes(keywords.toLowerCase())); + const sortFactor = sortOrder == "ASC" ? 1 : -1; + + let listSorted; + if (sortFilter == "name" || sortFilter == "createdAt" || sortFilter == "updatedAt") { + listSorted = listFiltered.sort((a, b) => sortFactor * a[sortFilter].localeCompare(b[sortFilter])); + } else if (sortFilter == "downloads" || sortFilter == "endorsements" || sortFilter == "size") { + if (sortFilter == "size") { + sortFilter = "fileSize"; + } + listSorted = listFiltered.sort((a, b) => sortFactor * (a[sortFilter] - b[sortFilter])); + } + + return { list: listSorted.slice(offset, offset + count), totalCount: listSorted.length }; +} + ////////////////////////////////////////////////////// //////////////////// UNCATEGORIZE //////////////////// diff --git a/renderer/assets/icons/folder.svg b/renderer/assets/icons/folder.svg index 40a1970..b55d377 100644 --- a/renderer/assets/icons/folder.svg +++ b/renderer/assets/icons/folder.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/renderer/assets/icons/github.svg b/renderer/assets/icons/github.svg index 7e4ff60..ef03a3a 100644 --- a/renderer/assets/icons/github.svg +++ b/renderer/assets/icons/github.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/renderer/assets/icons/settings.svg b/renderer/assets/icons/settings.svg index bd5b460..0d6ed2c 100644 --- a/renderer/assets/icons/settings.svg +++ b/renderer/assets/icons/settings.svg @@ -3,7 +3,8 @@ focusable="false" aria-hidden="true" viewBox="0 0 14 14" - xmlns="http://www.w3.org/2000/svg"> + xmlns="http://www.w3.org/2000/svg" + fill="#ffffff"> diff --git a/renderer/assets/icons/sort-order-1.svg b/renderer/assets/icons/sort-order-1.svg index fea1965..8feeb68 100644 --- a/renderer/assets/icons/sort-order-1.svg +++ b/renderer/assets/icons/sort-order-1.svg @@ -3,7 +3,8 @@ focusable="false" aria-hidden="true" viewBox="0 0 14 14" - xmlns="http://www.w3.org/2000/svg"> + xmlns="http://www.w3.org/2000/svg" + fill="#ffffff">