mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-11 02:43:50 +02:00
159 lines
4.4 KiB
JavaScript
159 lines
4.4 KiB
JavaScript
import { ElMessage } from 'element-plus';
|
|
|
|
import { i18n } from '../plugin/i18n';
|
|
import { request } from '../service/request';
|
|
import { useInstanceStore } from '../stores';
|
|
|
|
const instanceReq = {
|
|
/**
|
|
* @type {import('../types/api/instance').GetInstance}
|
|
*/
|
|
getInstance(params) {
|
|
const instanceStore = useInstanceStore();
|
|
return request(`instances/${params.worldId}:${params.instanceId}`, {
|
|
method: 'GET'
|
|
}).then((json) => {
|
|
const args = {
|
|
json,
|
|
params
|
|
};
|
|
args.ref = instanceStore.applyInstance(json);
|
|
return args;
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @param {{worldId: string, instanceId: string}} params
|
|
* @returns {Promise<{json: any, ref: any, cache?: boolean, params}>}
|
|
*/
|
|
getCachedInstance(params) {
|
|
const instanceStore = useInstanceStore();
|
|
return new Promise((resolve, reject) => {
|
|
const ref = instanceStore.cachedInstances.get(
|
|
`${params.worldId}:${params.instanceId}`
|
|
);
|
|
if (typeof ref === 'undefined') {
|
|
instanceReq
|
|
.getInstance(params)
|
|
.then((args) => {
|
|
args.ref = instanceStore.applyInstance(args.json);
|
|
resolve(args);
|
|
})
|
|
.catch(reject);
|
|
} else {
|
|
resolve({
|
|
cache: true,
|
|
json: ref,
|
|
params,
|
|
ref
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @type {import('../types/api/instance').CreateInstance}
|
|
*/
|
|
createInstance(params) {
|
|
const instanceStore = useInstanceStore();
|
|
return request('instances', {
|
|
method: 'POST',
|
|
params
|
|
}).then((json) => {
|
|
const args = {
|
|
json,
|
|
params
|
|
};
|
|
args.ref = instanceStore.applyInstance(json);
|
|
return args;
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @type {import('../types/api/instance').GetInstanceShortName}
|
|
*/
|
|
getInstanceShortName(instance) {
|
|
const params = {};
|
|
if (instance.shortName) {
|
|
params.shortName = instance.shortName;
|
|
}
|
|
return request(
|
|
`instances/${instance.worldId}:${instance.instanceId}/shortName`,
|
|
{
|
|
method: 'GET',
|
|
params
|
|
}
|
|
).then((json) => {
|
|
const args = {
|
|
json,
|
|
instance,
|
|
params
|
|
};
|
|
return args;
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @param {{ shortName: string }} params
|
|
* @returns {Promise<{json: any, params}>}
|
|
*/
|
|
getInstanceFromShortName(params) {
|
|
const instanceStore = useInstanceStore();
|
|
return request(`instances/s/${params.shortName}`, {
|
|
method: 'GET'
|
|
}).then((json) => {
|
|
const args = {
|
|
json,
|
|
params
|
|
};
|
|
args.ref = instanceStore.applyInstance(json);
|
|
return args;
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Send invite to current user.
|
|
* @param {{ worldId: string, instanceId: string, shortName?: string }} instance
|
|
* @returns {Promise<{instance, json: any, params}>}
|
|
*/
|
|
selfInvite(instance) {
|
|
/**
|
|
* @type {{ shortName?: string }}
|
|
*/
|
|
const params = {};
|
|
if (instance.shortName) {
|
|
params.shortName = instance.shortName;
|
|
}
|
|
return request(
|
|
`invite/myself/to/${instance.worldId}:${instance.instanceId}`,
|
|
{
|
|
method: 'POST',
|
|
params
|
|
}
|
|
)
|
|
.then((json) => {
|
|
return {
|
|
json,
|
|
instance,
|
|
params
|
|
};
|
|
})
|
|
.catch((err) => {
|
|
if (err?.error?.message) {
|
|
ElMessage({
|
|
message: err.error.message,
|
|
type: 'error'
|
|
});
|
|
throw err;
|
|
}
|
|
ElMessage({
|
|
message: i18n.global.t('message.instance.not_allowed'),
|
|
type: 'error'
|
|
});
|
|
throw err;
|
|
});
|
|
}
|
|
};
|
|
|
|
export default instanceReq;
|