Files
VRCX/src/api/image.js
2025-07-15 12:00:50 +12:00

298 lines
8.0 KiB
JavaScript

import { request } from '../service/request';
import { useAvatarStore, useWorldStore } from '../stores';
const imageReq = {
async uploadAvatarFailCleanup(id) {
const avatarStore = useAvatarStore();
try {
const json = await request(`file/${id}`, {
method: 'GET'
});
const fileId = json.id;
const fileVersion = json.versions[json.versions.length - 1].version;
request(`file/${fileId}/${fileVersion}/signature/finish`, {
method: 'PUT'
}).catch(err => console.error('Failed to finish signature:', err));
request(`file/${fileId}/${fileVersion}/file/finish`, {
method: 'PUT'
}).catch(err => console.error('Failed to finish file:', err));
} catch (error) {
console.error('Failed to cleanup avatar upload:', error);
}
avatarStore.avatarDialog.loading = false;
},
async uploadAvatarImage(params, fileId) {
try {
return await request(`file/${fileId}`, {
method: 'POST',
params
}).then((json) => {
const args = {
json,
params,
fileId
};
return args;
});
} catch (err) {
console.error(err);
imageReq.uploadAvatarFailCleanup(fileId);
throw err;
}
},
async uploadAvatarImageFileStart(params) {
try {
return await request(
`file/${params.fileId}/${params.fileVersion}/file/start`,
{
method: 'PUT'
}
).then((json) => {
const args = {
json,
params
};
return args;
});
} catch (err) {
console.error(err);
imageReq.uploadAvatarFailCleanup(params.fileId);
}
},
uploadAvatarImageFileFinish(params) {
return request(
`file/${params.fileId}/${params.fileVersion}/file/finish`,
{
method: 'PUT',
params: {
maxParts: 0,
nextPartNumber: 0
}
}
).then((json) => {
const args = {
json,
params
};
return args;
});
},
async uploadAvatarImageSigStart(params) {
try {
return await request(
`file/${params.fileId}/${params.fileVersion}/signature/start`,
{
method: 'PUT'
}
).then((json) => {
const args = {
json,
params
};
return args;
});
} catch (err) {
console.error(err);
imageReq.uploadAvatarFailCleanup(params.fileId);
}
},
uploadAvatarImageSigFinish(params) {
return request(
`file/${params.fileId}/${params.fileVersion}/signature/finish`,
{
method: 'PUT',
params: {
maxParts: 0,
nextPartNumber: 0
}
}
).then((json) => {
const args = {
json,
params
};
return args;
});
},
setAvatarImage(params) {
return request(`avatars/${params.id}`, {
method: 'PUT',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
async uploadWorldFailCleanup(id) {
const worldStore = useWorldStore();
try {
const json = await request(`file/${id}`, {
method: 'GET'
});
const fileId = json.id;
const fileVersion = json.versions[json.versions.length - 1].version;
request(`file/${fileId}/${fileVersion}/signature/finish`, {
method: 'PUT'
}).catch(err => console.error('Failed to finish signature:', err));
request(`file/${fileId}/${fileVersion}/file/finish`, {
method: 'PUT'
}).catch(err => console.error('Failed to finish file:', err));
} catch (error) {
console.error('Failed to cleanup world upload:', error);
}
worldStore.worldDialog.loading = false;
},
async uploadWorldImage(params, fileId) {
try {
return await request(`file/${fileId}`, {
method: 'POST',
params
}).then((json) => {
const args = {
json,
params,
fileId
};
return args;
});
} catch (err) {
console.error(err);
imageReq.uploadWorldFailCleanup(fileId);
}
return void 0;
},
async uploadWorldImageFileStart(params) {
try {
return await request(
`file/${params.fileId}/${params.fileVersion}/file/start`,
{
method: 'PUT'
}
).then((json) => {
const args = {
json,
params
};
return args;
});
} catch (err) {
console.error(err);
imageReq.uploadWorldFailCleanup(params.fileId);
}
return void 0;
},
uploadWorldImageFileFinish(params) {
return request(
`file/${params.fileId}/${params.fileVersion}/file/finish`,
{
method: 'PUT',
params: {
maxParts: 0,
nextPartNumber: 0
}
}
).then((json) => {
const args = {
json,
params
};
return args;
});
},
async uploadWorldImageSigStart(params) {
try {
return await request(
`file/${params.fileId}/${params.fileVersion}/signature/start`,
{
method: 'PUT'
}
).then((json) => {
const args = {
json,
params
};
return args;
});
} catch (err) {
console.error(err);
imageReq.uploadWorldFailCleanup(params.fileId);
}
return void 0;
},
uploadWorldImageSigFinish(params) {
return request(
`file/${params.fileId}/${params.fileVersion}/signature/finish`,
{
method: 'PUT',
params: {
maxParts: 0,
nextPartNumber: 0
}
}
).then((json) => {
const args = {
json,
params
};
return args;
});
},
setWorldImage(params) {
const worldStore = useWorldStore();
return request(`worlds/${params.id}`, {
method: 'PUT',
params
}).then((json) => {
const args = {
json,
params
};
args.ref = worldStore.applyWorld(json);
return args;
});
},
getAvatarImages(params) {
return request(`file/${params.fileId}`, {
method: 'GET'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
getWorldImages(params) {
return request(`file/${params.fileId}`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
}
};
export default imageReq;