mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-22 00:03:51 +02:00
Base64 notification images
This commit is contained in:
25
AppApi.cs
25
AppApi.cs
@@ -229,20 +229,15 @@ namespace VRCX
|
|||||||
return CpuMonitor.Instance.CpuUsage;
|
return CpuMonitor.Instance.CpuUsage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CacheImage(string Base64File)
|
public void DesktopNotification(string BoldText, string Text, string Image)
|
||||||
{
|
|
||||||
String Icon = Path.Combine(Program.AppDataDirectory, "cache\\toast");
|
|
||||||
File.WriteAllBytes(Icon, Convert.FromBase64String(Base64File));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DesktopNotification(string BoldText, string Text, bool Image)
|
|
||||||
{
|
{
|
||||||
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastImageAndText02);
|
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastImageAndText02);
|
||||||
XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
|
XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
|
||||||
String imagePath = Path.Combine(Program.BaseDirectory, "VRCX.ico");
|
String imagePath = Path.Combine(Program.BaseDirectory, "VRCX.ico");
|
||||||
if (Image)
|
if (!String.IsNullOrEmpty(Image))
|
||||||
{
|
{
|
||||||
imagePath = Path.Combine(Program.AppDataDirectory, "cache\\toast");
|
imagePath = Path.Combine(Program.AppDataDirectory, "cache\\toast");
|
||||||
|
File.WriteAllBytes(imagePath, Convert.FromBase64String(Image));
|
||||||
}
|
}
|
||||||
stringElements[0].AppendChild(toastXml.CreateTextNode(BoldText));
|
stringElements[0].AppendChild(toastXml.CreateTextNode(BoldText));
|
||||||
stringElements[1].AppendChild(toastXml.CreateTextNode(Text));
|
stringElements[1].AppendChild(toastXml.CreateTextNode(Text));
|
||||||
@@ -268,14 +263,20 @@ namespace VRCX
|
|||||||
public string sourceApp { get; set; }
|
public string sourceApp { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void XSNotification(string Title, string Content, int Timeout, bool Image)
|
public void XSNotification(string Title, string Content, int Timeout, string Image)
|
||||||
{
|
{
|
||||||
bool UseBase64Icon = true;
|
bool UseBase64Icon;
|
||||||
String Icon = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHaGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTA0LTA4VDE0OjU3OjAxKzEyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wNC0wOFQxNjozMzoxMCsxMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wNC0wOFQxNjozMzoxMCsxMjowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2YTY5MmQzYi03ZTJkLTNiNGUtYTMzZC1hN2MwOTNlOGU0OTkiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1NTE2MWIyMi1hYzgxLTY3NDYtODAyYi1kODIzYWFmN2RjYjciIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3ZjJjNTA2ZS02YTVhLWRhNGEtOTg5Mi02NDZiMzQ0MGQxZTgiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6NmJmOGE5MTgtY2QzZS03OTRjLTk3NzktMzM0YjYwZWJiNTYyPC9yZGY6bGk+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2YyYzUwNmUtNmE1YS1kYTRhLTk4OTItNjQ2YjM0NDBkMWU4IiBzdEV2dDp3aGVuPSIyMDIxLTA0LTA4VDE0OjU3OjAxKzEyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmJhM2ZjODI3LTM0ZjQtYjU0OC05ZGFiLTZhMTZlZmQzZjAxMSIgc3RFdnQ6d2hlbj0iMjAyMS0wNC0wOFQxNTowMTozMSsxMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo2YTY5MmQzYi03ZTJkLTNiNGUtYTMzZC1hN2MwOTNlOGU0OTkiIHN0RXZ0OndoZW49IjIwMjEtMDQtMDhUMTY6MzM6MTArMTI6MDAiIHN0RXZ0OnNv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";
|
string Icon;
|
||||||
if (Image)
|
if (!String.IsNullOrEmpty(Image))
|
||||||
{
|
{
|
||||||
UseBase64Icon = false;
|
UseBase64Icon = false;
|
||||||
|
Icon = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHaGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTA0LTA4VDE0OjU3OjAxKzEyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wNC0wOFQxNjozMzoxMCsxMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wNC0wOFQxNjozMzoxMCsxMjowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2YTY5MmQzYi03ZTJkLTNiNGUtYTMzZC1hN2MwOTNlOGU0OTkiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1NTE2MWIyMi1hYzgxLTY3NDYtODAyYi1kODIzYWFmN2RjYjciIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3ZjJjNTA2ZS02YTVhLWRhNGEtOTg5Mi02NDZiMzQ0MGQxZTgiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6NmJmOGE5MTgtY2QzZS03OTRjLTk3NzktMzM0YjYwZWJiNTYyPC9yZGY6bGk+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2YyYzUwNmUtNmE1YS1kYTRhLTk4OTItNjQ2YjM0NDBkMWU4IiBzdEV2dDp3aGVuPSIyMDIxLTA0LTA4VDE0OjU3OjAxKzEyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmJhM2ZjODI3LTM0ZjQtYjU0OC05ZGFiLTZhMTZlZmQzZjAxMSIgc3RFdnQ6d2hlbj0iMjAyMS0wNC0wOFQxNTowMTozMSsxMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo2YTY5MmQzYi03ZTJkLTNiNGUtYTMzZC1hN2MwOTNlOGU0OTkiIHN0RXZ0OndoZW49IjIwMjEtMDQtMDhUMTY6MzM6MTArMTI6MDAiIHN0RXZ0OnNv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";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UseBase64Icon = true;
|
||||||
Icon = Path.Combine(Program.AppDataDirectory, "cache\\toast");
|
Icon = Path.Combine(Program.AppDataDirectory, "cache\\toast");
|
||||||
|
File.WriteAllBytes(Icon, Convert.FromBase64String(Image));
|
||||||
}
|
}
|
||||||
|
|
||||||
IPAddress broadcastIP = IPAddress.Parse("127.0.0.1");
|
IPAddress broadcastIP = IPAddress.Parse("127.0.0.1");
|
||||||
|
|||||||
@@ -4305,7 +4305,10 @@ speechSynthesis.getVoices();
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (noty.type === 'Notification' || noty.type === 'LocationDestination') {
|
if (
|
||||||
|
noty.type === 'Notification' ||
|
||||||
|
noty.type === 'LocationDestination'
|
||||||
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// remove current user
|
// remove current user
|
||||||
@@ -4638,20 +4641,30 @@ speechSynthesis.getVoices();
|
|||||||
if (playNotificationTTS) {
|
if (playNotificationTTS) {
|
||||||
this.playNotyTTS(noty, message);
|
this.playNotyTTS(noty, message);
|
||||||
}
|
}
|
||||||
if (playOverlayNotification) {
|
if (playDesktopToast || playXSNotification || playOverlayNotification) {
|
||||||
this.notyGetImage(noty).then((imageUrl) => {
|
if (this.imageNotifications) {
|
||||||
this.displayOverlayNotification(noty, message, imageUrl);
|
this.notySaveImage(noty).then((image) => {
|
||||||
});
|
if (playXSNotification) {
|
||||||
}
|
this.displayXSNotification(noty, message, image);
|
||||||
if (playDesktopToast || playXSNotification) {
|
}
|
||||||
this.notySaveImage(noty).then((image) => {
|
if (playDesktopToast) {
|
||||||
|
this.displayDesktopToast(noty, message, image);
|
||||||
|
}
|
||||||
|
if (playOverlayNotification) {
|
||||||
|
this.displayOverlayNotification(noty, message, image);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
if (playXSNotification) {
|
if (playXSNotification) {
|
||||||
this.displayXSNotification(noty, message, image);
|
this.displayXSNotification(noty, message, '');
|
||||||
}
|
}
|
||||||
if (playDesktopToast) {
|
if (playDesktopToast) {
|
||||||
this.displayDesktopToast(noty, message, image);
|
this.displayDesktopToast(noty, message, '');
|
||||||
}
|
}
|
||||||
});
|
if (playOverlayNotification) {
|
||||||
|
this.displayOverlayNotification(noty, message, '');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -4702,8 +4715,9 @@ speechSynthesis.getVoices();
|
|||||||
|
|
||||||
$app.methods.notySaveImage = async function (noty) {
|
$app.methods.notySaveImage = async function (noty) {
|
||||||
var imageUrl = await this.notyGetImage(noty);
|
var imageUrl = await this.notyGetImage(noty);
|
||||||
|
var base64Image = '';
|
||||||
try {
|
try {
|
||||||
await fetch(imageUrl, {
|
base64Image = await fetch(imageUrl, {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
redirect: 'follow',
|
redirect: 'follow',
|
||||||
headers: {
|
headers: {
|
||||||
@@ -4718,24 +4732,18 @@ speechSynthesis.getVoices();
|
|||||||
for (var i = 0; i < length; i++) {
|
for (var i = 0; i < length; i++) {
|
||||||
binary += String.fromCharCode(bytes[i]);
|
binary += String.fromCharCode(bytes[i]);
|
||||||
}
|
}
|
||||||
var imageData = btoa(binary);
|
return btoa(binary);
|
||||||
AppApi.CacheImage(imageData);
|
|
||||||
});
|
});
|
||||||
return true;
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return base64Image;
|
||||||
};
|
};
|
||||||
|
|
||||||
$app.methods.displayOverlayNotification = function (
|
$app.methods.displayOverlayNotification = function (noty, message, image) {
|
||||||
noty,
|
|
||||||
message,
|
|
||||||
imageUrl
|
|
||||||
) {
|
|
||||||
AppApi.ExecuteVrOverlayFunction(
|
AppApi.ExecuteVrOverlayFunction(
|
||||||
'playNoty',
|
'playNoty',
|
||||||
JSON.stringify({noty, message, imageUrl})
|
JSON.stringify({noty, message, image})
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -6806,7 +6814,6 @@ speechSynthesis.getVoices();
|
|||||||
this.getAuth();
|
this.getAuth();
|
||||||
|
|
||||||
$app.updateSharedFeed(true);
|
$app.updateSharedFeed(true);
|
||||||
$app.notyInit = true;
|
|
||||||
|
|
||||||
if ($app.isGameRunning) {
|
if ($app.isGameRunning) {
|
||||||
$app.loadPlayerList();
|
$app.loadPlayerList();
|
||||||
@@ -7144,7 +7151,9 @@ speechSynthesis.getVoices();
|
|||||||
{
|
{
|
||||||
prop: 'type',
|
prop: 'type',
|
||||||
value: true,
|
value: true,
|
||||||
filterFn: (row) => row.type !== 'Notification' || row.type !== 'LocationDestination'
|
filterFn: (row) =>
|
||||||
|
row.type !== 'Notification' &&
|
||||||
|
row.type !== 'LocationDestination'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
tableProps: {
|
tableProps: {
|
||||||
@@ -8602,6 +8611,9 @@ speechSynthesis.getVoices();
|
|||||||
$app.data.xsNotifications = configRepository.getBool(
|
$app.data.xsNotifications = configRepository.getBool(
|
||||||
'VRCX_xsNotifications'
|
'VRCX_xsNotifications'
|
||||||
);
|
);
|
||||||
|
$app.data.imageNotifications = configRepository.getBool(
|
||||||
|
'VRCX_imageNotifications'
|
||||||
|
);
|
||||||
$app.data.desktopToast = configRepository.getString('VRCX_desktopToast');
|
$app.data.desktopToast = configRepository.getString('VRCX_desktopToast');
|
||||||
$app.data.minimalFeed = configRepository.getBool('VRCX_minimalFeed');
|
$app.data.minimalFeed = configRepository.getBool('VRCX_minimalFeed');
|
||||||
$app.data.displayVRCPlusIconsAsAvatar = configRepository.getBool(
|
$app.data.displayVRCPlusIconsAsAvatar = configRepository.getBool(
|
||||||
@@ -8640,7 +8652,7 @@ speechSynthesis.getVoices();
|
|||||||
'VRCX_autoUpdateVRCX'
|
'VRCX_autoUpdateVRCX'
|
||||||
);
|
);
|
||||||
$app.data.branch = configRepository.getString('VRCX_branch');
|
$app.data.branch = configRepository.getString('VRCX_branch');
|
||||||
var saveOpenVROption = function () {
|
$app.methods.saveOpenVROption = function () {
|
||||||
configRepository.setBool('openVR', this.openVR);
|
configRepository.setBool('openVR', this.openVR);
|
||||||
configRepository.setBool('openVRAlways', this.openVRAlways);
|
configRepository.setBool('openVRAlways', this.openVRAlways);
|
||||||
configRepository.setBool('VRCX_overlaybutton', this.overlaybutton);
|
configRepository.setBool('VRCX_overlaybutton', this.overlaybutton);
|
||||||
@@ -8658,6 +8670,10 @@ speechSynthesis.getVoices();
|
|||||||
);
|
);
|
||||||
configRepository.setBool('VRCX_overlayWrist', this.overlayWrist);
|
configRepository.setBool('VRCX_overlayWrist', this.overlayWrist);
|
||||||
configRepository.setBool('VRCX_xsNotifications', this.xsNotifications);
|
configRepository.setBool('VRCX_xsNotifications', this.xsNotifications);
|
||||||
|
configRepository.setBool(
|
||||||
|
'VRCX_imageNotifications',
|
||||||
|
this.imageNotifications
|
||||||
|
);
|
||||||
configRepository.setString('VRCX_desktopToast', this.desktopToast);
|
configRepository.setString('VRCX_desktopToast', this.desktopToast);
|
||||||
configRepository.setBool('VRCX_minimalFeed', this.minimalFeed);
|
configRepository.setBool('VRCX_minimalFeed', this.minimalFeed);
|
||||||
configRepository.setBool(
|
configRepository.setBool(
|
||||||
@@ -8693,7 +8709,7 @@ speechSynthesis.getVoices();
|
|||||||
this.updateVRConfigVars();
|
this.updateVRConfigVars();
|
||||||
};
|
};
|
||||||
$app.data.TTSvoices = speechSynthesis.getVoices();
|
$app.data.TTSvoices = speechSynthesis.getVoices();
|
||||||
var saveNotificationTTS = function () {
|
$app.methods.saveNotificationTTS = function () {
|
||||||
speechSynthesis.cancel();
|
speechSynthesis.cancel();
|
||||||
if (
|
if (
|
||||||
configRepository.getString('VRCX_notificationTTS') === 'Never' &&
|
configRepository.getString('VRCX_notificationTTS') === 'Never' &&
|
||||||
@@ -8707,25 +8723,6 @@ speechSynthesis.getVoices();
|
|||||||
);
|
);
|
||||||
this.updateVRConfigVars();
|
this.updateVRConfigVars();
|
||||||
};
|
};
|
||||||
$app.watch.openVR = saveOpenVROption;
|
|
||||||
$app.watch.openVRAlways = saveOpenVROption;
|
|
||||||
$app.watch.overlaybutton = saveOpenVROption;
|
|
||||||
$app.watch.hidePrivateFromFeed = saveOpenVROption;
|
|
||||||
$app.watch.hideDevicesFromFeed = saveOpenVROption;
|
|
||||||
$app.watch.overlayNotifications = saveOpenVROption;
|
|
||||||
$app.watch.overlayWrist = saveOpenVROption;
|
|
||||||
$app.watch.xsNotifications = saveOpenVROption;
|
|
||||||
$app.watch.desktopToast = saveOpenVROption;
|
|
||||||
$app.watch.minimalFeed = saveOpenVROption;
|
|
||||||
$app.watch.displayVRCPlusIconsAsAvatar = saveOpenVROption;
|
|
||||||
$app.watch.hideTooltips = saveOpenVROption;
|
|
||||||
$app.watch.worldAutoCacheInvite = saveOpenVROption;
|
|
||||||
$app.watch.worldAutoCacheGPS = saveOpenVROption;
|
|
||||||
$app.watch.worldAutoCacheInviteFilter = saveOpenVROption;
|
|
||||||
$app.watch.worldAutoCacheGPSFilter = saveOpenVROption;
|
|
||||||
$app.watch.autoSweepVRChatCache = saveOpenVROption;
|
|
||||||
$app.watch.vrBackgroundEnabled = saveOpenVROption;
|
|
||||||
$app.watch.notificationTTS = saveNotificationTTS;
|
|
||||||
$app.data.themeMode = configRepository.getString('VRCX_ThemeMode');
|
$app.data.themeMode = configRepository.getString('VRCX_ThemeMode');
|
||||||
if (!$app.data.themeMode) {
|
if (!$app.data.themeMode) {
|
||||||
$app.data.themeMode = 'system';
|
$app.data.themeMode = 'system';
|
||||||
@@ -9342,6 +9339,7 @@ speechSynthesis.getVoices();
|
|||||||
'VRCX_notificationTimeout',
|
'VRCX_notificationTimeout',
|
||||||
this.notificationTimeout
|
this.notificationTimeout
|
||||||
);
|
);
|
||||||
|
this.updateVRConfigVars();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -719,10 +719,10 @@ html
|
|||||||
el-radio-button(label="dark") Dark
|
el-radio-button(label="dark") Dark
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name VRCPlus Profile Icons
|
span.name VRCPlus Profile Icons
|
||||||
el-switch(v-model="displayVRCPlusIconsAsAvatar")
|
el-switch(v-model="displayVRCPlusIconsAsAvatar" @change="saveOpenVROption")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Disable Tooltips
|
span.name Disable Tooltips
|
||||||
el-switch(v-model="hideTooltips")
|
el-switch(v-model="hideTooltips" @change="saveOpenVROption")
|
||||||
div.options-container
|
div.options-container
|
||||||
span.header Side Panel
|
span.header Side Panel
|
||||||
br
|
br
|
||||||
@@ -805,61 +805,64 @@ html
|
|||||||
br
|
br
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Enable
|
span.name Enable
|
||||||
el-switch(v-model="openVR")
|
el-switch(v-model="openVR" @change="saveOpenVROption")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Force Run (Opens SteamVR)
|
span.name Force Run (Opens SteamVR)
|
||||||
el-switch(v-model="openVRAlways" :disabled="!openVR")
|
el-switch(v-model="openVRAlways" @change="saveOpenVROption" :disabled="!openVR")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Hide Private Worlds
|
span.name Hide Private Worlds
|
||||||
el-switch(v-model="hidePrivateFromFeed")
|
el-switch(v-model="hidePrivateFromFeed" @change="saveOpenVROption")
|
||||||
br
|
br
|
||||||
span.sub-header Wrist Feed
|
span.sub-header Wrist Feed
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Wrist Feed Overlay
|
span.name Wrist Feed Overlay
|
||||||
el-switch(v-model="overlayWrist" :disabled="!openVR")
|
el-switch(v-model="overlayWrist" @change="saveOpenVROption" :disabled="!openVR")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name(style="min-width:137px") Overlay Button
|
span.name(style="min-width:137px") Overlay Button
|
||||||
el-switch(v-model="overlaybutton" inactive-text="Grip" active-text="Menu" :disabled="!openVR || !overlayWrist")
|
el-switch(v-model="overlaybutton" @change="saveOpenVROption" inactive-text="Grip" active-text="Menu" :disabled="!openVR || !overlayWrist")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Background Color
|
span.name Background Color
|
||||||
el-switch(v-model="vrBackgroundEnabled" :disabled="!openVR || !overlayWrist")
|
el-switch(v-model="vrBackgroundEnabled" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Minimal Feed Icons
|
span.name Minimal Feed Icons
|
||||||
el-switch(v-model="minimalFeed" :disabled="!openVR || !overlayWrist")
|
el-switch(v-model="minimalFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Hide VR Devices
|
span.name Hide VR Devices
|
||||||
el-switch(v-model="hideDevicesFromFeed" :disabled="!openVR || !overlayWrist")
|
el-switch(v-model="hideDevicesFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
el-button(size="small" icon="el-icon-notebook-2" @click="showWristFeedFiltersDialog()" :disabled="!openVR || !overlayWrist") Wrist Feed Filters
|
el-button(size="small" icon="el-icon-notebook-2" @click="showWristFeedFiltersDialog" :disabled="!openVR || !overlayWrist") Wrist Feed Filters
|
||||||
br
|
br
|
||||||
span.sub-header Notifications
|
span.sub-header Notifications
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Overlay Notifications
|
span.name Overlay Notifications
|
||||||
el-switch(v-model="overlayNotifications" :disabled="!openVR")
|
el-switch(v-model="overlayNotifications" @change="saveOpenVROption" :disabled="!openVR")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
el-button(size="small" icon="el-icon-rank" @click="showNotificationPositionDialog()" :disabled="!overlayNotifications || !openVR") Notification Position
|
el-button(size="small" icon="el-icon-rank" @click="showNotificationPositionDialog" :disabled="!overlayNotifications || !openVR") Notification Position
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name XSOverlay Notifications
|
span.name XSOverlay Notifications
|
||||||
el-switch(v-model="xsNotifications")
|
el-switch(v-model="xsNotifications" @change="saveOpenVROption")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
el-button(size="small" icon="el-icon-time" @click="promptNotificationTimeout()" :disabled="(!overlayNotifications || !openVR) && !xsNotifications") Notification Timeout
|
span.name User images (slower)
|
||||||
|
el-switch(v-model="imageNotifications" @change="saveOpenVROption")
|
||||||
|
div.options-container-item
|
||||||
|
el-button(size="small" icon="el-icon-time" @click="promptNotificationTimeout" :disabled="(!overlayNotifications || !openVR) && !xsNotifications") Notification Timeout
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Desktop Notifications, When to display:
|
span.name Desktop Notifications, When to display:
|
||||||
br
|
br
|
||||||
el-radio-group(v-model="desktopToast" size="mini")
|
el-radio-group(v-model="desktopToast" @change="saveOpenVROption" size="mini")
|
||||||
el-radio-button(label="Never")
|
el-radio-button(label="Never")
|
||||||
el-radio-button(label="Inside VR")
|
el-radio-button(label="Inside VR")
|
||||||
el-radio-button(label="Game Closed")
|
el-radio-button(label="Game Closed")
|
||||||
el-radio-button(label="Game Running")
|
el-radio-button(label="Game Running")
|
||||||
el-radio-button(label="Always")
|
el-radio-button(label="Always")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
el-button(size="small" icon="el-icon-chat-square" @click="showNotyFeedFiltersDialog()") Notification Filters
|
el-button(size="small" icon="el-icon-chat-square" @click="showNotyFeedFiltersDialog") Notification Filters
|
||||||
br
|
br
|
||||||
span.sub-header Text-To-Speech Options
|
span.sub-header Text-To-Speech Options
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Notification TTS, When to play:
|
span.name Notification TTS, When to play:
|
||||||
br
|
br
|
||||||
el-radio-group(v-model="notificationTTS" size="mini")
|
el-radio-group(v-model="notificationTTS" @change="saveNotificationTTS" size="mini")
|
||||||
el-radio-button(label="Never")
|
el-radio-button(label="Never")
|
||||||
el-radio-button(label="Inside VR")
|
el-radio-button(label="Inside VR")
|
||||||
el-radio-button(label="Game Closed")
|
el-radio-button(label="Game Closed")
|
||||||
@@ -880,31 +883,31 @@ html
|
|||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Download on invite:
|
span.name Download on invite:
|
||||||
br
|
br
|
||||||
el-radio-group(v-model="worldAutoCacheInvite" size="mini")
|
el-radio-group(v-model="worldAutoCacheInvite" @change="saveOpenVROption" size="mini")
|
||||||
el-radio-button(label="Never")
|
el-radio-button(label="Never")
|
||||||
el-radio-button(label="Game Closed")
|
el-radio-button(label="Game Closed")
|
||||||
el-radio-button(label="Game Running")
|
el-radio-button(label="Game Running")
|
||||||
el-radio-button(label="Always")
|
el-radio-button(label="Always")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
el-switch(v-model="worldAutoCacheInviteFilter" inactive-text="VIP" active-text="Everyone" :disabled="worldAutoCacheInvite == 'Never'")
|
el-switch(v-model="worldAutoCacheInviteFilter" @change="saveOpenVROption" inactive-text="VIP" active-text="Everyone" :disabled="worldAutoCacheInvite === 'Never'")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name Download on GPS:
|
span.name Download on GPS:
|
||||||
br
|
br
|
||||||
el-radio-group(v-model="worldAutoCacheGPS" size="mini")
|
el-radio-group(v-model="worldAutoCacheGPS" @change="saveOpenVROption" size="mini")
|
||||||
el-radio-button(label="Never")
|
el-radio-button(label="Never")
|
||||||
el-radio-button(label="Game Closed")
|
el-radio-button(label="Game Closed")
|
||||||
el-radio-button(label="Game Running")
|
el-radio-button(label="Game Running")
|
||||||
el-radio-button(label="Always")
|
el-radio-button(label="Always")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
el-switch(v-model="worldAutoCacheGPSFilter" inactive-text="VIP" active-text="Everyone" :disabled="worldAutoCacheGPS == 'Never'")
|
el-switch(v-model="worldAutoCacheGPSFilter" @change="saveOpenVROption" inactive-text="VIP" active-text="Everyone" :disabled="worldAutoCacheGPS === 'Never'")
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
el-button-group
|
el-button-group
|
||||||
el-button(size="small" icon="el-icon-download" @click="showDownloadDialog()") Download History
|
el-button(size="small" icon="el-icon-download" @click="showDownloadDialog") Download History
|
||||||
br
|
br
|
||||||
span.sub-header Automatically Manage Cache When Closing VRChat
|
span.sub-header Automatically Manage Cache When Closing VRChat
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
span.name(style="min-width:300px") Auto delete old versions from cache
|
span.name(style="min-width:300px") Auto delete old versions from cache
|
||||||
el-switch(v-model="autoSweepVRChatCache")
|
el-switch(v-model="autoSweepVRChatCache" @change="saveOpenVROption")
|
||||||
div.options-container
|
div.options-container
|
||||||
span.header Application
|
span.header Application
|
||||||
div.options-container-item
|
div.options-container-item
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ class GameLogService {
|
|||||||
gameLog.worldName = args[1];
|
gameLog.worldName = args[1];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'location-destination':
|
||||||
|
gameLog.location = args[0];
|
||||||
|
break;
|
||||||
|
|
||||||
case 'player-joined':
|
case 'player-joined':
|
||||||
gameLog.userDisplayName = args[0];
|
gameLog.userDisplayName = args[0];
|
||||||
gameLog.userType = args[1];
|
gameLog.userType = args[1];
|
||||||
|
|||||||
@@ -318,11 +318,11 @@ speechSynthesis.getVoices();
|
|||||||
};
|
};
|
||||||
|
|
||||||
$app.methods.playNoty = function (json) {
|
$app.methods.playNoty = function (json) {
|
||||||
var {noty, message, imageUrl} = JSON.parse(json);
|
var {noty, message, image} = JSON.parse(json);
|
||||||
var text = '';
|
var text = '';
|
||||||
var img = '';
|
var img = '';
|
||||||
if (imageUrl) {
|
if (image) {
|
||||||
img = `<img class="noty-img" src="${imageUrl}"></img>`;
|
img = `<img class="noty-img" src="data:image/png;base64, ${image}"></img>`;
|
||||||
}
|
}
|
||||||
switch (noty.type) {
|
switch (noty.type) {
|
||||||
case 'OnPlayerJoined':
|
case 'OnPlayerJoined':
|
||||||
|
|||||||
Reference in New Issue
Block a user