mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-16 13:23:52 +02:00
150 lines
4.5 KiB
JavaScript
150 lines
4.5 KiB
JavaScript
import { computed, ref, watch } from 'vue';
|
||
import { defineStore } from 'pinia';
|
||
import { toast } from 'vue-sonner';
|
||
|
||
import { instanceRequest, inviteMessagesRequest } from '../api';
|
||
import { parseLocation } from '../shared/utils';
|
||
import { useAdvancedSettingsStore } from './settings/advanced';
|
||
import { useGameStore } from './game';
|
||
import { useInstanceStore } from './instance';
|
||
import { useLaunchStore } from './launch';
|
||
import { watchState } from '../service/watchState';
|
||
|
||
export const useInviteStore = defineStore('Invite', () => {
|
||
const instanceStore = useInstanceStore();
|
||
const gameStore = useGameStore();
|
||
const launchStore = useLaunchStore();
|
||
const advancedSettingsStore = useAdvancedSettingsStore();
|
||
|
||
const inviteMessageTable = ref({
|
||
data: [],
|
||
tableProps: {
|
||
stripe: true,
|
||
size: 'small'
|
||
},
|
||
layout: 'table',
|
||
visible: false
|
||
});
|
||
|
||
const inviteResponseMessageTable = ref({
|
||
data: [],
|
||
tableProps: {
|
||
stripe: true,
|
||
size: 'small'
|
||
},
|
||
layout: 'table',
|
||
visible: false
|
||
});
|
||
|
||
const inviteRequestMessageTable = ref({
|
||
data: [],
|
||
tableProps: {
|
||
stripe: true,
|
||
size: 'small'
|
||
},
|
||
layout: 'table',
|
||
visible: false
|
||
});
|
||
|
||
const inviteRequestResponseMessageTable = ref({
|
||
data: [],
|
||
tableProps: {
|
||
stripe: true,
|
||
size: 'small'
|
||
},
|
||
layout: 'table',
|
||
visible: false
|
||
});
|
||
|
||
watch(
|
||
() => watchState.isLoggedIn,
|
||
() => {
|
||
inviteMessageTable.value.data = [];
|
||
inviteResponseMessageTable.value.data = [];
|
||
inviteRequestMessageTable.value.data = [];
|
||
inviteRequestResponseMessageTable.value.data = [];
|
||
inviteMessageTable.value.visible = false;
|
||
inviteResponseMessageTable.value.visible = false;
|
||
inviteRequestMessageTable.value.visible = false;
|
||
inviteRequestResponseMessageTable.value.visible = false;
|
||
},
|
||
{ flush: 'sync' }
|
||
);
|
||
|
||
const canOpenInstanceInGame = computed(() => {
|
||
return (
|
||
!LINUX &&
|
||
gameStore.isGameRunning &&
|
||
!advancedSettingsStore.selfInviteOverride
|
||
);
|
||
});
|
||
|
||
/**
|
||
*
|
||
* @param {'message' | 'request' | 'response' | 'requestResponse'} mode
|
||
*/
|
||
function refreshInviteMessageTableData(mode) {
|
||
inviteMessagesRequest
|
||
.refreshInviteMessageTableData(mode)
|
||
.then(({ json }) => {
|
||
switch (mode) {
|
||
case 'message':
|
||
inviteMessageTable.value.data = json;
|
||
break;
|
||
case 'response':
|
||
inviteResponseMessageTable.value.data = json;
|
||
break;
|
||
case 'request':
|
||
inviteRequestMessageTable.value.data = json;
|
||
break;
|
||
case 'requestResponse':
|
||
inviteRequestResponseMessageTable.value.data = json;
|
||
break;
|
||
}
|
||
})
|
||
.catch((err) => {
|
||
console.error('refreshInviteMessageTableData Failed:', err);
|
||
});
|
||
}
|
||
|
||
function newInstanceSelfInvite(worldId) {
|
||
instanceStore.createNewInstance(worldId).then((args) => {
|
||
const location = args?.json?.location;
|
||
if (!location) {
|
||
toast.error('Failed to create instance');
|
||
return;
|
||
}
|
||
// self invite
|
||
const L = parseLocation(location);
|
||
if (!L.isRealInstance) {
|
||
return;
|
||
}
|
||
if (canOpenInstanceInGame.value) {
|
||
const secureOrShortName =
|
||
args.json.shortName || args.json.secureName;
|
||
launchStore.tryOpenInstanceInVrc(location, secureOrShortName);
|
||
return;
|
||
}
|
||
instanceRequest
|
||
.selfInvite({
|
||
instanceId: L.instanceId,
|
||
worldId: L.worldId
|
||
})
|
||
.then((args) => {
|
||
toast.success('Self invite sent');
|
||
return args;
|
||
});
|
||
});
|
||
}
|
||
|
||
return {
|
||
inviteMessageTable,
|
||
inviteResponseMessageTable,
|
||
inviteRequestMessageTable,
|
||
inviteRequestResponseMessageTable,
|
||
refreshInviteMessageTableData,
|
||
newInstanceSelfInvite,
|
||
canOpenInstanceInGame
|
||
};
|
||
});
|