mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-11 19:03:51 +02:00
* chore: Change vscode workspace settings to work with omnisharp * refactor(.NET): Use connection string builder to init sqlite database * docs(.NET): Add method documentation to most things that matter * docs(.NET): Add more docs I forgot to commit apparently * feat: Add PoC world database structure ^& http listener * fix: Send a response if VRCX isn't initialized rather than hanging * feat: Initialize world db schema on startup * feat: Allow worlds to store data in db through logfile * use existing current location for worldDB * Add tooltips * chore: Make it so vscode can format C# files without prettier * refactor: Add sqlite-net to (eventually) replace sqlite impl * refactor: Make use of sqlite-net for world database * docs: Add todo for fixing some random exception * refactor: Remove now-unused SQLiteWorld * refactor: Fix DB init query and change table structure again * refactor: Add WorldDataRequest, add attributes for camelcase json keys * Support current user location from API in addition to gameLog * Change current location check for worldDB * feat: Take store requests in JSON, identify worlds by GUID on store. * refactor: Remove unused worldId param from connection key generator * docs: Add more documentation to the methods for the world database * fix: Hey wait that's not a primary key * feat: Add a 10MB data cap for worlds shared across all of their rows. * fix: Don't calculate size of world date twice when inserting * refactor: Discard the guid variable since we only check for validity * docs: Add docs/comments for new data cap functionality * feat: Implement /getbulk API endpoint * fix: Correct WorldDB init query typo * fix: Update data entries properly instead of using 'OR REPLACE' * refactor: Move endpoint processing to separate methods * refactor: Add another check for error 503, remove old code * feat: Add debug capability to /vrcx/getbulk * fix: Correct the usage of getUser in actuallyGetCurrentLocation * feat: Add store errors, implement external reading, stop 404ing * docs: Add docs for new world db funcs * refactor: Change world db server listen port to 22500 * fix: Use getUser correctly, dumb dumb * fix: This error set shouldn't be here * feat: Future-proof api endpoints. Add /status endpoint --------- Co-authored-by: Natsumi <cmcooper123@hotmail.com>
125 lines
4.3 KiB
C#
125 lines
4.3 KiB
C#
// Copyright(c) 2019-2022 pypy, Natsumi and individual contributors.
|
|
// All rights reserved.
|
|
//
|
|
// This work is licensed under the terms of the MIT license.
|
|
// For a copy, see <https://opensource.org/licenses/MIT>.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace VRCX
|
|
{
|
|
public static class Program
|
|
{
|
|
public static string BaseDirectory { get; private set; }
|
|
public static string AppDataDirectory { get; private set; }
|
|
public static string ConfigLocation;
|
|
public static string Version { get; private set; }
|
|
public static bool LaunchDebug;
|
|
public static bool GPUFix;
|
|
static Program()
|
|
{
|
|
BaseDirectory = AppDomain.CurrentDomain.BaseDirectory;
|
|
AppDataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VRCX");
|
|
ConfigLocation = Path.Combine(Program.AppDataDirectory, "VRCX.sqlite3");
|
|
|
|
if (!Directory.Exists(AppDataDirectory))
|
|
{
|
|
Directory.CreateDirectory(AppDataDirectory);
|
|
|
|
// Migrate config to AppData
|
|
if (File.Exists(Path.Combine(BaseDirectory, "VRCX.json")))
|
|
{
|
|
File.Move(Path.Combine(BaseDirectory, "VRCX.json"), Path.Combine(AppDataDirectory, "VRCX.json"));
|
|
File.Copy(Path.Combine(AppDataDirectory, "VRCX.json"), Path.Combine(AppDataDirectory, "VRCX-backup.json"));
|
|
}
|
|
if (File.Exists(Path.Combine(BaseDirectory, "VRCX.sqlite3")))
|
|
{
|
|
File.Move(Path.Combine(BaseDirectory, "VRCX.sqlite3"), Path.Combine(AppDataDirectory, "VRCX.sqlite3"));
|
|
File.Copy(Path.Combine(AppDataDirectory, "VRCX.sqlite3"), Path.Combine(AppDataDirectory, "VRCX-backup.sqlite3"));
|
|
}
|
|
}
|
|
}
|
|
|
|
[STAThread]
|
|
private static void Main()
|
|
{
|
|
try
|
|
{
|
|
Run();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageBox.Show(e.ToString(), "PLEASE REPORT IN https://vrcx.pypy.moe/discord", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
Environment.Exit(0);
|
|
}
|
|
}
|
|
|
|
private static void GetVersion()
|
|
{
|
|
var buildName = "VRCX";
|
|
try
|
|
{
|
|
Version = $"{buildName} {File.ReadAllText(Path.Combine(BaseDirectory, "Version"))}";
|
|
}
|
|
catch (Exception)
|
|
{
|
|
Version = $"{buildName} Build";
|
|
}
|
|
}
|
|
|
|
private static void Run()
|
|
{
|
|
Update.Check();
|
|
StartupArgs.ArgsCheck();
|
|
GetVersion();
|
|
|
|
Application.EnableVisualStyles();
|
|
Application.SetCompatibleTextRenderingDefault(false);
|
|
|
|
// I'll re-do this whole function eventually I swear
|
|
var worldDBServer = new WorldDBManager("http://127.0.0.1:22500/");
|
|
Task.Run(worldDBServer.Start);
|
|
|
|
ProcessMonitor.Instance.Init();
|
|
SQLiteLegacy.Instance.Init();
|
|
VRCXStorage.Load();
|
|
LoadFromConfig();
|
|
CpuMonitor.Instance.Init();
|
|
Discord.Instance.Init();
|
|
WebApi.Instance.Init();
|
|
LogWatcher.Instance.Init();
|
|
AutoAppLaunchManager.Instance.Init();
|
|
|
|
CefService.Instance.Init();
|
|
IPCServer.Instance.Init();
|
|
VRCXVR.Instance.Init();
|
|
Application.Run(new MainForm());
|
|
WebApi.Instance.SaveCookies();
|
|
VRCXVR.Instance.Exit();
|
|
CefService.Instance.Exit();
|
|
|
|
AutoAppLaunchManager.Instance.Exit();
|
|
LogWatcher.Instance.Exit();
|
|
WebApi.Instance.Exit();
|
|
worldDBServer.Stop();
|
|
|
|
Discord.Instance.Exit();
|
|
CpuMonitor.Instance.Exit();
|
|
VRCXStorage.Save();
|
|
SQLiteLegacy.Instance.Exit();
|
|
ProcessMonitor.Instance.Exit();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sets GPUFix to true if it is not already set and the VRCX_GPUFix key in the database is true.
|
|
/// </summary>
|
|
private static void LoadFromConfig()
|
|
{
|
|
if (!GPUFix)
|
|
GPUFix = VRCXStorage.Instance.Get("VRCX_GPUFix") == "true";
|
|
}
|
|
}
|
|
} |