diff --git a/GlosSITarget/CommonHttpEndpoints.h b/GlosSITarget/CommonHttpEndpoints.h index 8c74834..c5231a3 100644 --- a/GlosSITarget/CommonHttpEndpoints.h +++ b/GlosSITarget/CommonHttpEndpoints.h @@ -31,6 +31,49 @@ inline void addEndpoints() res.set_content(util::steam::getSteamConfig().dump(4), "text/json"); }, "json"}); + + HttpServer::AddEndpoint({ + "/log", + HttpServer::Method::POST, + [](const httplib::Request& req, httplib::Response& res) { + struct LogEntry { + std::string level; + std::string message; + }; + auto entry = LogEntry{}; + try { + const nlohmann::json postbody = nlohmann::json::parse(req.body); + entry.level = postbody.at("level"); + entry.message = postbody.at("message"); + } + catch (std::exception& e) { + res.status = 401; + res.set_content(nlohmann::json{ + {"code", 401}, + {"name", "Bad Request"}, + {"message", e.what()}, + } + .dump(), + "text/json"); + } + if (entry.level == "info") { + spdlog::info("GlosSITweaks: {}", entry.message); + } + else if (entry.level == "warn") { + spdlog::warn("GlosSITweaks: {}", entry.message); + } + else if (entry.level == "error") { + spdlog::error("GlosSITweaks: {}", entry.message); + } + else if (entry.level == "debug") { + spdlog::debug("GlosSITweaks: {}", entry.message); + } + else { + spdlog::trace("GlosSITweaks: {}", entry.message); + } + }, + + }); }; diff --git a/SteamTweaks/.eslintrc.cjs b/SteamTweaks/.eslintrc.cjs index d87fc32..51e4c64 100644 --- a/SteamTweaks/.eslintrc.cjs +++ b/SteamTweaks/.eslintrc.cjs @@ -86,32 +86,32 @@ module.exports = { } ], '@typescript-eslint/no-use-before-define': ['error', { 'functions': false }], - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "default", - "format": ["camelCase", "PascalCase"] - }, - { - "selector": "variable", - "format": ["camelCase", "UPPER_CASE"] - }, - { - "selector": "parameter", - "format": ["camelCase"], - "leadingUnderscore": "allow" - }, - { - "selector": "memberLike", - "modifiers": ["private"], - "format": ["camelCase"], - "leadingUnderscore": "require" - }, - { - "selector": "typeLike", - "format": ["PascalCase"] - } - ], + // "@typescript-eslint/naming-convention": [ + // "error", + // { + // "selector": "default", + // "format": ["camelCase", "PascalCase"] + // }, + // { + // "selector": "variable", + // "format": ["camelCase", "UPPER_CASE"] + // }, + // { + // "selector": "parameter", + // "format": ["camelCase"], + // "leadingUnderscore": "allow" + // }, + // { + // "selector": "memberLike", + // "modifiers": ["private"], + // "format": ["camelCase"], + // "leadingUnderscore": "require" + // }, + // { + // "selector": "typeLike", + // "format": ["PascalCase"] + // } + // ], 'no-console': 'off', 'no-return-await': 'error', 'arrow-body-style': 'error', diff --git a/SteamTweaks/src/@types/SteamClient.d.ts b/SteamTweaks/src/@types/SteamClient.d.ts index a812952..880676a 100644 --- a/SteamTweaks/src/@types/SteamClient.d.ts +++ b/SteamTweaks/src/@types/SteamClient.d.ts @@ -1,7 +1,9 @@ export interface SteamClient { Settings: { - SetInGameOverlayShowFPSCorner: (value: 0|1|2|3|4) => void; - SetInGameOverlayShowFPSContrast: (value: boolean) => void; + // Current stable (As time of commit); Beta does not have this anymore... + SetInGameOverlayShowFPSCorner?: (value: 0|1|2|3|4) => void; + SetInGameOverlayShowFPSContrast?: (value: boolean) => void; + // TODO: find a way to change setting on beta (and soon stable...) }; UI: { GetUiMode: () => Promise; diff --git a/SteamTweaks/src/GlosSITweaks.ts b/SteamTweaks/src/GlosSITweaks.ts index dc86ca7..5d5bf21 100644 --- a/SteamTweaks/src/GlosSITweaks.ts +++ b/SteamTweaks/src/GlosSITweaks.ts @@ -27,6 +27,39 @@ class SteamTargetApi { }, 666); } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public log(level: string, ...args: any[]) { + void fetch('http://localhost:8756/log', { + method: 'POST', + body: JSON.stringify({ + level, + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + message: `${args}` + }) + }); + switch (level) { + case 'error': + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + console.error(...args); + break; + case 'warn': + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + console.warn(...args); + break; + case 'info': + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + console.info(...args); + break; + case 'debug': + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + console.debug(...args); + break; + default: + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + console.log(...args); + } + } + public async getGlosSIActive() { return fetchWithTimeout('http://localhost:8756/running', { timeout: 500 }) .then( diff --git a/SteamTweaks/src/Tweaks/GamepadUI/MinimizeSteamGamepadUI.ts b/SteamTweaks/src/Tweaks/GamepadUI/MinimizeSteamGamepadUI.ts index 31e0274..081525b 100644 --- a/SteamTweaks/src/Tweaks/GamepadUI/MinimizeSteamGamepadUI.ts +++ b/SteamTweaks/src/Tweaks/GamepadUI/MinimizeSteamGamepadUI.ts @@ -13,9 +13,9 @@ initTweak('MinimizeSteamGamepadUI', async () => { return true; } if (!isGamepadUI && minimizeGPUI) { - console.warn('MinimizeSteamGamepadUI is enabled but Steam is not in GamepadUI mode'); + GlosSIApi.SteamTarget.log('warn', 'MinimizeSteamGamepadUI is enabled but Steam is not in GamepadUI mode'); } return false; }).then((minimized: boolean) => { - console.log('MinimizeSteamGamepadUI installed; Minimized GamepadUI:', minimized); -}).catch((e) => console.error('MinimizeSteamGamepadUI failed to install', e)); + GlosSIApi.SteamTarget.log('debug', 'MinimizeSteamGamepadUI installed; Minimized GamepadUI:', minimized); +}).catch((e) =>GlosSIApi.SteamTarget.log('error', 'MinimizeSteamGamepadUI failed to install', e)); diff --git a/SteamTweaks/src/Tweaks/Overlay/SharedContext/HideFPSCounter.ts b/SteamTweaks/src/Tweaks/Overlay/SharedContext/HideFPSCounter.ts index 1b1b404..b2e1067 100644 --- a/SteamTweaks/src/Tweaks/Overlay/SharedContext/HideFPSCounter.ts +++ b/SteamTweaks/src/Tweaks/Overlay/SharedContext/HideFPSCounter.ts @@ -9,16 +9,25 @@ initTweak('HideFPSCounter', { ((await GlosSIApi.SteamTarget.getSteamSettings()).system as SteamConfig) .InGameOverlayShowFPSCorner ) as 0 | 1 | 2 | 3 | 4; - SteamClient.Settings.SetInGameOverlayShowFPSCorner(0); + if (!SteamClient.Settings.SetInGameOverlayShowFPSCorner) { + GlosSIApi.SteamTarget.log('warn', + 'HideFPSCounter: SteamClient.Settings.SetInGameOverlayShowFPSCorner is not available.' + +'Can\'t hide FPS Counter corner.' + ); + } + SteamClient.Settings.SetInGameOverlayShowFPSCorner?.(0); }, uninstall: () => { - console.log('uninstalling HideFPSCounter Tweak. Restoring FPS Counter corner: ', backup.originalFpsCorner); - SteamClient.Settings.SetInGameOverlayShowFPSCorner((backup.originalFpsCorner ?? 0) as 0 | 1 | 2 | 3 | 4); + if (!SteamClient.Settings.SetInGameOverlayShowFPSCorner) { + return; + } + GlosSIApi.SteamTarget.log('debug','uninstalling HideFPSCounter Tweak. Restoring FPS Counter corner: ', backup.originalFpsCorner); + SteamClient.Settings.SetInGameOverlayShowFPSCorner?.((backup.originalFpsCorner ?? 0) as 0 | 1 | 2 | 3 | 4); setTimeout(() => { // steam might not actually register the setting?! Try again like 10 seconds later... ¯\_(ツ)_/¯ - SteamClient.Settings.SetInGameOverlayShowFPSCorner((backup.originalFpsCorner ?? 0) as 0 | 1 | 2 | 3 | 4); + SteamClient.Settings.SetInGameOverlayShowFPSCorner?.((backup.originalFpsCorner ?? 0) as 0 | 1 | 2 | 3 | 4); }, 10 * 1000); } }).then(() => { - console.log('HideFPSCounter installed'); -}).catch((e) => console.error('HideFPSCounter failed to install', e)); + GlosSIApi.SteamTarget.log('debug', 'HideFPSCounter installed'); +}).catch((e) => GlosSIApi.SteamTarget.log('error', 'HideFPSCounter failed to install', e)); diff --git a/SteamTweaks/src/common/tweakApi.ts b/SteamTweaks/src/common/tweakApi.ts index cac7880..b3f7c55 100644 --- a/SteamTweaks/src/common/tweakApi.ts +++ b/SteamTweaks/src/common/tweakApi.ts @@ -9,12 +9,21 @@ export const initTweak = (name: string, tweakMain: (() => T)|{ if (typeof tweakMain === 'object') { window.GlosSITweaks[name] = { install: tweakMain.install, uninstall: () => { - tweakMain.uninstall(); + try { + tweakMain.uninstall(); + } catch (e) { + GlosSIApi.SteamTarget.log('error', e); + } delete window.GlosSITweaks[name]; } }; } else { window.GlosSITweaks[name] = { install: tweakMain }; } - return window.GlosSITweaks[name].install() as T; + try { + return window.GlosSITweaks[name].install() as T; + } catch (e) { + GlosSIApi.SteamTarget.log('error', e); + throw e; + } };