mirror of
https://github.com/vrcx-team/VRCX.git
synced 2026-04-06 00:32:02 +02:00
Fix print cropping and Linux custom photo path
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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_"))
|
||||
|
||||
@@ -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
|
||||
|
||||
22
src/app.js
22
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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -469,8 +469,8 @@ export default class extends baseClass {
|
||||
template:
|
||||
'<div @click="confirm" class="avatar-info">' +
|
||||
'<span style="margin-right:5px">{{ avatarName }}</span>' +
|
||||
'<span style="margin-right:5px" :class="color">{{ avatarType }}</span>' +
|
||||
'<span style="color:#909399;font-family:monospace;font-size:12px;">{{ avatarTags }}</span>' +
|
||||
'<span v-if="avatarType" style="margin-right:5px" :class="color">{{ avatarType }}</span>' +
|
||||
'<span v-if="avatarTags" style="color:#909399;font-family:monospace;font-size:12px;">{{ avatarTags }}</span>' +
|
||||
'</div>',
|
||||
props: {
|
||||
imageurl: String,
|
||||
|
||||
@@ -89,6 +89,7 @@ export default {
|
||||
return false;
|
||||
}
|
||||
switch (instanceId) {
|
||||
case ':':
|
||||
case 'offline':
|
||||
case 'offline:offline':
|
||||
case 'private':
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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') }}
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user