Fix friends++, saving prints, deleted userdata

This commit is contained in:
Natsumi
2025-08-05 12:54:27 +12:00
parent 7a4a66e111
commit bc39768ff6
3 changed files with 54 additions and 18 deletions

View File

@@ -199,17 +199,20 @@ namespace VRCX
await print.SaveAsPngAsync(tempPath);
using var oldPngFile = new PNGFile(path);
using var newPngFile = new PNGFile(tempPath);
var oldPngFile = new PNGFile(path);
var newPngFile = new PNGFile(tempPath);
// Copy all iTXt chunks to new file
var textChunks = oldPngFile.GetChunksOfType(PNGChunkTypeFilter.iTXt);
for (var i = 0; i < textChunks.Count; i++)
{
newPngFile.WriteChunk(textChunks[i]);
}
oldPngFile.Dispose();
newPngFile.Dispose();
File.Move(tempPath, path, true);
return true;
}

View File

@@ -24,20 +24,8 @@ namespace VRCX
internal void Init()
{
var userDataDir = Path.Join(Program.AppDataDirectory, "userdata");
// delete userdata if Cef version has been downgraded, fixes VRCX not opening after a downgrade
var currentVersion = Cef.ChromiumVersion;
if (File.Exists(_lastCefVersionPath))
{
var lastCefVersion = File.ReadAllText(_lastCefVersionPath).Trim();
if (string.Compare(lastCefVersion, currentVersion, StringComparison.Ordinal) > 0)
{
logger.Info("Cef downgrade detected, deleting userdata: {0} -> {1}", lastCefVersion, currentVersion);
Directory.Delete(userDataDir, true);
}
}
File.WriteAllBytes(_lastCefVersionPath, Encoding.UTF8.GetBytes(currentVersion));
logger.Info("Cef version: {0}", currentVersion);
CheckCefVersion(userDataDir);
var cefSettings = new CefSettings
{
@@ -125,6 +113,51 @@ namespace VRCX
}
}
private void CheckCefVersion(string userDataDir)
{
var currentVersion = Cef.ChromiumVersion;
if (File.Exists(_lastCefVersionPath))
{
var lastCefVersion = File.ReadAllText(_lastCefVersionPath).Trim();
var lastCefVersionParts = lastCefVersion.Split('.');
var currentVersionParts = currentVersion.Split('.');
if (lastCefVersionParts.Length != currentVersionParts.Length)
{
logger.Info("Cef version mismatch detected, deleting userdata: {0} -> {1}", lastCefVersion,
currentVersion);
DeleteUserData(userDataDir);
}
for (var i = 0; i < lastCefVersionParts.Length; i++)
{
if (int.TryParse(lastCefVersionParts[i], out var lastPart) &&
int.TryParse(currentVersionParts[i], out var currentPart) &&
lastPart > currentPart)
{
logger.Info("Cef downgrade detected, deleting userdata: {0} -> {1}", lastCefVersion,
currentVersion);
DeleteUserData(userDataDir);
break;
}
}
}
File.WriteAllBytes(_lastCefVersionPath, Encoding.UTF8.GetBytes(currentVersion));
logger.Info("Cef version: {0}", currentVersion);
}
private static void DeleteUserData(string userDataDir)
{
if (!Directory.Exists(userDataDir))
return;
try {
Directory.Delete(userDataDir, true);
} catch (Exception ex) {
logger.Error(ex, "Failed to delete userdata directory: {0}", userDataDir);
}
}
internal void Exit()
{
Cef.Shutdown();

View File

@@ -191,7 +191,7 @@ export const useDiscordPresenceSettingsStore = defineStore(
state.lastLocationDetails.accessName = `${t('dialog.new_instance.access_type_friend')} #${L.instanceName} (${platform})`;
break;
case 'friends+':
state.lastLocationDetails.accessName = `${t('dialog.new_instance.access_type_friend_plus')}+ #${L.instanceName} (${platform})`;
state.lastLocationDetails.accessName = `${t('dialog.new_instance.access_type_friend_plus')} #${L.instanceName} (${platform})`;
break;
case 'group':
state.lastLocationDetails.accessName = `${t('dialog.new_instance.access_type_group')} #${L.instanceName} (${platform})`;