diff --git a/Dotnet/Cef/CefCustomMenuHandler.cs b/Dotnet/Cef/CefCustomMenuHandler.cs
index 8bdca21f..ed409229 100644
--- a/Dotnet/Cef/CefCustomMenuHandler.cs
+++ b/Dotnet/Cef/CefCustomMenuHandler.cs
@@ -11,11 +11,11 @@ namespace VRCX
{
public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
{
- if (!Program.LaunchDebug)
- // remove default right click when not in debug mode
- if (!parameters.TypeFlags.HasFlag(ContextMenuType.Selection) &&
- !parameters.TypeFlags.HasFlag(ContextMenuType.Editable))
- model.Clear();
+ // remove default right click when not in debug mode
+ if (!Program.LaunchDebug &&
+ !parameters.TypeFlags.HasFlag(ContextMenuType.Selection) &&
+ !parameters.TypeFlags.HasFlag(ContextMenuType.Editable))
+ model.Clear();
}
public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
diff --git a/src/app.js b/src/app.js
index ed8112d7..7c84eb0f 100644
--- a/src/app.js
+++ b/src/app.js
@@ -946,6 +946,7 @@ console.log(`isLinux: ${LINUX}`);
id: '',
name: '',
description: '',
+ defaultContentSettings: {},
authorId: '',
authorName: '',
capacity: 0,
@@ -1027,6 +1028,7 @@ console.log(`isLinux: ${LINUX}`);
world: {},
users: [], // only present when you're the owner
clientNumber: '',
+ contentSettings: {},
photonRegion: '',
region: '',
canRequestInvite: false,
@@ -1043,6 +1045,7 @@ console.log(`isLinux: ${LINUX}`);
ageGate: null,
// VRCX
$fetchedAt: '',
+ $disabledContentSettings: [],
...json
};
this.cachedInstances.set(ref.id, ref);
@@ -1063,6 +1066,16 @@ console.log(`isLinux: ${LINUX}`);
if (!json.$fetchedAt) {
ref.$fetchedAt = new Date().toJSON();
}
+ if (json.contentSettings && Object.keys(json.contentSettings).length) {
+ for (var setting in $app.instanceContentSettings) {
+ if (json.contentSettings[setting]) {
+ continue;
+ }
+ ref.$disabledContentSettings.push(
+ $app.instanceContentSettings[setting]
+ );
+ }
+ }
return ref;
};
@@ -1202,7 +1215,7 @@ console.log(`isLinux: ${LINUX}`);
};
API.refetchBrokenFriends = async function (friends) {
- // attempt to broken data from bulk friend fetch
+ // attempt to fix broken data from bulk friend fetch
for (var i = 0; i < friends.length; i++) {
var friend = friends[i];
try {
@@ -9264,7 +9277,6 @@ console.log(`isLinux: ${LINUX}`);
isIos: false,
avatarScalingDisabled: false,
focusViewDisabled: false,
- stickersDisabled: false,
inCache: false,
cacheSize: '',
bundleSizes: [],
@@ -9288,7 +9300,6 @@ console.log(`isLinux: ${LINUX}`);
isIos: false,
avatarScalingDisabled: false,
focusViewDisabled: false,
- stickersDisabled: false,
inCache: false,
cacheSize: '',
bundleSizes: [],
@@ -9304,7 +9315,6 @@ console.log(`isLinux: ${LINUX}`);
isIos: false,
avatarScalingDisabled: false,
focusViewDisabled: false,
- stickersDisabled: false,
inCache: false,
cacheSize: '',
bundleSizes: [],
@@ -9330,8 +9340,6 @@ console.log(`isLinux: ${LINUX}`);
);
this.currentInstanceWorld.focusViewDisabled =
args.ref?.tags.includes('feature_focus_view_disabled');
- this.currentInstanceWorld.stickersDisabled =
- args.ref?.tags.includes('feature_stickers_disabled');
this.checkVRChatCache(args.ref).then((cacheInfo) => {
if (cacheInfo.Item1 > 0) {
this.currentInstanceWorld.inCache = true;
@@ -10067,7 +10075,6 @@ console.log(`isLinux: ${LINUX}`);
isFavorite: false,
avatarScalingDisabled: false,
focusViewDisabled: false,
- stickersDisabled: false,
rooms: [],
treeData: [],
bundleSizes: [],
@@ -10100,7 +10107,6 @@ console.log(`isLinux: ${LINUX}`);
'feature_avatar_scaling_disabled'
);
D.focusViewDisabled = ref.tags?.includes('feature_focus_view_disabled');
- D.stickersDisabled = ref.tags?.includes('feature_stickers_disabled');
$app.applyWorldDialogInstances();
for (var room of D.rooms) {
if ($utils.isRealInstance(room.tag)) {
@@ -10240,7 +10246,6 @@ console.log(`isLinux: ${LINUX}`);
D.isFavorite = false;
D.avatarScalingDisabled = false;
D.focusViewDisabled = false;
- D.stickersDisabled = false;
D.isPC = false;
D.isQuest = false;
D.isIos = false;
@@ -10303,9 +10308,6 @@ console.log(`isLinux: ${LINUX}`);
D.focusViewDisabled = args.ref?.tags.includes(
'feature_focus_view_disabled'
);
- D.stickersDisabled = args.ref?.tags.includes(
- 'feature_stickers_disabled'
- );
D.isPC = isPC;
D.isQuest = isQuest;
D.isIos = isIos;
@@ -11740,6 +11742,14 @@ console.log(`isLinux: ${LINUX}`);
// #endregion
// #region | App: New Instance Dialog
+ $app.data.instanceContentSettings = [
+ 'emoji',
+ 'stickers',
+ 'pedestals',
+ 'prints',
+ 'drones'
+ ];
+
$app.data.newInstanceDialog = {
visible: false,
loading: false,
@@ -11776,7 +11786,14 @@ console.log(`isLinux: ${LINUX}`);
lastSelectedGroupId: '',
selectedGroupRoles: [],
roleIds: [],
- groupRef: {}
+ groupRef: {},
+ contentSettings: $app.data.instanceContentSettings,
+ selectedContentSettings: JSON.parse(
+ await configRepository.getString(
+ 'instanceDialogSelectedContentSettings',
+ JSON.stringify($app.data.instanceContentSettings)
+ )
+ )
};
API.$on('LOGOUT', function () {
@@ -11926,12 +11943,18 @@ console.log(`isLinux: ${LINUX}`);
} else if (D.region === 'Japan') {
region = 'jp';
}
+ var contentSettings = {};
+ for (var setting of D.contentSettings) {
+ contentSettings[setting] =
+ D.selectedContentSettings.includes(setting);
+ }
var params = {
type,
canRequestInvite,
worldId: D.worldId,
ownerId: API.currentUser.id,
- region
+ region,
+ contentSettings
};
if (type === 'group') {
params.groupAccessType = D.groupAccessType;
@@ -12043,6 +12066,10 @@ console.log(`isLinux: ${LINUX}`);
'instanceDialogAgeGate',
this.newInstanceDialog.ageGate
);
+ await configRepository.setString(
+ 'instanceDialogSelectedContentSettings',
+ JSON.stringify(this.newInstanceDialog.selectedContentSettings)
+ );
};
$app.methods.showNewInstanceDialog = async function (tag) {
@@ -12181,12 +12208,16 @@ console.log(`isLinux: ${LINUX}`);
debugAllowed: false,
avatarScalingDisabled: false,
focusViewDisabled: false,
- stickersDisabled: false,
contentHorror: false,
contentGore: false,
contentViolence: false,
contentAdult: false,
- contentSex: false
+ contentSex: false,
+ emoji: true,
+ stickers: true,
+ pedestals: true,
+ prints: true,
+ drones: true
};
$app.methods.showSetWorldTagsDialog = function () {
@@ -12198,7 +12229,6 @@ console.log(`isLinux: ${LINUX}`);
D.debugAllowed = false;
D.avatarScalingDisabled = false;
D.focusViewDisabled = false;
- D.stickersDisabled = false;
D.contentHorror = false;
D.contentGore = false;
D.contentViolence = false;
@@ -12240,8 +12270,20 @@ console.log(`isLinux: ${LINUX}`);
case 'feature_focus_view_disabled':
D.focusViewDisabled = true;
break;
+ case 'feature_emoji_disabled':
+ D.emoji = false;
+ break;
case 'feature_stickers_disabled':
- D.stickersDisabled = true;
+ D.stickers = false;
+ break;
+ case 'feature_pedestals_disabled':
+ D.pedestals = false;
+ break;
+ case 'feature_prints_disabled':
+ D.prints = false;
+ break;
+ case 'feature_drones_disabled':
+ D.drones = false;
break;
}
});
@@ -12298,9 +12340,21 @@ console.log(`isLinux: ${LINUX}`);
if (D.focusViewDisabled) {
tags.unshift('feature_focus_view_disabled');
}
- if (D.stickersDisabled) {
+ if (!D.emoji) {
+ tags.unshift('feature_emoji_disabled');
+ }
+ if (!D.stickers) {
tags.unshift('feature_stickers_disabled');
}
+ if (!D.pedestals) {
+ tags.unshift('feature_pedestals_disabled');
+ }
+ if (!D.prints) {
+ tags.unshift('feature_prints_disabled');
+ }
+ if (!D.drones) {
+ tags.unshift('feature_drones_disabled');
+ }
worldRequest
.saveWorld({
id: this.worldDialog.id,
diff --git a/src/classes/uiComponents.js b/src/classes/uiComponents.js
index 44461524..89aba5db 100644
--- a/src/classes/uiComponents.js
+++ b/src/classes/uiComponents.js
@@ -210,6 +210,7 @@ export default class extends baseClass {
'Android: {{ platforms.android }}' +
'{{ $t("dialog.user.info.instance_game_version") }} {{ gameServerVersion }}' +
'{{ $t("dialog.user.info.instance_queuing_enabled") }}' +
+ '{{ $t("dialog.user.info.instance_disabled_content_settings") }} {{ disabledContentSettings }}' +
'{{ $t("dialog.user.info.instance_users") }}' +
'' +
'' +
@@ -262,6 +263,7 @@ export default class extends baseClass {
this.gameServerVersion = '';
this.canCloseInstance = false;
this.isAgeGated = false;
+ this.disabledContentSettings = '';
if (
!this.location ||
!this.instance ||
@@ -308,6 +310,13 @@ export default class extends baseClass {
// dumb workaround for API not returning `ageGate`
this.isAgeGated = true;
}
+ if (
+ this.instance.$disabledContentSettings &&
+ this.instance.$disabledContentSettings.length
+ ) {
+ this.disabledContentSettings =
+ this.instance.$disabledContentSettings.join(', ');
+ }
},
showUserDialog(userId) {
API.$emit('SHOW_USER_DIALOG', userId);
diff --git a/src/localization/en/en.json b/src/localization/en/en.json
index 4fc89c1b..e2f94aad 100644
--- a/src/localization/en/en.json
+++ b/src/localization/en/en.json
@@ -749,6 +749,7 @@
"instance_game_version": "Game Version:",
"last_join": "Last Join:",
"instance_queuing_enabled": "Queuing Enabled",
+ "instance_disabled_content_settings": "Disabled Content Settings:",
"instance_creator": "Instance Creator",
"note": "Note",
"note_placeholder": "Click to add a note",
@@ -846,7 +847,6 @@
"private": "Private",
"avatar_scaling_disabled": "Avatar Scaling Disabled",
"focus_view_disabled": "Focus View Disabled",
- "stickers_disabled": "Stickers Disabled",
"future_proofing": "Future Proofing",
"labs": "Labs",
"cache": "Cache",
@@ -1142,6 +1142,13 @@
"region_use": "US East",
"region_eu": "Europe",
"region_jp": "Japan",
+ "content_settings": "Content Settings",
+ "content_placeholder": "Enabled Content",
+ "content_emoji": "Emoji",
+ "content_stickers": "Stickers",
+ "content_pedestals": "Pedestals",
+ "content_prints": "Prints",
+ "content_drones": "Drones",
"world_id": "World ID",
"instance_id": "Instance ID",
"instance_id_placeholder": "Random",
@@ -1208,7 +1215,6 @@
"header": "Set World Tags",
"avatar_scaling_disabled": "Disable avatar scaling",
"focus_view_disabled": "Disable focus view",
- "stickers_disabled": "Disable stickers",
"enable_debugging": "Enable world debugging for others",
"author_tags": "Author Tags (comma separated)",
"content_tags": "Content Warning Tags",
@@ -1217,6 +1223,7 @@
"content_violence": "Violence",
"content_adult": "Adult",
"content_sex": "Sexual",
+ "default_content_settings": "Default Content Settings",
"cancel": "Cancel",
"save": "Save"
},
diff --git a/src/mixins/dialogs/newInstance.pug b/src/mixins/dialogs/newInstance.pug
index 071d8204..3040c6a7 100644
--- a/src/mixins/dialogs/newInstance.pug
+++ b/src/mixins/dialogs/newInstance.pug
@@ -37,6 +37,27 @@ mixin newInstance
el-radio-button(label='US East') {{ $t('dialog.new_instance.region_use') }}
el-radio-button(label='Europe') {{ $t('dialog.new_instance.region_eu') }}
el-radio-button(label='Japan') {{ $t('dialog.new_instance.region_jp') }}
+ el-form-item(:label='$t("dialog.new_instance.content_settings")')
+ el-select(
+ v-model='newInstanceDialog.selectedContentSettings'
+ multiple
+ :placeholder='$t("dialog.new_instance.content_placeholder")'
+ style='width: 100%'
+ @change='buildInstance')
+ el-option-group(:label='$t("dialog.new_instance.content_placeholder")')
+ el-option.x-friend-item(value='emoji' :label='$t("dialog.new_instance.content_emoji")')
+ el-option.x-friend-item(
+ value='stickers'
+ :label='$t("dialog.new_instance.content_stickers")')
+ el-option.x-friend-item(
+ value='pedestals'
+ :label='$t("dialog.new_instance.content_pedestals")')
+ el-option.x-friend-item(
+ value='prints'
+ :label='$t("dialog.new_instance.content_prints")')
+ el-option.x-friend-item(
+ value='drones'
+ :label='$t("dialog.new_instance.content_drones")')
el-form-item(
:label='$t("dialog.new_instance.queueEnabled")'
v-if='newInstanceDialog.accessType === "group"')
diff --git a/src/mixins/dialogs/tags.pug b/src/mixins/dialogs/tags.pug
index edb05d7f..586bff46 100644
--- a/src/mixins/dialogs/tags.pug
+++ b/src/mixins/dialogs/tags.pug
@@ -12,8 +12,6 @@ mixin tags
br
el-checkbox(v-model='setWorldTagsDialog.focusViewDisabled') {{ $t('dialog.set_world_tags.focus_view_disabled') }}
br
- el-checkbox(v-model='setWorldTagsDialog.stickersDisabled') {{ $t('dialog.set_world_tags.stickers_disabled') }}
- br
el-checkbox(v-model='setWorldTagsDialog.debugAllowed') {{ $t('dialog.set_world_tags.enable_debugging') }}
div(style='font-size: 12px; margin-top: 10px')
| {{ $t('dialog.set_world_tags.author_tags') }} #[br]
@@ -36,6 +34,17 @@ mixin tags
el-checkbox(v-model='setWorldTagsDialog.contentAdult') {{ $t('dialog.set_world_tags.content_adult') }}
br
el-checkbox(v-model='setWorldTagsDialog.contentSex') {{ $t('dialog.set_world_tags.content_sex') }}
+ div(style='font-size: 12px; margin-top: 10px')
+ | {{ $t('dialog.set_world_tags.default_content_settings') }} #[br]
+ el-checkbox(v-model='setWorldTagsDialog.emoji') {{ $t('dialog.new_instance.content_emoji') }}
+ br
+ el-checkbox(v-model='setWorldTagsDialog.stickers') {{ $t('dialog.new_instance.content_stickers') }}
+ br
+ el-checkbox(v-model='setWorldTagsDialog.pedestals') {{ $t('dialog.new_instance.content_pedestals') }}
+ br
+ el-checkbox(v-model='setWorldTagsDialog.prints') {{ $t('dialog.new_instance.content_prints') }}
+ br
+ el-checkbox(v-model='setWorldTagsDialog.drones') {{ $t('dialog.new_instance.content_drones') }}
//- el-input(type="textarea" v-model="setWorldTagsDialog.contentTags" size="mini" show-word-limit :autosize="{ minRows:2, maxRows:5 }" placeholder="" style="margin-top:10px")
template(#footer)
div(style='display: flex')
diff --git a/src/mixins/dialogs/userDialog.pug b/src/mixins/dialogs/userDialog.pug
index f5cac106..7a48bdf1 100644
--- a/src/mixins/dialogs/userDialog.pug
+++ b/src/mixins/dialogs/userDialog.pug
@@ -140,7 +140,7 @@ mixin userDialog
size='mini'
style='margin-right: 5px; margin-top: 5px') {{ userDialog.ref.last_platform }}
el-tag.x-tag-age-verification(
- v-if='userDialog.ref.ageVerificationStatus && userDialog.ref.ageVerificationStatus !== "hidden"'
+ v-if='userDialog.ref.ageVerificationStatus || userDialog.ref.ageVerificationStatus !== "hidden"'
type='info'
effect='plain'
size='mini'
diff --git a/src/views/dialogs/WorldDialog.vue b/src/views/dialogs/WorldDialog.vue
index cb7bd689..8bc64804 100644
--- a/src/views/dialogs/WorldDialog.vue
+++ b/src/views/dialogs/WorldDialog.vue
@@ -124,14 +124,6 @@
style="margin-right: 5px; margin-top: 5px">
{{ $t('dialog.world.tags.focus_view_disabled') }}
-
- {{ $t('dialog.world.tags.stickers_disabled') }}
-