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); await print.SaveAsPngAsync(tempPath);
using var oldPngFile = new PNGFile(path); var oldPngFile = new PNGFile(path);
using var newPngFile = new PNGFile(tempPath); var newPngFile = new PNGFile(tempPath);
// Copy all iTXt chunks to new file // Copy all iTXt chunks to new file
var textChunks = oldPngFile.GetChunksOfType(PNGChunkTypeFilter.iTXt); var textChunks = oldPngFile.GetChunksOfType(PNGChunkTypeFilter.iTXt);
for (var i = 0; i < textChunks.Count; i++) for (var i = 0; i < textChunks.Count; i++)
{ {
newPngFile.WriteChunk(textChunks[i]); newPngFile.WriteChunk(textChunks[i]);
} }
oldPngFile.Dispose();
newPngFile.Dispose();
File.Move(tempPath, path, true); File.Move(tempPath, path, true);
return true; return true;
} }

View File

@@ -24,20 +24,8 @@ namespace VRCX
internal void Init() internal void Init()
{ {
var userDataDir = Path.Join(Program.AppDataDirectory, "userdata"); var userDataDir = Path.Join(Program.AppDataDirectory, "userdata");
// delete userdata if Cef version has been downgraded, fixes VRCX not opening after a downgrade // delete userdata if Cef version has been downgraded, fixes VRCX not opening after a downgrade
var currentVersion = Cef.ChromiumVersion; CheckCefVersion(userDataDir);
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);
var cefSettings = new CefSettings 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() internal void Exit()
{ {
Cef.Shutdown(); 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})`; state.lastLocationDetails.accessName = `${t('dialog.new_instance.access_type_friend')} #${L.instanceName} (${platform})`;
break; break;
case 'friends+': 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; break;
case 'group': case 'group':
state.lastLocationDetails.accessName = `${t('dialog.new_instance.access_type_group')} #${L.instanceName} (${platform})`; state.lastLocationDetails.accessName = `${t('dialog.new_instance.access_type_group')} #${L.instanceName} (${platform})`;