diff --git a/Dotnet/AppApi/AppApi.cs b/Dotnet/AppApi/AppApi.cs
index b9d41267..85e157a4 100644
--- a/Dotnet/AppApi/AppApi.cs
+++ b/Dotnet/AppApi/AppApi.cs
@@ -6,6 +6,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Specialized;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
@@ -453,7 +454,11 @@ namespace VRCX
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);
}));
}
}
diff --git a/Dotnet/AppApi/Screenshot.cs b/Dotnet/AppApi/Screenshot.cs
index b4d89bf1..727da982 100644
--- a/Dotnet/AppApi/Screenshot.cs
+++ b/Dotnet/AppApi/Screenshot.cs
@@ -19,11 +19,11 @@ namespace VRCX
/// The metadata to add to the screenshot file.
/// The ID of the world to associate with the screenshot.
/// Whether or not to rename the screenshot file to include the world ID.
- 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)
{
@@ -34,6 +34,7 @@ namespace VRCX
}
ScreenshotHelper.WritePNGDescription(path, metadataString);
+ return path;
}
///
diff --git a/html/src/app.js b/html/src/app.js
index ac320b9e..a2683852 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -10155,9 +10155,6 @@ speechSynthesis.getVoices();
database.addGamelogResourceLoadToDatabase(entry);
break;
case 'screenshot':
- if (!this.screenshotHelper) {
- break;
- }
// var entry = {
// created_at: gameLog.dt,
// type: 'Event',
@@ -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;
@@ -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
@@ -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 (
diff --git a/html/src/localization/en/en.json b/html/src/localization/en/en.json
index 52aff269..fa78862f 100644
--- a/html/src/localization/en/en.json
+++ b/html/src/localization/en/en.json
@@ -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",
diff --git a/html/src/mixins/tabs/settings.pug b/html/src/mixins/tabs/settings.pug
index 08896037..1dee6990 100644
--- a/html/src/mixins/tabs/settings.pug
+++ b/html/src/mixins/tabs/settings.pug
@@ -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') }}