From 9225f2cd773450b9ee95512162c34120765203c6 Mon Sep 17 00:00:00 2001 From: Unifox Date: Thu, 6 Feb 2025 01:46:52 -0700 Subject: [PATCH 01/19] Show mod file size in mods list This implements the changes made in PR #48 of the beatmods backend to add file sizes to mods. The change also allows for warning if a mod is oversized. Most mods shouldn't have a warning, but should a mod go over a limit, it'll warn the user. THIS WILL REQUIRE FURTHER TESTING ONCE THE BACKEND UPDATES --- assets/jsons/translations/en.json | 1 + .../services/mods/beat-mods-api.service.ts | 4 +-- .../slides/mods/mod-item.component.tsx | 6 ++++ .../slides/mods/mods-grid.component.tsx | 5 +-- src/renderer/index.css | 35 +++++++++++++++++++ src/shared/models/mods/mod.interface.ts | 1 + 6 files changed, 48 insertions(+), 4 deletions(-) diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index f55c837f..f31802df 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "Name", + "size": "Size", "installed": "Installed", "latest": "Latest", "description": "Description", diff --git a/src/main/services/mods/beat-mods-api.service.ts b/src/main/services/mods/beat-mods-api.service.ts index 07ba0d79..d7a799ef 100644 --- a/src/main/services/mods/beat-mods-api.service.ts +++ b/src/main/services/mods/beat-mods-api.service.ts @@ -9,7 +9,7 @@ export class BeatModsApiService { private readonly requestService: RequestService; - public readonly MODS_REPO_URL = "https://beatmods.com"; + public readonly MODS_REPO_URL = "http://localhost:5001"; private readonly MODS_REPO_API_URL = `${this.MODS_REPO_URL}/api`; private readonly versionModsCache = new Map(); @@ -28,7 +28,7 @@ export class BeatModsApiService { private getVersionModsUrl(version: BSVersion): string { const platform: BbmPlatform = version.oculus || version.metadata?.store === BsStore.OCULUS ? BbmPlatform.OculusPC : BbmPlatform.SteamPC; - return `${this.MODS_REPO_API_URL}/mods?status=verified&gameVersion=${version.BSVersion}&gameName=BeatSaber&platform=${platform}`; + return `${this.MODS_REPO_API_URL}/mods?status=verified&gameVersion=${version.BSVersion}&gameName=BeatSaber`; } private updateModsHashCache(mods: BbmModVersion[]): void { diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index ab8be1dd..fd760d01 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -65,6 +65,12 @@ export function ModItem({ className, mod, installedVersion, isDependency, isSele {mod.version.modVersion} + 100 ? "text-red-400 tooltip" : (mod.version.fileSize/1024/1024 > 50 ? "text-yellow-400 tooltip" : "") || "")}`} style={wantInfoStyle}> + {(mod.version.fileSize/1024 > 1024 ? `${Math.round(mod.version.fileSize/1024/1024)}MB` : (`${Math.round(mod.version.fileSize/1024)}KB` === `NaNKB` ? `-` : `${Math.round(mod.version.fileSize/1024)}KB`) || "-")} + 100 ? `tooltiptext w-[160px] bg-black text-red-400` : (mod.version.fileSize/1024/1024 > 50 ? `tooltiptext w-[140px] bg-black text-yellow-400` : "") || "")}> + {(mod.version.fileSize/1024/1024 > 100 ? `This is a very large mod!` : (mod.version.fileSize/1024/1024 > 50 ? `This is a large mod!` : "") || "")} + + {striptags(mod.mod?.summary ?? "", { tagReplacementText: " " })} diff --git a/src/renderer/components/version-viewer/slides/mods/mods-grid.component.tsx b/src/renderer/components/version-viewer/slides/mods/mods-grid.component.tsx index c5b60b3b..d44bb4b2 100644 --- a/src/renderer/components/version-viewer/slides/mods/mods-grid.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mods-grid.component.tsx @@ -58,14 +58,15 @@ export function ModsGrid({ modsMap, installed, modsSelected, onModChange, moreIn return ( modsMap && ( -
+
- {filterEnabled ? handleInput(e.target.value)} /> : {t("pages.version-viewer.mods.mods-grid.header-bar.name")}} + {filterEnabled ? handleInput(e.target.value)} /> : {t("pages.version-viewer.mods.mods-grid.header-bar.name")}} {t("pages.version-viewer.mods.mods-grid.header-bar.installed")} {t("pages.version-viewer.mods.mods-grid.header-bar.latest")} + {t("pages.version-viewer.mods.mods-grid.header-bar.size")} {t("pages.version-viewer.mods.mods-grid.header-bar.description")} Date: Thu, 6 Feb 2025 01:48:23 -0700 Subject: [PATCH 02/19] Add build_start script It's just easier to test when rebuilding is needed to have one command for build and start. It literally just calls build and start one after the other lol --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 4134377e..280fbaae 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "main": "./.erb/dll/main.bundle.dev.js", "version": "1.5.2", "scripts": { + "build_start": "npm run build && npm run start", "build-rust-scripts": "ts-node ./.erb/scripts/build-rust-scripts.js", "build": "concurrently \"npm run build:main\" \"npm run build:renderer\"", "build:dll": "cross-env NODE_ENV=development webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.ts", From 258931dddd9693e489e662559cce8af3eb4ddf4a Mon Sep 17 00:00:00 2001 From: Unifox Date: Thu, 6 Feb 2025 17:38:04 -0700 Subject: [PATCH 03/19] Revert "Add build_start script" This reverts commit 28c71be05128cfb0bc7bad6cf1eb51d4a27c4fea. --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 280fbaae..4134377e 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,6 @@ "main": "./.erb/dll/main.bundle.dev.js", "version": "1.5.2", "scripts": { - "build_start": "npm run build && npm run start", "build-rust-scripts": "ts-node ./.erb/scripts/build-rust-scripts.js", "build": "concurrently \"npm run build:main\" \"npm run build:renderer\"", "build:dll": "cross-env NODE_ENV=development webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.ts", From 1e7dde613ed60117349f48ac4daae9c182f920e8 Mon Sep 17 00:00:00 2001 From: Unifox Date: Thu, 6 Feb 2025 17:42:49 -0700 Subject: [PATCH 04/19] Revert testing changes Forgor to set these back before committing... oops --- src/main/services/mods/beat-mods-api.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/services/mods/beat-mods-api.service.ts b/src/main/services/mods/beat-mods-api.service.ts index d7a799ef..07ba0d79 100644 --- a/src/main/services/mods/beat-mods-api.service.ts +++ b/src/main/services/mods/beat-mods-api.service.ts @@ -9,7 +9,7 @@ export class BeatModsApiService { private readonly requestService: RequestService; - public readonly MODS_REPO_URL = "http://localhost:5001"; + public readonly MODS_REPO_URL = "https://beatmods.com"; private readonly MODS_REPO_API_URL = `${this.MODS_REPO_URL}/api`; private readonly versionModsCache = new Map(); @@ -28,7 +28,7 @@ export class BeatModsApiService { private getVersionModsUrl(version: BSVersion): string { const platform: BbmPlatform = version.oculus || version.metadata?.store === BsStore.OCULUS ? BbmPlatform.OculusPC : BbmPlatform.SteamPC; - return `${this.MODS_REPO_API_URL}/mods?status=verified&gameVersion=${version.BSVersion}&gameName=BeatSaber`; + return `${this.MODS_REPO_API_URL}/mods?status=verified&gameVersion=${version.BSVersion}&gameName=BeatSaber&platform=${platform}`; } private updateModsHashCache(mods: BbmModVersion[]): void { From 07f2455cce4ae09fe94e9c68ada1dec52c0071fd Mon Sep 17 00:00:00 2001 From: Unifox Date: Thu, 6 Feb 2025 18:19:49 -0700 Subject: [PATCH 05/19] Add translations for Size Should probably add the other translations for size as well. I've checked that it's the right translation when talking about file size specifically --- assets/jsons/translations/de.json | 1 + assets/jsons/translations/es.json | 1 + assets/jsons/translations/fr.json | 1 + assets/jsons/translations/it.json | 1 + assets/jsons/translations/ja.json | 1 + assets/jsons/translations/ko.json | 1 + assets/jsons/translations/pt-br.json | 1 + assets/jsons/translations/ru.json | 1 + assets/jsons/translations/zh-tw.json | 1 + assets/jsons/translations/zh.json | 1 + 10 files changed, 10 insertions(+) diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index c7eadb2d..1698a057 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "Name", + "size": "Größe", "installed": "Installiert", "latest": "Neueste", "description": "Beschreibung", diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index c7681628..4d9ffc29 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "Nombre", + "size": "Tamaño", "installed": "Instalado", "latest": "Último", "description": "Descripción", diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index d065f6d5..7ae06841 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "Nom", + "size": "Taille", "installed": "Installé", "latest": "Récent", "description": "Description", diff --git a/assets/jsons/translations/it.json b/assets/jsons/translations/it.json index 3a445fe3..d8b7ca40 100644 --- a/assets/jsons/translations/it.json +++ b/assets/jsons/translations/it.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "Nome", + "size": "Dimensione", "installed": "Installata", "latest": "Ultima Versione", "description": "Descrizione", diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index 32e8c7ed..7efc5e24 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "名前", + "size": "サイズ", "installed": "インストール済み", "latest": "最新", "description": "說明", diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json index 035fefed..f3ab1a76 100644 --- a/assets/jsons/translations/ko.json +++ b/assets/jsons/translations/ko.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "이름", + "size": "크기", "installed": "설치됨", "latest": "최신", "description": "설명", diff --git a/assets/jsons/translations/pt-br.json b/assets/jsons/translations/pt-br.json index dc21fa60..93dc8aeb 100644 --- a/assets/jsons/translations/pt-br.json +++ b/assets/jsons/translations/pt-br.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "Nome", + "size": "tamanho", "installed": "Instalado", "latest": "Mais recente", "description": "Descrição", diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index 4a4500a1..d684964f 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "Имя", + "size": "Размер", "installed": "Установлено", "latest": "Latest", "description": "Описание", diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index cacac60a..02fe03b6 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "名稱", + "size": "大小", "installed": "已安裝", "latest": "最新", "description": "描述", diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index da08ac9b..764864bc 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -139,6 +139,7 @@ "mods-grid": { "header-bar": { "name": "名称", + "size": "大小", "installed": "已安装", "latest": "最新", "description": "描述", From af6e2053e1ba5c3fb4f112a0e0db2023b80fb1f4 Mon Sep 17 00:00:00 2001 From: Unifox Date: Fri, 7 Feb 2025 20:24:44 -0700 Subject: [PATCH 06/19] Refactor + move css to tailwind Refactored the code for checking and showing mod size. Also redid manual css in tailwind css --- .../slides/mods/mod-item.component.tsx | 40 +++++++++++++------ src/renderer/index.css | 35 ---------------- 2 files changed, 28 insertions(+), 47 deletions(-) diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index fd760d01..046fe18d 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -51,33 +51,49 @@ export function ModItem({ className, mod, installedVersion, isDependency, isSele onChange(!isChecked); }; + const {fileSize} = mod.version; + + const verifyFileSize = fileSize !== undefined; + + const isMediumMod = verifyFileSize && fileSize/1024/1024 > 50; + + const isLargeMod = verifyFileSize && fileSize/1024/1024 > 100; + + const getFormattedSize = () : string => { + if (!verifyFileSize) + return `-`; + if (fileSize/1024 > 1024) + return `${Math.round(mod.version.fileSize/1024/1024)}MB`; + return `${Math.round(mod.version.fileSize/1024)}KB`; + }; + return ( -
  • -
    +
  • +
    onChange(!isChecked)} disabled={mod.mod.category === BbmCategories.Core || isDependency || disabled} checked={isChecked} />
    - + {mod.mod.name} - + {installedVersion || "-"} - + {mod.version.modVersion} - 100 ? "text-red-400 tooltip" : (mod.version.fileSize/1024/1024 > 50 ? "text-yellow-400 tooltip" : "") || "")}`} style={wantInfoStyle}> - {(mod.version.fileSize/1024 > 1024 ? `${Math.round(mod.version.fileSize/1024/1024)}MB` : (`${Math.round(mod.version.fileSize/1024)}KB` === `NaNKB` ? `-` : `${Math.round(mod.version.fileSize/1024)}KB`) || "-")} - 100 ? `tooltiptext w-[160px] bg-black text-red-400` : (mod.version.fileSize/1024/1024 > 50 ? `tooltiptext w-[140px] bg-black text-yellow-400` : "") || "")}> - {(mod.version.fileSize/1024/1024 > 100 ? `This is a very large mod!` : (mod.version.fileSize/1024/1024 > 50 ? `This is a large mod!` : "") || "")} + + {getFormattedSize()} + + {(isLargeMod ? `This is a very large mod!` : (isMediumMod ? `This is a large mod!` : "") || "")} - + {striptags(mod.mod?.summary ?? "", { tagReplacementText: " " })} -
    +
    {installedVersion && ( Date: Fri, 7 Feb 2025 21:25:29 -0700 Subject: [PATCH 07/19] A bit more refactoring --- .../components/shared/file-size-text.tsx | 32 +++++++++++++++++++ .../slides/mods/mod-item.component.tsx | 24 ++------------ src/shared/models/mods/mod.interface.ts | 2 +- 3 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 src/renderer/components/shared/file-size-text.tsx diff --git a/src/renderer/components/shared/file-size-text.tsx b/src/renderer/components/shared/file-size-text.tsx new file mode 100644 index 00000000..aab0c14e --- /dev/null +++ b/src/renderer/components/shared/file-size-text.tsx @@ -0,0 +1,32 @@ +import { CSSProperties } from "react"; + +type Props = { + fileSize?: number; + wantInfoStyle: CSSProperties; +} + +export function FileSizeText({ fileSize, wantInfoStyle }: Props) { + + const verifyFileSize = fileSize !== undefined; + + const isMediumMod = verifyFileSize && fileSize > 1024 * 1024 * 50; // 50MB + + const isLargeMod = verifyFileSize && fileSize > 1024 * 1024 * 100; // 100MB + + const getFormattedSize = () : string => { + if (!verifyFileSize) + return `-`; + if (fileSize < 1024 * 1024) + return `${(fileSize/1024).toFixed(2)}KB`; + return `${(fileSize/1024/1024).toFixed(2)}MB`; + }; + + return ( + + {getFormattedSize()} + + {(isLargeMod ? `This is a very large mod!` : (isMediumMod ? `This is a large mod!` : "") || "")} + + + ); +} diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index 046fe18d..f7fb108a 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -7,6 +7,7 @@ import useDoubleClick from "use-double-click"; import { useOnUpdate } from "renderer/hooks/use-on-update.hook"; import striptags from "striptags"; import { safeGt } from "shared/helpers/semver.helpers"; +import { FileSizeText } from "renderer/components/shared/file-size-text"; type Props = { className?: string; @@ -51,22 +52,6 @@ export function ModItem({ className, mod, installedVersion, isDependency, isSele onChange(!isChecked); }; - const {fileSize} = mod.version; - - const verifyFileSize = fileSize !== undefined; - - const isMediumMod = verifyFileSize && fileSize/1024/1024 > 50; - - const isLargeMod = verifyFileSize && fileSize/1024/1024 > 100; - - const getFormattedSize = () : string => { - if (!verifyFileSize) - return `-`; - if (fileSize/1024 > 1024) - return `${Math.round(mod.version.fileSize/1024/1024)}MB`; - return `${Math.round(mod.version.fileSize/1024)}KB`; - }; - return (
  • @@ -81,12 +66,7 @@ export function ModItem({ className, mod, installedVersion, isDependency, isSele {mod.version.modVersion} - - {getFormattedSize()} - - {(isLargeMod ? `This is a very large mod!` : (isMediumMod ? `This is a large mod!` : "") || "")} - - + {striptags(mod.mod?.summary ?? "", { tagReplacementText: " " })} diff --git a/src/shared/models/mods/mod.interface.ts b/src/shared/models/mods/mod.interface.ts index ae29da3f..e58daf94 100644 --- a/src/shared/models/mods/mod.interface.ts +++ b/src/shared/models/mods/mod.interface.ts @@ -42,7 +42,7 @@ export interface BbmModVersion { downloadCount: number; lastApprovedById?: number; lastUpdatedById?: number; - fileSize: number; + fileSize?: number; createdAt?: Date; updatedAt?: Date; } From 187174aa5e7796be783101a2fd751b790d5a12e9 Mon Sep 17 00:00:00 2001 From: Unifox Date: Fri, 7 Feb 2025 22:40:15 -0700 Subject: [PATCH 08/19] Use Tippy for tooltip --- .../components/shared/file-size-text.tsx | 16 +++++++++++----- .../slides/mods/mod-item.component.tsx | 16 ++++++++-------- src/renderer/index.css | 16 ++++++++++++++++ 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/renderer/components/shared/file-size-text.tsx b/src/renderer/components/shared/file-size-text.tsx index aab0c14e..29e89cb8 100644 --- a/src/renderer/components/shared/file-size-text.tsx +++ b/src/renderer/components/shared/file-size-text.tsx @@ -1,3 +1,4 @@ +import Tippy from "@tippyjs/react"; import { CSSProperties } from "react"; type Props = { @@ -22,11 +23,16 @@ export function FileSizeText({ fileSize, wantInfoStyle }: Props) { }; return ( - - {getFormattedSize()} - - {(isLargeMod ? `This is a very large mod!` : (isMediumMod ? `This is a large mod!` : "") || "")} + + + + {getFormattedSize()} - + ); } diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index f7fb108a..8202f0dc 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -53,27 +53,27 @@ export function ModItem({ className, mod, installedVersion, isDependency, isSele }; return ( -
  • -
    +
  • +
    onChange(!isChecked)} disabled={mod.mod.category === BbmCategories.Core || isDependency || disabled} checked={isChecked} />
    - + {mod.mod.name} - + {installedVersion || "-"} - + {mod.version.modVersion} - + {striptags(mod.mod?.summary ?? "", { tagReplacementText: " " })} -
    +
    {installedVersion && ( .tippy-arrow::before { + @apply border-l-neutral-900; +} + +.tippy-box[data-theme~='yellow'] { + @apply bg-neutral-900; + @apply text-yellow-400; +} +.tippy-box[data-theme~='yellow'][data-placement^='left'] > .tippy-arrow::before { + @apply border-l-neutral-900; +} + .bg-theme-1 { @apply bg-light-main-color-1 dark:bg-main-color-1; } .bg-theme-2 { @apply bg-light-main-color-2 dark:bg-main-color-2; } .bg-theme-3 { @apply bg-light-main-color-3 dark:bg-main-color-3; } From 3a2c92614c83ba043f048ea54160412de6c22874 Mon Sep 17 00:00:00 2001 From: Unifox Date: Fri, 7 Feb 2025 23:14:50 -0700 Subject: [PATCH 09/19] Move file-size-text.tsx into mod-item Since FileSizeText will only ever be used on ModItems --- .../components/shared/file-size-text.tsx | 38 ------------------- .../slides/mods/mod-item.component.tsx | 38 ++++++++++++++++++- 2 files changed, 37 insertions(+), 39 deletions(-) delete mode 100644 src/renderer/components/shared/file-size-text.tsx diff --git a/src/renderer/components/shared/file-size-text.tsx b/src/renderer/components/shared/file-size-text.tsx deleted file mode 100644 index 29e89cb8..00000000 --- a/src/renderer/components/shared/file-size-text.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import Tippy from "@tippyjs/react"; -import { CSSProperties } from "react"; - -type Props = { - fileSize?: number; - wantInfoStyle: CSSProperties; -} - -export function FileSizeText({ fileSize, wantInfoStyle }: Props) { - - const verifyFileSize = fileSize !== undefined; - - const isMediumMod = verifyFileSize && fileSize > 1024 * 1024 * 50; // 50MB - - const isLargeMod = verifyFileSize && fileSize > 1024 * 1024 * 100; // 100MB - - const getFormattedSize = () : string => { - if (!verifyFileSize) - return `-`; - if (fileSize < 1024 * 1024) - return `${(fileSize/1024).toFixed(2)}KB`; - return `${(fileSize/1024/1024).toFixed(2)}MB`; - }; - - return ( - - - - {getFormattedSize()} - - - ); -} diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index 8202f0dc..e0088e87 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -7,7 +7,7 @@ import useDoubleClick from "use-double-click"; import { useOnUpdate } from "renderer/hooks/use-on-update.hook"; import striptags from "striptags"; import { safeGt } from "shared/helpers/semver.helpers"; -import { FileSizeText } from "renderer/components/shared/file-size-text"; +import Tippy from "@tippyjs/react"; type Props = { className?: string; @@ -22,6 +22,42 @@ type Props = { onUninstall?: () => void; }; +type FileSizeProps = { + fileSize?: number; + wantInfoStyle: CSSProperties; +}; + +function FileSizeText({ fileSize, wantInfoStyle }: FileSizeProps) { + + const verifyFileSize = fileSize !== undefined; + + const isMediumMod = verifyFileSize && fileSize > 1024 * 1024 * 50; // 50MB + + const isLargeMod = verifyFileSize && fileSize > 1024 * 1024 * 100; // 100MB + + const getFormattedSize = () : string => { + if (!verifyFileSize) + return `-`; + if (fileSize < 1024 * 1024) + return `${(fileSize/1024).toFixed(2)}KB`; + return `${(fileSize/1024/1024).toFixed(2)}MB`; + }; + + return ( + + + + {getFormattedSize()} + + + ); +} + export function ModItem({ className, mod, installedVersion, isDependency, isSelected, onChange, wantInfo, onWantInfo, disabled, onUninstall }: Props) { const themeColor = useThemeColor("second-color"); From 701b3bf1416b1c2d196cb25161382ccf5f713c72 Mon Sep 17 00:00:00 2001 From: silentrald Date: Sun, 16 Feb 2025 10:39:44 +0800 Subject: [PATCH 10/19] [chore] fixed some lint issues --- src/main/decorators/log.decorator.ts | 4 ++-- .../services/additional-content/maps/song-cache.service.ts | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/decorators/log.decorator.ts b/src/main/decorators/log.decorator.ts index 9c87f932..dd67a4e5 100644 --- a/src/main/decorators/log.decorator.ts +++ b/src/main/decorators/log.decorator.ts @@ -27,10 +27,10 @@ export function Log(options?: LogOptions){ const logOutput = options?.logOutput ?? true; const logArgs = options?.logArgs ?? true; - return (target: unknown, propertyKey: string, descriptor: PropertyDescriptor) => { + return (_target: unknown, propertyKey: string, descriptor: PropertyDescriptor) => { const originalMethod = descriptor.value; - descriptor.value = function(...args: unknown[]) { + descriptor.value = function func(...args: unknown[]) { if (logInput) { logInfo('INPUT', propertyKey, args, logArgs, null); diff --git a/src/main/services/additional-content/maps/song-cache.service.ts b/src/main/services/additional-content/maps/song-cache.service.ts index 751b55d8..26fad375 100644 --- a/src/main/services/additional-content/maps/song-cache.service.ts +++ b/src/main/services/additional-content/maps/song-cache.service.ts @@ -19,7 +19,6 @@ export class SongCacheService { private readonly mapsInfoCache: JsonCache; private constructor(){ - console.log(this.MAPS_INFO_CACHE_PATH); this.mapsInfoCache = new JsonCache(this.MAPS_INFO_CACHE_PATH); } From a7d00f22c5c04f5ca6384423632e2da56283c091 Mon Sep 17 00:00:00 2001 From: Zagrios <40181755+Zagrios@users.noreply.github.com> Date: Wed, 19 Feb 2025 19:06:23 +0100 Subject: [PATCH 11/19] Convert throwed object to CustomError --- src/main/helpers/fs.helpers.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/helpers/fs.helpers.ts b/src/main/helpers/fs.helpers.ts index 58f8f233..d10583d2 100644 --- a/src/main/helpers/fs.helpers.ts +++ b/src/main/helpers/fs.helpers.ts @@ -3,7 +3,6 @@ import { access, mkdir, readdir, lstat, readlink } from "fs/promises"; import path from "path"; import { Observable, concatMap, from } from "rxjs"; import log from "electron-log"; -import { BsmException } from "shared/models/bsm-exception.model"; import crypto from "crypto"; import { execSync } from "child_process"; import { tryit } from "../../shared/helpers/error.helpers"; @@ -180,7 +179,7 @@ export function isSubdirectory(parent: string, child: string): boolean { export async function copyDirectoryWithJunctions(src: string, dest: string, options?: CopyOptions): Promise { if (isSubdirectory(src, dest)) { - throw { message: `Cannot copy directory '${src}' into itself '${dest}'.`, code: "COPY_TO_SUBPATH" } as BsmException; + throw new CustomError(`Cannot copy directory '${src}' into itself '${dest}'.`, "COPY_TO_SUBPATH"); } await ensureDir(dest); From b525cac25039ab8729bb51af663c5e7b291e1e23 Mon Sep 17 00:00:00 2001 From: silentrald Date: Fri, 21 Feb 2025 23:27:13 +0800 Subject: [PATCH 12/19] [chore] removed log decorators --- src/main/decorators/log.decorator.ts | 67 ---------------------------- 1 file changed, 67 deletions(-) delete mode 100644 src/main/decorators/log.decorator.ts diff --git a/src/main/decorators/log.decorator.ts b/src/main/decorators/log.decorator.ts deleted file mode 100644 index dd67a4e5..00000000 --- a/src/main/decorators/log.decorator.ts +++ /dev/null @@ -1,67 +0,0 @@ -import log from "electron-log"; -import { isPromise } from "../../shared/helpers/promise.helpers"; -import { tryit } from "../../shared/helpers/error.helpers"; - -type LogOptions = { - logInput?: boolean; - logOutput?: boolean; - logArgs?: boolean; -}; - -const stringifyArgs = (args: unknown[]) => { - return args?.map(a => JSON.stringify(a)).join(', '); -}; - -const logInfo = (message: string, propertyKey: string, args: unknown[], logArgs: boolean, result: unknown) => { - log.info(`[${message}] ${propertyKey}(${logArgs ? stringifyArgs(args) : ''})`, result); -}; - -const logError = (propertyKey: string, args: unknown[], logArgs: boolean, error: unknown) => { - log.error(`[ERROR] ${propertyKey}(${logArgs ? stringifyArgs(args) : ''})`, error); - throw error; -}; - -export function Log(options?: LogOptions){ - - const logInput = options?.logInput ?? false; - const logOutput = options?.logOutput ?? true; - const logArgs = options?.logArgs ?? true; - - return (_target: unknown, propertyKey: string, descriptor: PropertyDescriptor) => { - const originalMethod = descriptor.value; - - descriptor.value = function func(...args: unknown[]) { - - if (logInput) { - logInfo('INPUT', propertyKey, args, logArgs, null); - } - - const outcome = tryit(() => originalMethod.apply(this, args)); - - if (isPromise(outcome)) { - return outcome.then(({ result, error }) => { - - if (error) { - logError(propertyKey, args, logArgs, error); - } - if (logOutput) { - logInfo('OUTPUT', propertyKey, args, logArgs, result); - } - return result; - }); - } - - const { result, error } = outcome; - - if (error) { - logError(propertyKey, args, logArgs, error); - } - - if (logOutput) { - logInfo('OUTPUT', propertyKey, args, logArgs, result); - } - - return result; - }; - }; -} From c0aea5bdc36d5d221057c3b557c3c52d2e6276ee Mon Sep 17 00:00:00 2001 From: Unifox Date: Fri, 21 Feb 2025 08:33:28 -0700 Subject: [PATCH 13/19] Add Filipino and Ukrainian translations --- assets/jsons/translations/tl.json | 1 + assets/jsons/translations/uk.json | 1 + 2 files changed, 2 insertions(+) diff --git a/assets/jsons/translations/tl.json b/assets/jsons/translations/tl.json index 5fb2f246..de141b25 100644 --- a/assets/jsons/translations/tl.json +++ b/assets/jsons/translations/tl.json @@ -144,6 +144,7 @@ "mods-grid": { "header-bar": { "name": "Pangalan", + "size": "laki", "installed": "Naka-install", "latest": "Pinakabago", "description": "Deskripsyon", diff --git a/assets/jsons/translations/uk.json b/assets/jsons/translations/uk.json index c41b3692..41f1c63e 100644 --- a/assets/jsons/translations/uk.json +++ b/assets/jsons/translations/uk.json @@ -144,6 +144,7 @@ "mods-grid": { "header-bar": { "name": "Назва", + "size": "розмір", "installed": "Встановлено", "latest": "Остання", "description": "Опис", From 2c9e02fd2d417d02ee9d29cc23651e98c2d4f274 Mon Sep 17 00:00:00 2001 From: Unifox Date: Fri, 21 Feb 2025 09:16:15 -0700 Subject: [PATCH 14/19] Fix bot issues basically just pulling nested ternarys out into functions --- .../slides/mods/mod-item.component.tsx | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index e0088e87..919e9e73 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -43,15 +43,39 @@ function FileSizeText({ fileSize, wantInfoStyle }: FileSizeProps) { return `${(fileSize/1024/1024).toFixed(2)}MB`; }; + const getWarningText = () : string => { + if (isLargeMod) + return `This is a very large mod!`; + if (isMediumMod) + return `This is a large mod!`; + return ""; + }; + + const getTheme = () : string => { + if (isLargeMod) + return 'red'; + if (isMediumMod) + return 'yellow'; + return ""; + }; + + const getTextColor = () : string => { + if (isLargeMod) + return "text-red-400"; + if (isMediumMod) + return "text-yellow-400"; + return ""; + }; + return ( - + {getFormattedSize()} From 092f2af0651bd91b55ed29146bbd313afdbad7a3 Mon Sep 17 00:00:00 2001 From: Unifox Date: Fri, 21 Feb 2025 09:21:07 -0700 Subject: [PATCH 15/19] One last bot issue --- .../version-viewer/slides/mods/mod-item.component.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index 919e9e73..81c07086 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -23,8 +23,8 @@ type Props = { }; type FileSizeProps = { - fileSize?: number; - wantInfoStyle: CSSProperties; + readonly fileSize?: number; + readonly wantInfoStyle: CSSProperties; }; function FileSizeText({ fileSize, wantInfoStyle }: FileSizeProps) { From a74be4ba9dc7e01b637d86782cb37e27b499a64b Mon Sep 17 00:00:00 2001 From: Unifox Date: Fri, 21 Feb 2025 09:24:38 -0700 Subject: [PATCH 16/19] move readonly --- .../version-viewer/slides/mods/mod-item.component.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index 81c07086..09babf8d 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -23,11 +23,11 @@ type Props = { }; type FileSizeProps = { - readonly fileSize?: number; - readonly wantInfoStyle: CSSProperties; + fileSize?: number; + wantInfoStyle: CSSProperties; }; -function FileSizeText({ fileSize, wantInfoStyle }: FileSizeProps) { +function FileSizeText({ fileSize, wantInfoStyle }: Readonly) { const verifyFileSize = fileSize !== undefined; From e7b3ca4fdfa17a17a22052bdac0c853dcba727b5 Mon Sep 17 00:00:00 2001 From: Zagrios <40181755+Zagrios@users.noreply.github.com> Date: Sat, 22 Feb 2025 19:51:21 +0100 Subject: [PATCH 17/19] Handle zero file size in FileSizeText component --- .../version-viewer/slides/mods/mod-item.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index 09babf8d..f25c943b 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -36,7 +36,7 @@ function FileSizeText({ fileSize, wantInfoStyle }: Readonly) { const isLargeMod = verifyFileSize && fileSize > 1024 * 1024 * 100; // 100MB const getFormattedSize = () : string => { - if (!verifyFileSize) + if (!verifyFileSize || fileSize === 0) return `-`; if (fileSize < 1024 * 1024) return `${(fileSize/1024).toFixed(2)}KB`; From 2637726f5a4913c11e1e3b598151bbddb43732a0 Mon Sep 17 00:00:00 2001 From: Zagrios <40181755+Zagrios@users.noreply.github.com> Date: Sun, 23 Feb 2025 16:42:16 +0100 Subject: [PATCH 18/19] add missing translations --- assets/jsons/translations/de.json | 4 ++++ assets/jsons/translations/en.json | 4 ++++ assets/jsons/translations/es.json | 4 ++++ assets/jsons/translations/fr.json | 4 ++++ assets/jsons/translations/it.json | 4 ++++ assets/jsons/translations/ja.json | 4 ++++ assets/jsons/translations/ko.json | 4 ++++ assets/jsons/translations/pt-br.json | 4 ++++ assets/jsons/translations/ru.json | 4 ++++ assets/jsons/translations/tl.json | 4 ++++ assets/jsons/translations/uk.json | 4 ++++ assets/jsons/translations/zh-tw.json | 4 ++++ assets/jsons/translations/zh.json | 4 ++++ .../version-viewer/slides/mods/mod-item.component.tsx | 11 +++++++---- 14 files changed, 59 insertions(+), 4 deletions(-) diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index a63a4264..b608f8a5 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -153,6 +153,10 @@ "uninstall-all": "Alle deinstallieren", "unselect-all": "Alle abwählen" } + }, + "mod-item": { + "this-is-a-large-mod": "Das ist ein großer Mod!", + "this-is-a-very-large-mod": "Das ist ein sehr großer Mod!" } }, "notifications": { diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index eaef0a66..e688b2d4 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -153,6 +153,10 @@ "uninstall-all": "Uninstall all", "unselect-all": "Unselect all" } + }, + "mod-item":{ + "this-is-a-large-mod": "This is a large mod!", + "this-is-a-very-large-mod": "This is a very large mod!" } }, "notifications": { diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index 33d01ce4..e1a01261 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -153,6 +153,10 @@ "uninstall-all": "Desinstalar todos", "unselect-all": "Deseleccionar todo" } + }, + "mod-item": { + "this-is-a-large-mod": "¡Este es un mod grande!", + "this-is-a-very-large-mod": "¡Este es un mod muy grande!" } }, "notifications": { diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index 370d707a..32f4b3af 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -153,6 +153,10 @@ "uninstall-all": "Tout désinstaller", "unselect-all": "Tout désélectionner" } + }, + "mod-item": { + "this-is-a-large-mod": "C'est un mod volumineux !", + "this-is-a-very-large-mod": "C'est un mod très volumineux !" } }, "notifications": { diff --git a/assets/jsons/translations/it.json b/assets/jsons/translations/it.json index 1fc70044..0cd2277e 100644 --- a/assets/jsons/translations/it.json +++ b/assets/jsons/translations/it.json @@ -153,6 +153,10 @@ "uninstall-all": "Disinstalla tutto", "unselect-all": "Deseleziona tutto" } + }, + "mod-item": { + "this-is-a-large-mod": "Questo è un mod grande!", + "this-is-a-very-large-mod": "Questo è un mod molto grande!" } }, "notifications": { diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index b7541855..4ab132ff 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -153,6 +153,10 @@ "uninstall-all": "全てアンインストールする", "unselect-all": "すべて選択解除" } + }, + "mod-item": { + "this-is-a-large-mod": "これは大きなModです!", + "this-is-a-very-large-mod": "これは非常に大きなModです!" } }, "notifications": { diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json index aa0444b1..53c14586 100644 --- a/assets/jsons/translations/ko.json +++ b/assets/jsons/translations/ko.json @@ -153,6 +153,10 @@ "uninstall-all": "모두 제거", "unselect-all": "모두 선택 해제" } + }, + "mod-item": { + "this-is-a-large-mod": "이것은 큰 모드입니다!", + "this-is-a-very-large-mod": "이것은 매우 큰 모드입니다!" } }, "notifications": { diff --git a/assets/jsons/translations/pt-br.json b/assets/jsons/translations/pt-br.json index 860a7817..40825a4a 100644 --- a/assets/jsons/translations/pt-br.json +++ b/assets/jsons/translations/pt-br.json @@ -153,6 +153,10 @@ "uninstall-all": "Desinstalar todos", "unselect-all": "Desmarcar todos" } + }, + "mod-item": { + "this-is-a-large-mod": "Este é um mod grande!", + "this-is-a-very-large-mod": "Este é um mod muito grande!" } }, "notifications": { diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index 518cd8e1..6ff7342c 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -153,6 +153,10 @@ "uninstall-all": "Удалить всё", "unselect-all": "Снять все выделения" } + }, + "mod-item": { + "this-is-a-large-mod": "Это большой мод!", + "this-is-a-very-large-mod": "Это очень большой мод!" } }, "notifications": { diff --git a/assets/jsons/translations/tl.json b/assets/jsons/translations/tl.json index de141b25..fc87a679 100644 --- a/assets/jsons/translations/tl.json +++ b/assets/jsons/translations/tl.json @@ -153,6 +153,10 @@ "uninstall-all": "I-uninstall ang lahat", "unselect-all": "I-unselect and lahat" } + }, + "mod-item": { + "this-is-a-large-mod": "Ito ay isang malaking mod!", + "this-is-a-very-large-mod": "Ito ay isang napakalaking mod!" } }, "notifications": { diff --git a/assets/jsons/translations/uk.json b/assets/jsons/translations/uk.json index 41f1c63e..c0779323 100644 --- a/assets/jsons/translations/uk.json +++ b/assets/jsons/translations/uk.json @@ -153,6 +153,10 @@ "uninstall-all": "Видалити всі", "unselect-all": "Зняти виділення з всіх" } + }, + "mod-item": { + "this-is-a-large-mod": "Це великий мод!", + "this-is-a-very-large-mod": "Це дуже великий мод!" } }, "notifications": { diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index 08bbf344..c967614a 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -153,6 +153,10 @@ "uninstall-all": "全部移除", "unselect-all": "取消全選" } + }, + "mod-item": { + "this-is-a-large-mod": "這是一個大型Mod!", + "this-is-a-very-large-mod": "這是一個非常大型的Mod!" } }, "notifications": { diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index 19402214..ad9b8354 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -153,6 +153,10 @@ "uninstall-all": "全部卸载", "unselect-all": "取消全选" } + }, + "mod-item": { + "this-is-a-large-mod": "这是一个大型Mod!", + "this-is-a-very-large-mod": "这是一个非常大型的Mod!" } }, "notifications": { diff --git a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx index f25c943b..309ae883 100644 --- a/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx +++ b/src/renderer/components/version-viewer/slides/mods/mod-item.component.tsx @@ -8,6 +8,7 @@ import { useOnUpdate } from "renderer/hooks/use-on-update.hook"; import striptags from "striptags"; import { safeGt } from "shared/helpers/semver.helpers"; import Tippy from "@tippyjs/react"; +import { useTranslationV2 } from "renderer/hooks/use-translation.hook"; type Props = { className?: string; @@ -29,6 +30,8 @@ type FileSizeProps = { function FileSizeText({ fileSize, wantInfoStyle }: Readonly) { + const { text: t } = useTranslationV2(); + const verifyFileSize = fileSize !== undefined; const isMediumMod = verifyFileSize && fileSize > 1024 * 1024 * 50; // 50MB @@ -45,9 +48,9 @@ function FileSizeText({ fileSize, wantInfoStyle }: Readonly) { const getWarningText = () : string => { if (isLargeMod) - return `This is a very large mod!`; + return `pages.version-viewer.mods.mods-grid.mod-item.this-is-a-very-large-mod`; if (isMediumMod) - return `This is a large mod!`; + return `pages.version-viewer.mods.mods-grid.mod-item.this-is-a-large-mod`; return ""; }; @@ -70,10 +73,10 @@ function FileSizeText({ fileSize, wantInfoStyle }: Readonly) { return ( {getFormattedSize()} From 3f10d5917f1c07b1359df7aa9018dd6406d4d75c Mon Sep 17 00:00:00 2001 From: Zagrios <40181755+Zagrios@users.noreply.github.com> Date: Mon, 24 Feb 2025 14:16:05 +0100 Subject: [PATCH 19/19] Add patreons --- assets/jsons/patreons.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/jsons/patreons.json b/assets/jsons/patreons.json index 9bd6acc1..078f2e36 100644 --- a/assets/jsons/patreons.json +++ b/assets/jsons/patreons.json @@ -142,5 +142,11 @@ { "username": "Arts Rimuro Suraimu", "type": "gold" + }, + { + "username": "Ricardo Boss" + }, + { + "username": "Jesper Norsted" } ]