diff --git a/src/localization/en.json b/src/localization/en.json index 79c2cc99..34e28c39 100644 --- a/src/localization/en.json +++ b/src/localization/en.json @@ -546,7 +546,9 @@ "auto_invite_request_accept_tooltip": "Automatically accept invite requests from favorite friends", "auto_invite_request_accept_off": "Off", "auto_invite_request_accept_favs": "All Favorites", - "auto_invite_request_accept_selected_favs": "VRCX Favorites" + "auto_invite_request_accept_selected_favs": "VRCX Favorites", + "change_status_description": "Override status description", + "status_description_placeholder": "Status description (max 32 characters)" }, "legal_notice": { "header": "Legal Notice", diff --git a/src/stores/settings/general.js b/src/stores/settings/general.js index 4a15f427..54c14e1b 100644 --- a/src/stores/settings/general.js +++ b/src/stores/settings/general.js @@ -35,6 +35,10 @@ export const useGeneralSettingsStore = defineStore('GeneralSettings', () => { const autoStateChangeCompanyStatus = ref('busy'); const autoStateChangeInstanceTypes = ref([]); const autoStateChangeNoFriends = ref(false); + const autoStateChangeAloneDescEnabled = ref(false); + const autoStateChangeAloneDesc = ref(''); + const autoStateChangeCompanyDescEnabled = ref(false); + const autoStateChangeCompanyDesc = ref(''); const autoAcceptInviteRequests = ref('Off'); async function initGeneralSettings() { @@ -56,6 +60,10 @@ export const useGeneralSettingsStore = defineStore('GeneralSettings', () => { autoStateChangeCompanyStatusConfig, autoStateChangeInstanceTypesStrConfig, autoStateChangeNoFriendsConfig, + autoStateChangeAloneDescEnabledConfig, + autoStateChangeAloneDescConfig, + autoStateChangeCompanyDescEnabledConfig, + autoStateChangeCompanyDescConfig, autoAcceptInviteRequestsConfig ] = await Promise.all([ configRepository.getBool('VRCX_StartAtWindowsStartup', false), @@ -84,6 +92,16 @@ export const useGeneralSettingsStore = defineStore('GeneralSettings', () => { '[]' ), configRepository.getBool('VRCX_autoStateChangeNoFriends', false), + configRepository.getBool( + 'VRCX_autoStateChangeAloneDescEnabled', + false + ), + configRepository.getString('VRCX_autoStateChangeAloneDesc', ''), + configRepository.getBool( + 'VRCX_autoStateChangeCompanyDescEnabled', + false + ), + configRepository.getString('VRCX_autoStateChangeCompanyDesc', ''), configRepository.getString('VRCX_autoAcceptInviteRequests', 'Off') ]); @@ -122,6 +140,12 @@ export const useGeneralSettingsStore = defineStore('GeneralSettings', () => { autoStateChangeInstanceTypesStrConfig ); autoStateChangeNoFriends.value = autoStateChangeNoFriendsConfig; + autoStateChangeAloneDescEnabled.value = + autoStateChangeAloneDescEnabledConfig; + autoStateChangeAloneDesc.value = autoStateChangeAloneDescConfig; + autoStateChangeCompanyDescEnabled.value = + autoStateChangeCompanyDescEnabledConfig; + autoStateChangeCompanyDesc.value = autoStateChangeCompanyDescConfig; autoAcceptInviteRequests.value = autoAcceptInviteRequestsConfig; } @@ -262,6 +286,42 @@ export const useGeneralSettingsStore = defineStore('GeneralSettings', () => { autoStateChangeNoFriends.value ); } + function setAutoStateChangeAloneDescEnabled() { + autoStateChangeAloneDescEnabled.value = + !autoStateChangeAloneDescEnabled.value; + configRepository.setBool( + 'VRCX_autoStateChangeAloneDescEnabled', + autoStateChangeAloneDescEnabled.value + ); + } + /** + * @param {string} value + */ + function setAutoStateChangeAloneDesc(value) { + autoStateChangeAloneDesc.value = value; + configRepository.setString( + 'VRCX_autoStateChangeAloneDesc', + autoStateChangeAloneDesc.value + ); + } + function setAutoStateChangeCompanyDescEnabled() { + autoStateChangeCompanyDescEnabled.value = + !autoStateChangeCompanyDescEnabled.value; + configRepository.setBool( + 'VRCX_autoStateChangeCompanyDescEnabled', + autoStateChangeCompanyDescEnabled.value + ); + } + /** + * @param {string} value + */ + function setAutoStateChangeCompanyDesc(value) { + autoStateChangeCompanyDesc.value = value; + configRepository.setString( + 'VRCX_autoStateChangeCompanyDesc', + autoStateChangeCompanyDesc.value + ); + } /** * @param {string} value */ @@ -334,6 +394,10 @@ export const useGeneralSettingsStore = defineStore('GeneralSettings', () => { autoStateChangeCompanyStatus, autoStateChangeInstanceTypes, autoStateChangeNoFriends, + autoStateChangeAloneDescEnabled, + autoStateChangeAloneDesc, + autoStateChangeCompanyDescEnabled, + autoStateChangeCompanyDesc, autoAcceptInviteRequests, setIsStartAtWindowsStartup, @@ -352,6 +416,10 @@ export const useGeneralSettingsStore = defineStore('GeneralSettings', () => { setAutoStateChangeCompanyStatus, setAutoStateChangeInstanceTypes, setAutoStateChangeNoFriends, + setAutoStateChangeAloneDescEnabled, + setAutoStateChangeAloneDesc, + setAutoStateChangeCompanyDescEnabled, + setAutoStateChangeCompanyDesc, setAutoAcceptInviteRequests, promptProxySettings }; diff --git a/src/stores/user.js b/src/stores/user.js index 9ea2ef0d..b4fcdda0 100644 --- a/src/stores/user.js +++ b/src/stores/user.js @@ -1628,22 +1628,33 @@ export const useUserStore = defineStore('User', () => { return; } - userRequest - .saveCurrentUser({ - status: newStatus - }) - .then(() => { - const text = `Status automatically changed to ${newStatus}`; - if (AppDebug.errorNoty) { - AppDebug.errorNoty.close(); - } - AppDebug.errorNoty = new Noty({ - type: 'info', - text - }); - AppDebug.errorNoty.show(); - console.log(text); + const params = { status: newStatus }; + if ( + withCompany && + generalSettingsStore.autoStateChangeCompanyDescEnabled + ) { + params.statusDescription = + generalSettingsStore.autoStateChangeCompanyDesc; + } else if ( + !withCompany && + generalSettingsStore.autoStateChangeAloneDescEnabled + ) { + params.statusDescription = + generalSettingsStore.autoStateChangeAloneDesc; + } + + userRequest.saveCurrentUser(params).then(() => { + const text = `Status automatically changed to ${newStatus}`; + if (AppDebug.errorNoty) { + AppDebug.errorNoty.close(); + } + AppDebug.errorNoty = new Noty({ + type: 'info', + text }); + AppDebug.errorNoty.show(); + console.log(text); + }); } function addCustomTag(data) { diff --git a/src/views/Tools/dialogs/AutoChangeStatusDialog.vue b/src/views/Tools/dialogs/AutoChangeStatusDialog.vue index 4c3d17e7..00288d19 100644 --- a/src/views/Tools/dialogs/AutoChangeStatusDialog.vue +++ b/src/views/Tools/dialogs/AutoChangeStatusDialog.vue @@ -36,6 +36,22 @@ + + +
@@ -62,6 +78,22 @@ + + +
@@ -147,6 +179,7 @@ import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'; import { Info } from 'lucide-vue-next'; + import { Input } from '@/components/ui/input'; import { computed } from 'vue'; import { storeToRefs } from 'pinia'; import { useI18n } from 'vue-i18n'; @@ -172,6 +205,10 @@ autoStateChangeCompanyStatus, autoStateChangeInstanceTypes, autoStateChangeNoFriends, + autoStateChangeAloneDescEnabled, + autoStateChangeAloneDesc, + autoStateChangeCompanyDescEnabled, + autoStateChangeCompanyDesc, autoAcceptInviteRequests } = storeToRefs(generalSettingsStore); @@ -181,6 +218,10 @@ setAutoStateChangeCompanyStatus, setAutoStateChangeInstanceTypes, setAutoStateChangeNoFriends, + setAutoStateChangeAloneDescEnabled, + setAutoStateChangeAloneDesc, + setAutoStateChangeCompanyDescEnabled, + setAutoStateChangeCompanyDesc, setAutoAcceptInviteRequests } = generalSettingsStore;