From 36ff14b0e8fbfc6ca8d4db7f07c04e763d349e5e Mon Sep 17 00:00:00 2001 From: Natsumi Date: Mon, 13 Jun 2022 02:25:17 +1200 Subject: [PATCH] VRC quit fix --- AppApi.cs | 9 +++++++++ LogWatcher.cs | 20 +++++++++++++++++++- html/src/app.js | 23 +++++++++++++++++++++++ html/src/index.pug | 4 ++++ html/src/service/gamelog.js | 3 +++ 5 files changed, 58 insertions(+), 1 deletion(-) diff --git a/AppApi.cs b/AppApi.cs index c89cf5cb..707508c3 100644 --- a/AppApi.cs +++ b/AppApi.cs @@ -137,6 +137,15 @@ namespace VRCX }; } + public int QuitGame() + { + var processes = Process.GetProcessesByName("vrchat"); + if (processes.Length == 1) + processes[0].Kill(); + + return processes.Length; + } + public void StartGame(string arguments) { // try stream first diff --git a/LogWatcher.cs b/LogWatcher.cs index 27c07bb3..b3a9a0c0 100644 --- a/LogWatcher.cs +++ b/LogWatcher.cs @@ -235,7 +235,8 @@ namespace VRCX else { if (ParseLogShaderKeywordsLimit(fileInfo, logContext, line, offset) == true || - ParseLogSDK2VideoPlay(fileInfo, logContext, line, offset) == true) + ParseLogSDK2VideoPlay(fileInfo, logContext, line, offset) == true || + ParseApplicationQuit(fileInfo, logContext, line, offset) == true) { continue; } @@ -838,6 +839,23 @@ namespace VRCX return false; } + private bool ParseApplicationQuit(FileInfo fileInfo, LogContext logContext, string line, int offset) + { + // 2022.06.12 01:51:46 Log - VRCApplication: OnApplicationQuit at 1603.499 + + if (string.Compare(line, offset, "VRCApplication: OnApplicationQuit at ", 0, 37, StringComparison.Ordinal) != 0) + return false; + + AppendLog(new[] + { + fileInfo.Name, + ConvertLogTimeToISO8601(line), + "vrc-quit" + }); + + return true; + } + public string[][] Get() { Update(); diff --git a/html/src/app.js b/html/src/app.js index 3d50858d..3d83f98b 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -8255,6 +8255,27 @@ speechSynthesis.getVoices(); }; database.addGamelogEventToDatabase(entry); break; + case 'vrc-quit': + var bias = Date.parse(gameLog.dt) + 1000; + if ( + !this.vrcQuitFix || + !this.isGameRunning || + bias < Date.now() + ) { + return; + } + AppApi.QuitGame().then((processCount) => { + if (processCount > 1) { + console.log( + 'More than 1 process running, not killing VRC' + ); + } else if (processCount === 1) { + console.log('Killed VRC'); + } else { + console.log('Nothing to kill, no VRC process running'); + } + }); + break; } if (entry) { this.queueGameLogNoty(entry); @@ -11460,6 +11481,7 @@ speechSynthesis.getVoices(); $app.data.autoSweepVRChatCache = configRepository.getBool( 'VRCX_autoSweepVRChatCache' ); + $app.data.vrcQuitFix = configRepository.getBool('VRCX_vrcQuitFix'); $app.data.vrBackgroundEnabled = configRepository.getBool( 'VRCX_vrBackgroundEnabled' ); @@ -11531,6 +11553,7 @@ speechSynthesis.getVoices(); 'VRCX_autoSweepVRChatCache', this.autoSweepVRChatCache ); + configRepository.setBool('VRCX_vrcQuitFix', this.vrcQuitFix); configRepository.setBool( 'VRCX_vrBackgroundEnabled', this.vrBackgroundEnabled diff --git a/html/src/index.pug b/html/src/index.pug index 9db24742..1af71ddd 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -1188,6 +1188,10 @@ html span.name Force ISO date format el-switch(v-model="dtIsoFormat" @change="setDatetimeFormat") div.options-container + span.sub-header VRChat Quit Fix + div.options-container-item + span.name(style="min-width:300px") Kill VRChat after exiting game + el-switch(v-model="vrcQuitFix" @change="saveOpenVROption") span.sub-header Automatically Manage Cache When Closing VRChat div.options-container-item span.name(style="min-width:300px") Auto delete old versions from cache diff --git a/html/src/service/gamelog.js b/html/src/service/gamelog.js index c142c4dc..cf81385d 100644 --- a/html/src/service/gamelog.js +++ b/html/src/service/gamelog.js @@ -59,6 +59,9 @@ class GameLogService { gameLog.photonId = args[1]; break; + case 'vrc-quit': + break; + default: break; }