From c8003a8ae88a3ee95f802db1527964b92fa794c4 Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 19 Oct 2024 00:27:27 +0800 Subject: [PATCH 01/10] [bugfix] proper filter for leaderboard/ranking * use leaderboard query param with beatsaver * fixed issue where blRanked is not showing on mapItem components --- assets/jsons/translations/de.json | 9 +++++- assets/jsons/translations/en.json | 9 +++++- assets/jsons/translations/es.json | 9 +++++- assets/jsons/translations/fr.json | 9 +++++- assets/jsons/translations/ja.json | 9 +++++- assets/jsons/translations/ru.json | 9 +++++- assets/jsons/translations/zh-tw.json | 9 +++++- assets/jsons/translations/zh.json | 9 +++++- .../beat-saver/beat-saver-api.service.ts | 6 +++- .../maps/filter-panel.component.tsx | 31 +++++++++++++++---- src/shared/models/maps/beat-saver.model.ts | 9 ++++-- 11 files changed, 101 insertions(+), 17 deletions(-) diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index d280acd0..f189ba08 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -832,7 +832,8 @@ "tags": "Stichwörter", "specificities": "Allgemein", "requirements": "Anforderungen", - "exclude": "Ausschließen" + "exclude": "Ausschließen", + "leaderboard": "leaderboard" }, "map-types": { "accuracy": "Präzision", @@ -888,6 +889,12 @@ "verified": "Verifiziert", "fullSpread": "Full Spread" }, + "map-leaderboard": { + "All": "All", + "Ranked": "Ranked", + "BeatLeader": "BeatLeader", + "ScoreSaber": "ScoreSaber" + }, "map-excludes": { "installed": "Installiert" }, diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index 6bf60e2f..c9b679a5 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -839,7 +839,8 @@ "tags": "tags", "specificities": "general", "requirements": "requirements", - "exclude": "exclude" + "exclude": "exclude", + "leaderboard": "leaderboard" }, "map-types": { "accuracy": "accuracy", @@ -895,6 +896,12 @@ "verified": "verified", "fullSpread": "full spread" }, + "map-leaderboard": { + "All": "All", + "Ranked": "Ranked", + "BeatLeader": "BeatLeader", + "ScoreSaber": "ScoreSaber" + }, "map-excludes": { "installed": "installed" }, diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index 0ea57cbb..908aa321 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -832,7 +832,8 @@ "tags": "tags", "specificities": "general", "requirements": "requisitos", - "exclude": "excluir" + "exclude": "excluir", + "leaderboard": "leaderboard" }, "map-types": { "accuracy": "precisión", @@ -888,6 +889,12 @@ "verified": "verificado", "fullSpread": "panel completo" }, + "map-leaderboard": { + "All": "All", + "Ranked": "Ranked", + "BeatLeader": "BeatLeader", + "ScoreSaber": "ScoreSaber" + }, "map-excludes": { "installed": "instalado" }, diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index 0695a01a..1f7b7103 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -833,7 +833,8 @@ "tags": "tags", "specificities": "général", "requirements": "requis", - "exclude": "exclure" + "exclude": "exclure", + "leaderboard": "leaderboard" }, "map-types": { "accuracy": "précision", @@ -889,6 +890,12 @@ "verified": "vérifiée", "fullSpread": "panel complet" }, + "map-leaderboard": { + "All": "All", + "Ranked": "Ranked", + "BeatLeader": "BeatLeader", + "ScoreSaber": "ScoreSaber" + }, "map-excludes": { "installed": "installé" }, diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index eb259009..b1209ad2 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -832,7 +832,8 @@ "tags": "タグ", "specificities": "一般", "requirements": "要Mod", - "exclude": "除外する" + "exclude": "除外する", + "leaderboard": "leaderboard" }, "map-types": { "accuracy": "正確", @@ -888,6 +889,12 @@ "verified": "認証済み", "fullSpread": "フルスプレッド" }, + "map-leaderboard": { + "All": "All", + "Ranked": "Ranked", + "BeatLeader": "BeatLeader", + "ScoreSaber": "ScoreSaber" + }, "map-excludes": { "installed": "インストール済み" }, diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index 7e4c1a13..be1bcba6 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -831,7 +831,8 @@ "tags": "тэги", "specificities": "основное", "requirements": "требуемые моды", - "exclude": "исключить" + "exclude": "исключить", + "leaderboard": "leaderboard" }, "map-types": { "accuracy": "точность", @@ -887,6 +888,12 @@ "verified": "проверенные авторы", "fullSpread": "полный набор" }, + "map-leaderboard": { + "All": "All", + "Ranked": "Ranked", + "BeatLeader": "BeatLeader", + "ScoreSaber": "ScoreSaber" + }, "map-excludes": { "installed": "установленный" }, diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index 598bd6f1..37aaeace 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -832,7 +832,8 @@ "tags": "標籤", "specificities": "general", "requirements": "要求", - "exclude": "排除" + "exclude": "排除", + "leaderboard": "leaderboard" }, "map-types": { "accuracy": "精確度", @@ -888,6 +889,12 @@ "verified": "Verified", "fullSpread": "Full spread" }, + "map-leaderboard": { + "All": "All", + "Ranked": "Ranked", + "BeatLeader": "BeatLeader", + "ScoreSaber": "ScoreSaber" + }, "map-excludes": { "installed": "已安裝" }, diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index 3e0f263b..b7f2624d 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -832,7 +832,8 @@ "tags": "标签", "specificities": "general", "requirements": "要求", - "exclude": "排除" + "exclude": "排除", + "leaderboard": "leaderboard" }, "map-types": { "accuracy": "精确度", @@ -888,6 +889,12 @@ "verified": "verified", "fullSpread": "full spread" }, + "map-leaderboard": { + "All": "All", + "Ranked": "Ranked", + "BeatLeader": "BeatLeader", + "ScoreSaber": "ScoreSaber" + }, "map-excludes": { "installed": "已安装" }, diff --git a/src/main/services/thrid-party/beat-saver/beat-saver-api.service.ts b/src/main/services/thrid-party/beat-saver/beat-saver-api.service.ts index 8ccb2eed..75b911d6 100644 --- a/src/main/services/thrid-party/beat-saver/beat-saver-api.service.ts +++ b/src/main/services/thrid-party/beat-saver/beat-saver-api.service.ts @@ -1,5 +1,5 @@ import { BsvMapDetail } from "shared/models/maps"; -import { BsvPlaylistPage, MapFilter, PlaylistSearchParams, PlaylistSearchResponse, SearchParams, SearchResponse } from "shared/models/maps/beat-saver.model"; +import { BsvPlaylistPage, MapFilter, MapLeaderboard, PlaylistSearchParams, PlaylistSearchResponse, SearchParams, SearchResponse } from "shared/models/maps/beat-saver.model"; import { RequestService } from "../../request.service"; import { CustomError } from "shared/models/exceptions/custom-error.class"; @@ -32,6 +32,10 @@ export class BeatSaverApiService { return new URLSearchParams(); } + if (!filter.leaderboard) { + filter.leaderboard = MapLeaderboard.All; + } + const enbledTagsString = filter.enabledTags ? Array.from(filter.enabledTags) : null; const excludedTagsString = filter.excludedTags ? Array.from(filter.excludedTags).map(tag => `!${tag}`) : null; diff --git a/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx b/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx index 07a4fc3e..1917de54 100644 --- a/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx +++ b/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx @@ -1,4 +1,4 @@ -import { BsvMapDetail, MapFilter, MapRequirement, MapSpecificity, MapStyle, MapTag, MapType } from "shared/models/maps/beat-saver.model"; +import { BsvMapDetail, MapFilter, MapLeaderboard, MapRequirement, MapSpecificity, MapStyle, MapTag, MapType } from "shared/models/maps/beat-saver.model"; import { motion } from "framer-motion"; import { MutableRefObject, useEffect, useRef, useState } from "react"; import { BsmCheckbox } from "../../shared/bsm-checkbox.component"; @@ -14,6 +14,8 @@ import { BsmLocalMap } from "shared/models/maps/bsm-local-map.interface"; import { SongDetails } from "shared/models/maps"; import formatDuration from "format-duration"; import { MapInfo } from "shared/models/maps/info/map-info.model"; +import { BsmSelect, BsmSelectOption } from "renderer/components/shared/bsm-select.component"; +import { useConstant } from "renderer/hooks/use-constant.hook"; export type Props = { className?: string; @@ -45,6 +47,13 @@ export function FilterPanel({ className, ref, playlist = false, filter, localDat const isTagActivated = (tag: MapTag): boolean => filter?.enabledTags?.has(tag) || filter?.excludedTags?.has(tag); const isTagExcluded = (tag: MapTag): boolean => filter?.excludedTags?.has(tag); + const leaderboardOptions: BsmSelectOption[] = useConstant( + () => Object.values(MapLeaderboard).map(key => ({ + text: `maps.map-leaderboard.${key}`, + value: key, + })) + ); + useEffect(() => { if (firstRun.current) { firstRun.current = false; @@ -137,10 +146,6 @@ export function FilterPanel({ className, ref, playlist = false, filter, localDat return t(`maps.map-styles.${style}`); }; - const translateMapSpecificity = (specificity: MapSpecificity): string => { - return t(`maps.map-specificities.${specificity}`); - }; - type BooleanKeys = { [k in keyof T]: T[k] extends boolean ? k : never }[keyof T]; const handleCheckbox = (key: BooleanKeys) => { @@ -153,6 +158,12 @@ export function FilterPanel({ className, ref, playlist = false, filter, localDat onChange(newFilter); }; + const handleLeaderboardChange = (value: MapLeaderboard) => { + const newFilter = { ...(filter ?? {}) }; + newFilter.leaderboard = value; + onChange(newFilter); + } + const handleApply = () => { onApply(filter); setHaveChanged(() => false); @@ -173,9 +184,17 @@ export function FilterPanel({ className, ref, playlist = false, filter, localDat {Object.values(MapSpecificity).map(specificity => (
handleCheckbox(specificity)}> handleCheckbox(specificity)} /> - {translateMapSpecificity(specificity)} + {t(`maps.map-specificities.${specificity}`)}
))} + +

{t("maps.map-filter-panel.leaderboard")}

+ +

{t("maps.map-filter-panel.requirements")}

{Object.values(MapRequirement).map(requirement => (
handleCheckbox(requirement)}> diff --git a/src/shared/models/maps/beat-saver.model.ts b/src/shared/models/maps/beat-saver.model.ts index d8d2c1d2..5f1f2322 100644 --- a/src/shared/models/maps/beat-saver.model.ts +++ b/src/shared/models/maps/beat-saver.model.ts @@ -209,11 +209,16 @@ export enum MapRequirement { export enum MapSpecificity { Automapper = "automapper", - Ranked = "ranked", Curated = "curated", Verified = "verified", FullSpread = "fullSpread" +} +export enum MapLeaderboard { + All = "All", + Ranked = "Ranked", + BeatLeader = "BeatLeader", + ScoreSaber = "ScoreSaber", } // [ Admin, Uploader, SageScore, None ] @@ -235,7 +240,7 @@ export interface MapFilter { from?: number; to?: number; fullSpread?: boolean; - ranked?: boolean; + leaderboard?: string; installed?: boolean; minDuration?: number; maxDuration?: number; From 56976487f2aeef851cf58596c33fa258185d0e7b Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 19 Oct 2024 00:42:28 +0800 Subject: [PATCH 02/10] [bugfix-623] add translations --- assets/jsons/translations/de.json | 6 +++--- assets/jsons/translations/es.json | 6 +++--- assets/jsons/translations/fr.json | 6 +++--- assets/jsons/translations/ja.json | 6 +++--- assets/jsons/translations/ru.json | 6 +++--- assets/jsons/translations/zh-tw.json | 6 +++--- assets/jsons/translations/zh.json | 6 +++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index f189ba08..f9b7cd5e 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -833,7 +833,7 @@ "specificities": "Allgemein", "requirements": "Anforderungen", "exclude": "Ausschließen", - "leaderboard": "leaderboard" + "leaderboard": "Rangliste" }, "map-types": { "accuracy": "Präzision", @@ -890,8 +890,8 @@ "fullSpread": "Full Spread" }, "map-leaderboard": { - "All": "All", - "Ranked": "Ranked", + "All": "Alle", + "Ranked": "Eingestuft", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index 908aa321..520bc53a 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -833,7 +833,7 @@ "specificities": "general", "requirements": "requisitos", "exclude": "excluir", - "leaderboard": "leaderboard" + "leaderboard": "tabla de clasificación" }, "map-types": { "accuracy": "precisión", @@ -890,8 +890,8 @@ "fullSpread": "panel completo" }, "map-leaderboard": { - "All": "All", - "Ranked": "Ranked", + "All": "Todos", + "Ranked": "Clasificado", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index 1f7b7103..bc266bf7 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -834,7 +834,7 @@ "specificities": "général", "requirements": "requis", "exclude": "exclure", - "leaderboard": "leaderboard" + "leaderboard": "tableau des leaders" }, "map-types": { "accuracy": "précision", @@ -891,8 +891,8 @@ "fullSpread": "panel complet" }, "map-leaderboard": { - "All": "All", - "Ranked": "Ranked", + "All": "Tout", + "Ranked": "Classé", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index b1209ad2..49d411c3 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -833,7 +833,7 @@ "specificities": "一般", "requirements": "要Mod", "exclude": "除外する", - "leaderboard": "leaderboard" + "leaderboard": "ランキング" }, "map-types": { "accuracy": "正確", @@ -890,8 +890,8 @@ "fullSpread": "フルスプレッド" }, "map-leaderboard": { - "All": "All", - "Ranked": "Ranked", + "All": "すべて", + "Ranked": "ランク付けされた", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index be1bcba6..f7971553 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -832,7 +832,7 @@ "specificities": "основное", "requirements": "требуемые моды", "exclude": "исключить", - "leaderboard": "leaderboard" + "leaderboard": "Таблица лидеров" }, "map-types": { "accuracy": "точность", @@ -889,8 +889,8 @@ "fullSpread": "полный набор" }, "map-leaderboard": { - "All": "All", - "Ranked": "Ranked", + "All": "все", + "Ranked": "ранжированный", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index 37aaeace..ff99b15d 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -833,7 +833,7 @@ "specificities": "general", "requirements": "要求", "exclude": "排除", - "leaderboard": "leaderboard" + "leaderboard": "排行榜" }, "map-types": { "accuracy": "精確度", @@ -890,8 +890,8 @@ "fullSpread": "Full spread" }, "map-leaderboard": { - "All": "All", - "Ranked": "Ranked", + "All": "所有", + "Ranked": "排名的", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index b7f2624d..d50d101d 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -833,7 +833,7 @@ "specificities": "general", "requirements": "要求", "exclude": "排除", - "leaderboard": "leaderboard" + "leaderboard": "排行榜" }, "map-types": { "accuracy": "精确度", @@ -890,8 +890,8 @@ "fullSpread": "full spread" }, "map-leaderboard": { - "All": "All", - "Ranked": "Ranked", + "All": "所有", + "Ranked": "排名的", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, From 825d07fac03417dc2fa9e2b3b7613fc8d271993f Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 19 Oct 2024 05:48:36 +0800 Subject: [PATCH 03/10] [bugfix-623] removed maps.map-specificities.ranked and used maps.map-leaderboard.Ranked --- assets/jsons/translations/de.json | 3 +-- assets/jsons/translations/en.json | 1 - assets/jsons/translations/es.json | 3 +-- assets/jsons/translations/fr.json | 3 +-- assets/jsons/translations/ja.json | 3 +-- assets/jsons/translations/ru.json | 3 +-- assets/jsons/translations/zh-tw.json | 1 - assets/jsons/translations/zh.json | 1 - .../maps-playlists-panel/maps/map-item.component.tsx | 4 ++-- 9 files changed, 7 insertions(+), 15 deletions(-) diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index f9b7cd5e..dbe46e6e 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -884,14 +884,13 @@ }, "map-specificities": { "automapper": "KI", - "ranked": "Ranked", "curated": "Curated", "verified": "Verifiziert", "fullSpread": "Full Spread" }, "map-leaderboard": { "All": "Alle", - "Ranked": "Eingestuft", + "Ranked": "Ranked", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index c9b679a5..49c45a93 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -891,7 +891,6 @@ }, "map-specificities": { "automapper": "AI", - "ranked": "ranked", "curated": "curated", "verified": "verified", "fullSpread": "full spread" diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index 520bc53a..4dbb5700 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -884,14 +884,13 @@ }, "map-specificities": { "automapper": "IA", - "ranked": "rankado", "curated": "recomendado", "verified": "verificado", "fullSpread": "panel completo" }, "map-leaderboard": { "All": "Todos", - "Ranked": "Clasificado", + "Ranked": "Rankado", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index bc266bf7..f564bbf3 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -885,14 +885,13 @@ }, "map-specificities": { "automapper": "IA", - "ranked": "classée", "curated": "recommandée", "verified": "vérifiée", "fullSpread": "panel complet" }, "map-leaderboard": { "All": "Tout", - "Ranked": "Classé", + "Ranked": "Classée", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index 49d411c3..fb960613 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -884,14 +884,13 @@ }, "map-specificities": { "automapper": "AI", - "ranked": "ランク入賞", "curated": "厳選済み", "verified": "認証済み", "fullSpread": "フルスプレッド" }, "map-leaderboard": { "All": "すべて", - "Ranked": "ランク付けされた", + "Ranked": "ランク入賞", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index f7971553..db3ffe34 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -883,14 +883,13 @@ }, "map-specificities": { "automapper": "ИИ", - "ranked": "с рейтингом", "curated": "оценённые куратором", "verified": "проверенные авторы", "fullSpread": "полный набор" }, "map-leaderboard": { "All": "все", - "Ranked": "ранжированный", + "Ranked": "с рейтингом", "BeatLeader": "BeatLeader", "ScoreSaber": "ScoreSaber" }, diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index ff99b15d..0f79f14f 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -884,7 +884,6 @@ }, "map-specificities": { "automapper": "AI", - "ranked": "Ranked", "curated": "Curated", "verified": "Verified", "fullSpread": "Full spread" diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index d50d101d..7a2f2849 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -884,7 +884,6 @@ }, "map-specificities": { "automapper": "AI", - "ranked": "ranked", "curated": "curated", "verified": "verified", "fullSpread": "full spread" diff --git a/src/renderer/components/maps-playlists-panel/maps/map-item.component.tsx b/src/renderer/components/maps-playlists-panel/maps/map-item.component.tsx index d5cecbf8..6f343b8b 100644 --- a/src/renderer/components/maps-playlists-panel/maps/map-item.component.tsx +++ b/src/renderer/components/maps-playlists-panel/maps/map-item.component.tsx @@ -324,12 +324,12 @@ export function MapItemComponent ({ hash, title, autor, songAutor, {ranked && (
- {t("maps.map-specificities.ranked")} + {t("maps.map-leaderboard.Ranked")}
)} {blRanked && (
- {t("maps.map-specificities.ranked")} + {t("maps.map-leaderboard.Ranked")}
)}
{renderDiffPreview()}
From 1aadf353cad8440e6400126154ea0f1aff2a8e99 Mon Sep 17 00:00:00 2001 From: silentrald Date: Mon, 21 Oct 2024 23:55:26 +0800 Subject: [PATCH 04/10] [bugfix-623] retain options and fixed local map filtering --- .../maps/filter-panel.component.tsx | 27 ++++++++++++++----- src/shared/models/maps/beat-saver.model.ts | 2 +- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx b/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx index 1917de54..7dc603a3 100644 --- a/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx +++ b/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx @@ -191,7 +191,7 @@ export function FilterPanel({ className, ref, playlist = false, filter, localDat

{t("maps.map-filter-panel.leaderboard")}

@@ -306,10 +306,23 @@ function isFitAutomapper(filter: MapFilter, automapper: boolean): boolean { return automapper; } +function isFitLeaderboard(filter: MapFilter, ranked: boolean, blRanked: boolean): boolean { + switch (filter?.leaderboard) { + case MapLeaderboard.All: + return true; -function isFitRanked(filter: MapFilter, ranked: boolean): boolean { - if (!filter?.ranked) { return true; } - return ranked; + case MapLeaderboard.Ranked: + return ranked || blRanked; + + case MapLeaderboard.ScoreSaber: + return ranked; + + case MapLeaderboard.BeatLeader: + return blRanked; + + default: // filter is undefined + return true; + } } function isFitCurated(filter: MapFilter, curated: boolean): boolean { @@ -341,7 +354,7 @@ export const isLocalMapFitMapFilter = ({filter, map, search}: { filter: MapFilte if (!isFitChroma(filter, map.songDetails?.difficulties.some(diff => !!diff.chroma))) { return false; } if (!isFitFullSpread(filter, map.songDetails?.difficulties.length)) { return false; } if (!isFitAutomapper(filter, map.songDetails?.automapper)){ return false; } - if (!isFitRanked(filter, map.songDetails?.ranked || map.songDetails?.blRanked)) { return false; } + if (!isFitLeaderboard(filter, map.songDetails?.ranked, map.songDetails?.blRanked)) { return false; } if (!isFitCurated(filter, map.songDetails?.curated)) { return false; } if (!isFitVerified(filter, map.songDetails?.uploader.verified)) { return false; } if (!isFitSearch(search, {songName: map.mapInfo?.songName, songAuthorName: map.mapInfo?.songAuthorName, levelMappers: map.mapInfo?.levelMappers})) { return false; } @@ -362,7 +375,7 @@ export const isBsvMapFitMapFilter = ({filter, map, search}: { filter: MapFilter, if (!isFitChroma(filter, map.versions?.at(0)?.diffs.some(diff => !!diff.chroma))) { return false; } if (!isFitFullSpread(filter, map.versions?.at(0)?.diffs.length)) { return false; } if (!isFitAutomapper(filter, map.automapper)){ return false; } - if (!isFitRanked(filter, map.ranked || map.blRanked)) { return false; } + if (!isFitLeaderboard(filter, map.ranked, map.blRanked)) { return false; } if (!isFitCurated(filter, !!map.curator)) { return false; } if (!isFitVerified(filter, !!map.curatedAt)) { return false; } if (!isFitSearch(search, {songName: map.name, songAuthorName: map.metadata.songAuthorName, levelMappers: [map.metadata.levelAuthorName]})) { return false; } @@ -382,7 +395,7 @@ export const isSongDetailsFitMapFilter = ({filter, map, search}: { filter: MapFi if (!isFitChroma(filter, map.difficulties.some(diff => !!diff.chroma))) { return false; } if (!isFitFullSpread(filter, map.difficulties.length)) { return false; } if (!isFitAutomapper(filter, map.automapper)){ return false; } - if (!isFitRanked(filter, map.ranked || map.blRanked)) { return false; } + if (!isFitLeaderboard(filter, map.ranked, map.blRanked)) { return false; } if (!isFitCurated(filter, map.curated)) { return false; } if (!isFitVerified(filter, map.uploader.verified)) { return false; } if (!isFitSearch(search, {songName: map.name, songAuthorName: map.uploader.name, levelMappers: [map.uploader.name]})) { return false; } diff --git a/src/shared/models/maps/beat-saver.model.ts b/src/shared/models/maps/beat-saver.model.ts index 5f1f2322..dc0ed9e7 100644 --- a/src/shared/models/maps/beat-saver.model.ts +++ b/src/shared/models/maps/beat-saver.model.ts @@ -240,7 +240,7 @@ export interface MapFilter { from?: number; to?: number; fullSpread?: boolean; - leaderboard?: string; + leaderboard?: MapLeaderboard; installed?: boolean; minDuration?: number; maxDuration?: number; From 03f8c7e152dae4488363f31016e285635cae1556 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Fri, 27 Dec 2024 20:28:03 +0100 Subject: [PATCH 05/10] add patreon --- assets/jsons/patreons.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assets/jsons/patreons.json b/assets/jsons/patreons.json index 48ff1fe1..e12c9a30 100644 --- a/assets/jsons/patreons.json +++ b/assets/jsons/patreons.json @@ -121,5 +121,8 @@ }, { "username": "Furiouspupa" + }, + { + "username": "Maximilian" } ] From e9594e79925db4ccbc1789df1cae137e17604975 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Fri, 27 Dec 2024 21:01:45 +0100 Subject: [PATCH 06/10] little style adjustment --- .../maps-playlists-panel/maps/filter-panel.component.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx b/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx index 7dc603a3..a86f1098 100644 --- a/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx +++ b/src/renderer/components/maps-playlists-panel/maps/filter-panel.component.tsx @@ -190,6 +190,7 @@ export function FilterPanel({ className, ref, playlist = false, filter, localDat

{t("maps.map-filter-panel.leaderboard")}

Date: Fri, 27 Dec 2024 21:19:44 +0100 Subject: [PATCH 07/10] small lint fixes --- src/main/helpers/proxy.helpers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/helpers/proxy.helpers.ts b/src/main/helpers/proxy.helpers.ts index 71f9a366..0a102b13 100644 --- a/src/main/helpers/proxy.helpers.ts +++ b/src/main/helpers/proxy.helpers.ts @@ -1,6 +1,6 @@ import log from 'electron-log'; import { RegDwordValue, RegSzValue } from "regedit-rs" -import { execOnOs } from "../helpers/env.helpers"; +import { execOnOs } from "./env.helpers"; import { bootstrap } from 'global-agent'; import { StaticConfigurationService } from "../services/static-configuration.service"; @@ -14,7 +14,7 @@ async function isProxyEnabled(): Promise{ if(!key.exists){ throw new Error("Key \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\" not exist"); } const registryValue = key.values.ProxyEnable as RegDwordValue; if(!registryValue){ throw new Error("Value \"ProxyEnable\" not exist"); } - return (1 === registryValue.value); + return registryValue.value === 1; } async function getProxyServer(): Promise{ From 18adf064f3847f7e1be3146349455aff9f2e54bc Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 5 Oct 2024 09:09:15 +0800 Subject: [PATCH 08/10] [ui] changed label to 'Download a version' in downloads page --- assets/jsons/translations/de.json | 2 +- assets/jsons/translations/en.json | 2 +- assets/jsons/translations/es.json | 2 +- assets/jsons/translations/fr.json | 2 +- assets/jsons/translations/ja.json | 2 +- assets/jsons/translations/ru.json | 2 +- assets/jsons/translations/zh-tw.json | 2 +- assets/jsons/translations/zh.json | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index a4eb81c7..4d780966 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -150,7 +150,7 @@ } }, "available-versions": { - "title": "Wähle eine Version", + "title": "Eine Version herunterladen", "steam-release": "Versionsseite", "dropdown": { "refresh": "Aktualisiere die Versionen", diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index 7919ac1c..7356483f 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -150,7 +150,7 @@ } }, "available-versions": { - "title": "Select a version", + "title": "Download a version", "steam-release": "Release page", "dropdown": { "refresh": "Refresh versions", diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index 04eb4532..2790779d 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -150,7 +150,7 @@ } }, "available-versions": { - "title": "Selecciona una versión", + "title": "Descargar una versión", "steam-release": "Anuncio en Steam", "dropdown": { "refresh": "Actualizar las versiones", diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index 38d7f6dc..dd98d791 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -150,7 +150,7 @@ } }, "available-versions": { - "title": "Choisis une version", + "title": "Télécharger une version", "steam-release": "Notes de version", "dropdown": { "refresh": "Actualiser les versions", diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index dbe7e9c6..bf786039 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -150,7 +150,7 @@ } }, "available-versions": { - "title": "バージョンを選択", + "title": "バージョンをダウンロード", "steam-release": "リリースページ", "dropdown": { "refresh": "バージョンの更新", diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index 7378fe8c..518d8758 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -150,7 +150,7 @@ } }, "available-versions": { - "title": "Выберите версию", + "title": "Скачать версию", "steam-release": "Список изменений", "dropdown": { "refresh": "Обновить версии", diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index ecab4dd4..72bc3c5d 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -150,7 +150,7 @@ } }, "available-versions": { - "title": "選擇版本", + "title": "下載一個版本", "steam-release": "發布頁面", "dropdown": { "refresh": "刷新版本", diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index 7394b8db..06e1e3d5 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -150,7 +150,7 @@ } }, "available-versions": { - "title": "选择版本", + "title": "下载一个版本", "steam-release": "发布页面", "dropdown": { "refresh": "刷新版本", From 0a64e71cf82e40e40a5a6f7179d044c469a3e444 Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 5 Oct 2024 09:53:03 +0800 Subject: [PATCH 09/10] [feat] defaultly open to the last version launched on startup --- .../services/bs-launcher/bs-launcher.service.ts | 5 +++++ src/main/services/static-configuration.service.ts | 1 + src/renderer/windows/App.tsx | 14 +++++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/services/bs-launcher/bs-launcher.service.ts b/src/main/services/bs-launcher/bs-launcher.service.ts index 96011b9b..94692ccd 100644 --- a/src/main/services/bs-launcher/bs-launcher.service.ts +++ b/src/main/services/bs-launcher/bs-launcher.service.ts @@ -21,6 +21,7 @@ import { OculusLauncherService } from "./oculus-launcher.service"; import { BSVersion } from "shared/bs-version.interface"; import { BsStore } from "../../../shared/models/bs-store.enum"; import { LaunchMod, LaunchMods } from "shared/models/bs-launch/launch-option.interface"; +import { StaticConfigurationService } from "../static-configuration.service"; export class BSLauncherService { private static instance: BSLauncherService; @@ -32,6 +33,7 @@ export class BSLauncherService { private readonly remoteVersion: BSVersionLibService; private readonly steamLauncher: SteamLauncherService; private readonly oculusLauncher: OculusLauncherService; + private readonly staticConfig: StaticConfigurationService; public static getInstance(): BSLauncherService { if (!BSLauncherService.instance) { @@ -48,6 +50,7 @@ export class BSLauncherService { this.remoteVersion = BSVersionLibService.getInstance(); this.steamLauncher = SteamLauncherService.getInstance(); this.oculusLauncher = OculusLauncherService.getInstance(); + this.staticConfig = StaticConfigurationService.getInstance(); this.bsmProtocolService.on("launch", link => { log.info("Launch from bsm protocol", link.toString()); @@ -73,6 +76,8 @@ export class BSLauncherService { return throwError(() => new Error("Unable to get launcher for the provided version")); } + this.staticConfig.set("last-version-launched", launchOptions.version); + return launcher.launch(launchOptions); } diff --git a/src/main/services/static-configuration.service.ts b/src/main/services/static-configuration.service.ts index 0a90c607..47e99245 100644 --- a/src/main/services/static-configuration.service.ts +++ b/src/main/services/static-configuration.service.ts @@ -89,6 +89,7 @@ export interface StaticConfigKeyValues { "disable-hadware-acceleration": boolean; "use-symlinks": boolean; "use-system-proxy": boolean; + "last-version-launched": BSVersion; // Linux Specific static configs "proton-folder": string; diff --git a/src/renderer/windows/App.tsx b/src/renderer/windows/App.tsx index 4982b93e..83f70588 100644 --- a/src/renderer/windows/App.tsx +++ b/src/renderer/windows/App.tsx @@ -23,6 +23,7 @@ import { ConfigurationService } from "renderer/services/configuration.service"; import { OsDiagnosticService } from "renderer/services/os-diagnostic.service"; import { useService } from "renderer/hooks/use-service.hook"; import { SetupService } from "renderer/services/setup.service"; +import { StaticConfigurationService } from "renderer/services/static-configuration.service"; export default function App() { @@ -34,6 +35,7 @@ export default function App() { const notification = useService(NotificationService); const config = useService(ConfigurationService); const setup = useService(SetupService); + const staticConfig = useService(StaticConfigurationService); const location = useLocation(); const navigate = useNavigate(); @@ -41,10 +43,20 @@ export default function App() { useEffect(() => { setup.check() .then(() => { + navigateToDefaultPage(); checkOneClicks(); - }) + }); }, []); + const navigateToDefaultPage = async () => { + const version = await staticConfig.get("last-version-launched"); + if (!version) { + return; + } + + navigate(`/bs-version/${version.BSVersion}`, { state: version }); + }; + const checkOneClicks = async () => { if (config.get("not-remind-oneclick") === true) { From 7af4c2ab4521e8accfeee07c29f9d171a82705c1 Mon Sep 17 00:00:00 2001 From: silentrald Date: Sat, 5 Oct 2024 12:43:09 +0800 Subject: [PATCH 10/10] [feat] handle edge cases on last version launched --- src/main/ipcs/static-configuration.ipcs.ts | 4 ++ src/main/services/bs-local-version.service.ts | 23 ++++++++ .../services/bs-version-manager.service.ts | 53 +++++++++++++++---- .../services/static-configuration.service.ts | 4 ++ src/renderer/windows/App.tsx | 7 +++ src/shared/models/ipc/ipc-routes.ts | 1 + 6 files changed, 83 insertions(+), 9 deletions(-) diff --git a/src/main/ipcs/static-configuration.ipcs.ts b/src/main/ipcs/static-configuration.ipcs.ts index d3dc7b93..43767db8 100644 --- a/src/main/ipcs/static-configuration.ipcs.ts +++ b/src/main/ipcs/static-configuration.ipcs.ts @@ -12,3 +12,7 @@ ipc.on("static-configuration.get", (args, reply) => { ipc.on("static-configuration.set", (args, reply) => { reply(from(staticConfig.set(args.key, args.value))); }); + +ipc.on("static-configuration.delete", (key, reply) => { + reply(of(staticConfig.delete(key))); +}); diff --git a/src/main/services/bs-local-version.service.ts b/src/main/services/bs-local-version.service.ts index dcdd4e15..a224015c 100644 --- a/src/main/services/bs-local-version.service.ts +++ b/src/main/services/bs-local-version.service.ts @@ -18,6 +18,7 @@ import { Observable, Subject, catchError, finalize, from, map, switchMap, throwE import { BsStore } from "../../shared/models/bs-store.enum"; import { CustomError } from "../../shared/models/exceptions/custom-error.class"; import crypto from "crypto"; +import { StaticConfigurationService } from "./static-configuration.service"; export class BSLocalVersionService { @@ -32,6 +33,7 @@ export class BSLocalVersionService { private readonly remoteVersionService: BSVersionLibService; private readonly configService: ConfigurationService; private readonly linker: FolderLinkerService; + private readonly staticConfig: StaticConfigurationService; private readonly _loadedVersions$: Subject; public static getInstance(): BSLocalVersionService { @@ -48,6 +50,7 @@ export class BSLocalVersionService { this.remoteVersionService = BSVersionLibService.getInstance(); this.configService = ConfigurationService.getInstance(); this.linker = FolderLinkerService.getInstance(); + this.staticConfig = StaticConfigurationService.getInstance(); this._loadedVersions$ = new Subject(); } @@ -171,6 +174,24 @@ export class BSLocalVersionService { this.setCustomVersions([...this.getCustomVersions() ?? [], version]); } + private updateLastVersionLaunched(version: BSVersion, editedVersion: BSVersion): void { + const lastVersion = this.staticConfig.get("last-version-launched"); + if (!lastVersion) { + return; + } + + if ( + version.BSVersion !== lastVersion.BSVersion + || version.name !== lastVersion.name + || version.steam !== lastVersion.steam + || version.oculus !== lastVersion.oculus + ) { + return; + } + + this.staticConfig.set("last-version-launched", editedVersion); + } + private getCustomVersions(): BSVersion[]{ return this.configService.get(this.CUSTOM_VERSIONS_KEY) || []; } @@ -317,6 +338,7 @@ export class BSLocalVersionService { if(oldPath === newPath){ this.deleteCustomVersion(version); this.addCustomVersion(editedVersion); + this.updateLastVersionLaunched(version, editedVersion); return editedVersion; } @@ -327,6 +349,7 @@ export class BSLocalVersionService { return rename(oldPath, newPath).then(() => { this.deleteCustomVersion(version); this.addCustomVersion(editedVersion); + this.updateLastVersionLaunched(version, editedVersion); return editedVersion; }).catch((err: Error) => { log.error("edit version error", err, version, name, color); diff --git a/src/renderer/services/bs-version-manager.service.ts b/src/renderer/services/bs-version-manager.service.ts index 696e7d85..6d92ffa0 100644 --- a/src/renderer/services/bs-version-manager.service.ts +++ b/src/renderer/services/bs-version-manager.service.ts @@ -1,5 +1,5 @@ import { BSVersion } from "shared/bs-version.interface"; -import { BehaviorSubject, Observable, Subscription, lastValueFrom, shareReplay, throwError } from "rxjs"; +import { BehaviorSubject, Observable, Subscription, lastValueFrom, map, share, shareReplay, throwError } from "rxjs"; import { IpcService } from "./ipc.service"; import { ModalExitCode, ModalService } from "./modale.service"; import { NotificationService } from "./notification.service"; @@ -19,6 +19,7 @@ export class BSVersionManagerService { private readonly progressBar: ProgressBarService; private readonly modals: ModalService; + private askInstalledVersionsObserver$: Observable | null = null; public readonly installedVersions$: BehaviorSubject = new BehaviorSubject([]); public readonly availableVersions$: BehaviorSubject = new BehaviorSubject([]); @@ -28,7 +29,9 @@ export class BSVersionManagerService { this.notification = NotificationService.getInstance(); this.progressBar = ProgressBarService.getInstance(); this.modals = ModalService.getInstance(); - this.askAvailableVersions().then(() => this.askInstalledVersions()); + + this.askAvailableVersions(); + this.askInstalledVersions(); } public static getInstance() { @@ -54,15 +57,47 @@ export class BSVersionManagerService { }); } - public askInstalledVersions(): Promise { - return lastValueFrom(this.ipcService.sendV2("bs-version.installed-versions")).then(res => { - this.setInstalledVersions(res); - return res; - }); + public async askInstalledVersions(): Promise { + if (this.askInstalledVersionsObserver$) { + return lastValueFrom(this.askInstalledVersionsObserver$); + } + + this.askInstalledVersionsObserver$ = this.ipcService + .sendV2("bs-version.installed-versions") + .pipe( + map(versions => { + let processed = BSVersionManagerService.sortVersions(versions); + processed = BSVersionManagerService.removeDuplicateVersions(processed); + return processed; + }), + share(), + ); + + return lastValueFrom(this.askInstalledVersionsObserver$) + .then(versions => { + this.setInstalledVersions(versions); + return versions; + }) + .finally(() => { + this.askInstalledVersionsObserver$ = null; + }); } - public isVersionInstalled(version: BSVersion): boolean { - return !!this.getInstalledVersions().find(v => v.BSVersion === version.BSVersion && v.steam === version.steam && v.oculus === version.oculus); + public async isVersionInstalled(version: BSVersion): Promise { + try { + const versions: BSVersion[] = this.askInstalledVersionsObserver$ + ? await lastValueFrom(this.askInstalledVersionsObserver$) + : this.getInstalledVersions(); + + return !!versions.find(v => + v.BSVersion === version.BSVersion + && v.name === version.name + && v.steam === version.steam + && v.oculus === version.oculus + ); + } catch (error) { + return false; + } } public async editVersion(version: BSVersion): Promise { diff --git a/src/renderer/services/static-configuration.service.ts b/src/renderer/services/static-configuration.service.ts index 69d177a9..5cc93487 100644 --- a/src/renderer/services/static-configuration.service.ts +++ b/src/renderer/services/static-configuration.service.ts @@ -27,4 +27,8 @@ export class StaticConfigurationService { return lastValueFrom(this.ipc.sendV2("static-configuration.set", { key, value })); } + public delete(key: K): Promise { + return lastValueFrom(this.ipc.sendV2("static-configuration.delete", key)); + } + } diff --git a/src/renderer/windows/App.tsx b/src/renderer/windows/App.tsx index 83f70588..e49e56e7 100644 --- a/src/renderer/windows/App.tsx +++ b/src/renderer/windows/App.tsx @@ -24,6 +24,7 @@ import { OsDiagnosticService } from "renderer/services/os-diagnostic.service"; import { useService } from "renderer/hooks/use-service.hook"; import { SetupService } from "renderer/services/setup.service"; import { StaticConfigurationService } from "renderer/services/static-configuration.service"; +import { BSVersionManagerService } from "renderer/services/bs-version-manager.service"; export default function App() { @@ -36,6 +37,7 @@ export default function App() { const config = useService(ConfigurationService); const setup = useService(SetupService); const staticConfig = useService(StaticConfigurationService); + const versionManager = useService(BSVersionManagerService); const location = useLocation(); const navigate = useNavigate(); @@ -54,6 +56,11 @@ export default function App() { return; } + if (!await versionManager.isVersionInstalled(version)) { + await staticConfig.delete("last-version-launched"); + return; + } + navigate(`/bs-version/${version.BSVersion}`, { state: version }); }; diff --git a/src/shared/models/ipc/ipc-routes.ts b/src/shared/models/ipc/ipc-routes.ts index 950c2495..ce87b62d 100644 --- a/src/shared/models/ipc/ipc-routes.ts +++ b/src/shared/models/ipc/ipc-routes.ts @@ -156,6 +156,7 @@ export interface IpcChannelMapping { /* ** static-configuration.ipcs ** */ "static-configuration.get": StaticConfigGetIpcRequestResponse; "static-configuration.set": StaticConfigSetIpcRequest; + "static-configuration.delete": { request: StaticConfigKeys; response: void }; /* ** linux.ipcs ** */ "linux.verify-proton-folder": { request: void, response: boolean };