mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-16 21:33:51 +02:00
* Update Vue devtools
* upgrade vue pinia element-plus vue-i18n, add vite
* fix: i18n
* global components
* change v-deep
* upgrade vue-lazyload
* data table
* update enlint and safe-dialog
* package.json and vite.config.js
* el-icon
* el-message
* vue 2 -> vue3 migration changes
* $pinia
* dialog
* el-popover slot
* lint
* chore
* slot
* scss
* remote state access
* misc
* jsconfig
* el-button size mini -> small
* :model-value
* ElMessageBox
* datatable
* remove v-lazyload
* template #dropdown
* mini -> small
* css
* byebye hideTooltips
* use sass-embedded
* Update SQLite, remove unneeded libraries
* Fix shift remove local avatar favorites
* Electron arm64
* arm64 support
* bye pug
* f-word vite hah
* misc
* remove safe dialog component
* Add self invite to launch dialog
* Fix errors
* Icons 1
* improve localfavorite loading performance
* improve favorites world item performance
* dialog visibility changes for Element Plus
* clear element plus error
* import performance
* revert App.vue hah
* hah
* Revert "Add self invite to launch dialog"
This reverts commit 4801cfad58.
* Toggle self invite/open in-game
* Self invite on launch dialog
* el-button icon
* el-icon
* fix user dialog tab switching logic
* fix PlayerList
* Formatting changes
* More icons
* Fix friend log table
* loading margin
* fix markdown
* fix world dialog tab switching issue
* Fixes and formatting
* fix: global i18n.t export
* fix favorites world tab not working
* Create instance, displayName
* Remove group members sort by userId
* Fix loading dialog tabs on swtich
* Star
* charts console.warn
* wip: fix charts
* wip: fix charts
* wip: charts composables
* fix favorite item tooltip warning
* Fixes and formatting
* Clean up image dialogs
* Remove unused method
* Fix platform/size border
* Fix platform/size border
* $vr
* fix friendExportDialogVisible binding
* ElMessageBox and Settings
* Login formatting
* Rename VR overlay query
* Fix image popover and userdialog badges
* Formatting
* Big buttons
* Fixes, update Cef
* Fix gameLog table nav buttons jumping around while using nav buttons
* Fix z-index
* vr overlay
* vite input add theme
* defineAsyncComponent
* ISO 639-1
* fix i18n
* clean t
* Formatting, fix calendar, rotate arrows
* Show user status when user is offline
* Fix VR overlay
* fix theme and clean up
* split InstanceActivity
* tweak
* Fix VR overlay formatting
* fix scss var
* AppDebug hahahaha
* Years
* remove reactive
* improve perf
* state hah…
* fix user rendering poblems when user object is not yet loaded
* improve perf
* Update avatar/world image uploader, licenses, remove previous images dialog (old images are now deleted)
* improve perf 1
* Suppress stray errors
* fix traveling location display issue
* Fix empty instance creator
* improve friend list refresh performance
* fix main charts
* fix chart
* Fix darkmode
* Fix avatar dialog tags
---------
Co-authored-by: pa <maplenagisa@gmail.com>
129 lines
4.3 KiB
C#
129 lines
4.3 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using CefSharp;
|
|
using Microsoft.Win32;
|
|
|
|
namespace VRCX
|
|
{
|
|
public partial class AppApiCef
|
|
{
|
|
public override void OnProcessStateChanged(MonitoredProcess monitoredProcess)
|
|
{
|
|
if (!monitoredProcess.HasName("VRChat") && !monitoredProcess.HasName("vrserver"))
|
|
return;
|
|
|
|
CheckGameRunning();
|
|
}
|
|
|
|
public override void CheckGameRunning()
|
|
{
|
|
var isGameRunning = false;
|
|
var isSteamVRRunning = false;
|
|
var isHmdAfk = false;
|
|
|
|
if (ProcessMonitor.Instance.IsProcessRunning("VRChat"))
|
|
isGameRunning = true;
|
|
|
|
if (ProcessMonitor.Instance.IsProcessRunning("vrserver"))
|
|
isSteamVRRunning = true;
|
|
|
|
if (Program.VRCXVRInstance != null)
|
|
isHmdAfk = Program.VRCXVRInstance.IsHmdAfk;
|
|
|
|
// TODO: fix this throwing an exception for being called before the browser is ready. somehow it gets past the checks
|
|
if (MainForm.Instance?.Browser != null && !MainForm.Instance.Browser.IsLoading && MainForm.Instance.Browser.CanExecuteJavascriptInMainFrame)
|
|
MainForm.Instance.Browser.ExecuteScriptAsync("$pinia.game.updateIsGameRunning", isGameRunning, isSteamVRRunning, isHmdAfk);
|
|
}
|
|
|
|
public override bool IsGameRunning()
|
|
{
|
|
// unused
|
|
return ProcessMonitor.Instance.IsProcessRunning("VRChat");
|
|
}
|
|
|
|
public override bool IsSteamVRRunning()
|
|
{
|
|
// unused
|
|
return ProcessMonitor.Instance.IsProcessRunning("vrserver");
|
|
}
|
|
|
|
public override int QuitGame()
|
|
{
|
|
var processes = Process.GetProcessesByName("vrchat");
|
|
if (processes.Length == 1)
|
|
processes[0].Kill();
|
|
|
|
return processes.Length;
|
|
}
|
|
|
|
public override bool StartGame(string arguments)
|
|
{
|
|
// try stream first
|
|
try
|
|
{
|
|
using var key = Registry.ClassesRoot.OpenSubKey(@"steam\shell\open\command");
|
|
// "C:\Program Files (x86)\Steam\steam.exe" -- "%1"
|
|
var match = Regex.Match(key.GetValue(string.Empty) as string, "^\"(.+?)\\\\steam.exe\"");
|
|
if (match.Success)
|
|
{
|
|
var path = match.Groups[1].Value;
|
|
// var _arguments = Uri.EscapeDataString(arguments);
|
|
Process.Start(new ProcessStartInfo
|
|
{
|
|
WorkingDirectory = path,
|
|
FileName = $"{path}\\steam.exe",
|
|
UseShellExecute = false,
|
|
Arguments = $"-applaunch 438100 {arguments}"
|
|
})
|
|
?.Close();
|
|
return true;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
logger.Warn("Failed to start VRChat from Steam");
|
|
}
|
|
|
|
// fallback
|
|
try
|
|
{
|
|
using var key = Registry.ClassesRoot.OpenSubKey(@"VRChat\shell\open\command");
|
|
// "C:\Program Files (x86)\Steam\steamapps\common\VRChat\launch.exe" "%1" %*
|
|
var match = Regex.Match(key.GetValue(string.Empty) as string, "(?!\")(.+?\\\\VRChat.*)(!?\\\\launch.exe\")");
|
|
if (match.Success)
|
|
{
|
|
var path = match.Groups[1].Value;
|
|
return StartGameFromPath(path, arguments);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
logger.Warn("Failed to start VRChat from registry");
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public override bool StartGameFromPath(string path, string arguments)
|
|
{
|
|
if (!path.EndsWith(".exe"))
|
|
path = Path.Join(path, "launch.exe");
|
|
|
|
if (!path.EndsWith("launch.exe") || !File.Exists(path))
|
|
return false;
|
|
|
|
Process.Start(new ProcessStartInfo
|
|
{
|
|
WorkingDirectory = Path.GetDirectoryName(path),
|
|
FileName = path,
|
|
UseShellExecute = false,
|
|
Arguments = arguments
|
|
})?.Close();
|
|
return true;
|
|
}
|
|
}
|
|
} |