diff --git a/Dotnet/AppApi/Common/ImageSaving.cs b/Dotnet/AppApi/Common/ImageSaving.cs index bda9b442..ce3426ad 100644 --- a/Dotnet/AppApi/Common/ImageSaving.cs +++ b/Dotnet/AppApi/Common/ImageSaving.cs @@ -191,7 +191,8 @@ namespace VRCX var ms = new MemoryStream(bytes); var print = await Image.LoadAsync(ms); // validation step to ensure image is actually a print - if (print.Width != 2048 || print.Height != 1440) return false; + if (print.Width != 2048 || print.Height != 1440) + return false; var point = new Point(64, 69); var size = new Size(1920, 1080); @@ -199,14 +200,7 @@ namespace VRCX print.Mutate(x => x.Crop(rectangle)); await print.SaveAsPngAsync(tempPath); if (ScreenshotHelper.HasTXt(path)) - { - var success = ScreenshotHelper.CopyTXt(path, tempPath); - if (!success) - { - File.Delete(tempPath); - return false; - } - } + ScreenshotHelper.CopyTXt(path, tempPath); File.Move(tempPath, path, true); return true; } diff --git a/Dotnet/AppApi/Electron/Screenshot.cs b/Dotnet/AppApi/Electron/Screenshot.cs index a5087b54..2e81c426 100644 --- a/Dotnet/AppApi/Electron/Screenshot.cs +++ b/Dotnet/AppApi/Electron/Screenshot.cs @@ -14,9 +14,16 @@ namespace VRCX { public override string AddScreenshotMetadata(string path, string metadataString, string worldId, bool changeFilename = false) { - var winePrefix = Path.Join(_vrcPrefixPath, "drive_c"); - var winePath = path.Substring(3).Replace("\\", "/"); - path = Path.Join(winePrefix, winePath); + if (path.Length >= 3 && path[1] == ':' && + (path[2] == '\\' || path[2] == '/')) + { + var driveLetter = path[0].ToString().ToLower(); + var winePrefix = Path.Join(_vrcPrefixPath, $"dosdevices/{driveLetter}:"); + var winePath = path[3..]; // remove C:\ + path = Path.Join(winePrefix, winePath); + } + + path = path.Replace("\\", "/"); var fileName = Path.GetFileNameWithoutExtension(path); if (!File.Exists(path) || !path.EndsWith(".png") || !fileName.StartsWith("VRChat_")) diff --git a/Linux/README.md b/Linux/README.md index ccfaed6e..4b470a77 100644 --- a/Linux/README.md +++ b/Linux/README.md @@ -1,5 +1,7 @@ ### Download and run AppImage from [Releases](https://github.com/vrcx-team/VRCX/releases) +If you're using Fedora, you may need to reboot after installing .NET for [DOTNET_ROOT](https://src.fedoraproject.org/rpms/dotnet9.0/blob/rawhide/f/dotnet.sh.in#_3) environment variable to take affect. + --- ### Legacy Wine guide diff --git a/src/app.js b/src/app.js index 0d24ea5b..5935cea4 100644 --- a/src/app.js +++ b/src/app.js @@ -10745,12 +10745,14 @@ console.log(`isLinux: ${LINUX}`); this.currentInstanceWorld.instance = ref; } else { var L = $utils.parseLocation(instanceId); - API.getInstance({ - worldId: L.worldId, - instanceId: L.instanceId - }).then((args) => { - this.currentInstanceWorld.instance = args.ref; - }); + if (L.isRealInstance) { + API.getInstance({ + worldId: L.worldId, + instanceId: L.instanceId + }).then((args) => { + this.currentInstanceWorld.instance = args.ref; + }); + } } } }; @@ -17767,7 +17769,7 @@ console.log(`isLinux: ${LINUX}`); $app.methods.refreshInstancePlayerCount = function (instance) { var L = $utils.parseLocation(instance); - if (L.worldId && L.instanceId) { + if (L.isRealInstance) { API.getInstance({ worldId: L.worldId, instanceId: L.instanceId @@ -18611,7 +18613,9 @@ console.log(`isLinux: ${LINUX}`); console.log(`Print saved to file: ${monthFolder}\\${fileName}`); if (this.cropInstancePrints) { - await AppApi.CropPrintImage(filePath); + if (!await AppApi.CropPrintImage(filePath)) { + console.error('Failed to crop print image'); + } } } @@ -22318,7 +22322,7 @@ console.log(`isLinux: ${LINUX}`); } if (!API.queuedInstances.has(instanceId)) { var L = $utils.parseLocation(instanceId); - if (L.worldId && L.instanceId) { + if (L.isRealInstance) { API.getInstance({ worldId: L.worldId, instanceId: L.instanceId diff --git a/src/classes/currentUser.js b/src/classes/currentUser.js index ba270560..c1a23b2c 100644 --- a/src/classes/currentUser.js +++ b/src/classes/currentUser.js @@ -96,9 +96,12 @@ export default class extends baseClass { if (!$app.isGameRunning && json.presence) { if ($utils.isRealInstance(json.presence.world)) { location = `${json.presence.world}:${json.presence.instance}`; - travelingToLocation = `${json.presence.travelingToWorld}:${json.presence.travelingToInstance}`; } else { location = json.presence.world; + } + if ($utils.isRealInstance(json.presence.travelingToWorld)) { + travelingToLocation = `${json.presence.travelingToWorld}:${json.presence.travelingToInstance}`; + } else { travelingToLocation = json.presence.travelingToWorld; } instanceId = json.presence.instance; diff --git a/src/classes/uiComponents.js b/src/classes/uiComponents.js index 24903cbf..ddeb240f 100644 --- a/src/classes/uiComponents.js +++ b/src/classes/uiComponents.js @@ -469,8 +469,8 @@ export default class extends baseClass { template: '
' + '{{ avatarName }}' + - '{{ avatarType }}' + - '{{ avatarTags }}' + + '{{ avatarType }}' + + '{{ avatarTags }}' + '
', props: { imageurl: String, diff --git a/src/classes/utils.js b/src/classes/utils.js index 8316ba3d..991442c4 100644 --- a/src/classes/utils.js +++ b/src/classes/utils.js @@ -89,6 +89,7 @@ export default { return false; } switch (instanceId) { + case ':': case 'offline': case 'offline:offline': case 'private': diff --git a/src/localization/en/en.json b/src/localization/en/en.json index c52eeb4c..cdbd4626 100644 --- a/src/localization/en/en.json +++ b/src/localization/en/en.json @@ -742,6 +742,7 @@ "copy_id": "Copy ID", "copy_url": "Copy URL", "copy_display_name": "Copy DisplayName", + "vrcplus_hides_avatar": "When a VRC+ profile photo is set, avatar info is hidden. This also hides avatar changes in the feed", "accuracy_notice": "Info from local database may not be accurate", "instance_full": "full", "instance_closed": "closed", diff --git a/src/mixins/dialogs/userDialog.pug b/src/mixins/dialogs/userDialog.pug index b9e7073f..82331af0 100644 --- a/src/mixins/dialogs/userDialog.pug +++ b/src/mixins/dialogs/userDialog.pug @@ -441,7 +441,13 @@ mixin userDialog avatar-info( :imageurl='userDialog.ref.currentAvatarImageUrl' :userid='userDialog.id' - :avatartags='userDialog.ref.currentAvatarTags') + :avatartags='userDialog.ref.currentAvatarTags' + style='display: inline-block') + el-tooltip( + v-if='userDialog.ref.profilePicOverride && !userDialog.ref.currentAvatarImageUrl && !hideTooltips' + placement='top' + :content='$t("dialog.user.info.vrcplus_hides_avatar")') + i.el-icon-warning .x-friend-item(style='width: 100%; cursor: default') .detail span.name(style='margin-bottom: 5px') {{ $t('dialog.user.info.represented_group') }} diff --git a/src/mixins/friendsListSidebar.pug b/src/mixins/friendsListSidebar.pug index e52e1ef6..cf93be29 100644 --- a/src/mixins/friendsListSidebar.pug +++ b/src/mixins/friendsListSidebar.pug @@ -172,7 +172,7 @@ mixin friendsListSidebar span(v-if='friend.isVIP' style='margin-left: 2px') ⭐ span.extra(v-if='friend.pendingOffline') #[i.el-icon-warning-outline] {{ $t('side_panel.pending_offline') }} template(v-else) - template(v-if='friend.ref.travelingToLocation') + template(v-if='friend.ref.location === "traveling"') i.el-icon.el-icon-loading( style='display: inline-block; margin-right: 5px') timer.extra(