Skip to content

Commit

Permalink
Option to copy VRC images
Browse files Browse the repository at this point in the history
  • Loading branch information
Natsumi-sama committed Nov 21, 2023
1 parent 2febfab commit 29b5bed
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 35 deletions.
7 changes: 6 additions & 1 deletion Dotnet/AppApi/AppApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
Expand Down Expand Up @@ -453,7 +454,11 @@ public void CopyImageToClipboard(string path)
MainForm.Instance.BeginInvoke(new MethodInvoker(() =>
{
var image = Image.FromFile(path);
Clipboard.SetImage(image);
// Clipboard.SetImage(image);
var data = new DataObject();
data.SetData(DataFormats.Bitmap, image);
data.SetFileDropList(new StringCollection { path });
Clipboard.SetDataObject(data, true);
}));
}
}
Expand Down
5 changes: 3 additions & 2 deletions Dotnet/AppApi/Screenshot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ public partial class AppApi
/// <param name="metadataString">The metadata to add to the screenshot file.</param>
/// <param name="worldId">The ID of the world to associate with the screenshot.</param>
/// <param name="changeFilename">Whether or not to rename the screenshot file to include the world ID.</param>
public void AddScreenshotMetadata(string path, string metadataString, string worldId, bool changeFilename = false)
public string AddScreenshotMetadata(string path, string metadataString, string worldId, bool changeFilename = false)
{
var fileName = Path.GetFileNameWithoutExtension(path);
if (!File.Exists(path) || !path.EndsWith(".png") || !fileName.StartsWith("VRChat_"))
return;
return string.Empty;

if (changeFilename)
{
Expand All @@ -34,6 +34,7 @@ public void AddScreenshotMetadata(string path, string metadataString, string wor
}

ScreenshotHelper.WritePNGDescription(path, metadataString);
return path;
}

/// <summary>
Expand Down
77 changes: 47 additions & 30 deletions html/src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -10155,9 +10155,6 @@ speechSynthesis.getVoices();
database.addGamelogResourceLoadToDatabase(entry);
break;
case 'screenshot':
if (!this.screenshotHelper) {
break;
}
// var entry = {
// created_at: gameLog.dt,
// type: 'Event',
Expand All @@ -10167,33 +10164,8 @@ speechSynthesis.getVoices();
// )}`
// };
// database.addGamelogEventToDatabase(entry);
var location = API.parseLocation(this.lastLocation.location);
var metadata = {
application: 'VRCX',
version: 1,
author: {
id: API.currentUser.id,
displayName: API.currentUser.displayName
},
world: {
name: this.lastLocation.name,
id: location.worldId,
instanceId: this.lastLocation.location
},
players: []
};
for (var user of this.lastLocation.playerList.values()) {
metadata.players.push({
id: user.userId,
displayName: user.displayName
});
}
AppApi.AddScreenshotMetadata(
gameLog.screenshotPath,
JSON.stringify(metadata),
location.worldId,
this.screenshotHelperModifyFilename
);

this.processScreenshot(gameLog.screenshotPath);
break;
case 'api-request':
var bias = Date.parse(gameLog.dt) + 60 * 1000;
Expand Down Expand Up @@ -15127,6 +15099,11 @@ speechSynthesis.getVoices();
false
);

$app.data.screenshotHelperCopyToClipboard = await configRepository.getBool(
'VRCX_screenshotHelperCopyToClipboard',
false
);

$app.data.enableAppLauncher = await configRepository.getBool(
'VRCX_enableAppLauncher',
true
Expand Down Expand Up @@ -22723,6 +22700,46 @@ speechSynthesis.getVoices();
'VRCX_screenshotHelperModifyFilename',
this.screenshotHelperModifyFilename
);
await configRepository.setBool(
'VRCX_screenshotHelperCopyToClipboard',
this.screenshotHelperCopyToClipboard
);
};

$app.methods.processScreenshot = async function (path) {
var newPath = path;
if (this.screenshotHelper) {
var location = API.parseLocation(this.lastLocation.location);
var metadata = {
application: 'VRCX',
version: 1,
author: {
id: API.currentUser.id,
displayName: API.currentUser.displayName
},
world: {
name: this.lastLocation.name,
id: location.worldId,
instanceId: this.lastLocation.location
},
players: []
};
for (var user of this.lastLocation.playerList.values()) {
metadata.players.push({
id: user.userId,
displayName: user.displayName
});
}
newPath = await AppApi.AddScreenshotMetadata(
path,
JSON.stringify(metadata),
location.worldId,
this.screenshotHelperModifyFilename
);
}
if (this.screenshotHelperCopyToClipboard) {
await AppApi.CopyImageToClipboard(newPath);
}
};

$app.methods.getAndDisplayScreenshot = function (
Expand Down
3 changes: 2 additions & 1 deletion html/src/localization/en/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,8 @@
"description_tooltip": "Unfortunately, windows doesn't support viewing PNG text chunks(few things do) natively, but you can view it using a command-line tool like exiftool, a png chunk inspector, or a hex editor.",
"enable": "Enable",
"modify_filename": "Modify Filename",
"modify_filename_tooltip": "Will add the World ID to screenshot filename, in addition to file metadata."
"modify_filename_tooltip": "Will add the World ID to screenshot filename, in addition to file metadata.",
"copy_to_clipboard": "Copy to Clipboard"
},
"app_launcher": {
"header": "App Launcher",
Expand Down
5 changes: 4 additions & 1 deletion html/src/mixins/tabs/settings.pug
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,10 @@ mixin settingsTab()
span.name {{ $t('view.settings.advanced.advanced.screenshot_helper.modify_filename') }}
el-tooltip(placement="top" style="margin-left:5px" :content="$t('view.settings.advanced.advanced.screenshot_helper.modify_filename_tooltip')")
i.el-icon-info
el-switch(v-model="screenshotHelperModifyFilename" @change="saveScreenshotHelper")
el-switch(v-model="screenshotHelperModifyFilename" @change="saveScreenshotHelper" :disabled="!screenshotHelper")
div.options-container-item
span.name {{ $t('view.settings.advanced.advanced.screenshot_helper.copy_to_clipboard') }}
el-switch(v-model="screenshotHelperCopyToClipboard" @change="saveScreenshotHelper")
//- Advanced | YouTube API
div.options-container
span.header {{ $t('view.settings.advanced.advanced.youtube_api.header') }}
Expand Down

0 comments on commit 29b5bed

Please sign in to comment.