diff --git a/Dotnet/AppApi/Common/ImageSaving.cs b/Dotnet/AppApi/Common/ImageSaving.cs index f710b94c..a1f6604a 100644 --- a/Dotnet/AppApi/Common/ImageSaving.cs +++ b/Dotnet/AppApi/Common/ImageSaving.cs @@ -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; } diff --git a/Dotnet/Cef/CefService.cs b/Dotnet/Cef/CefService.cs index 35094826..cc75a2b8 100644 --- a/Dotnet/Cef/CefService.cs +++ b/Dotnet/Cef/CefService.cs @@ -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(); diff --git a/src/stores/settings/discordPresence.js b/src/stores/settings/discordPresence.js index ddda81bd..4e59d986 100644 --- a/src/stores/settings/discordPresence.js +++ b/src/stores/settings/discordPresence.js @@ -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})`;