Persist upload IDs and URL secrets on successful queue entries.

Store server response fields and mode-specific secrets so share links can be built client-side after upload without precomputed paths.
This commit is contained in:
2026-10-25 22:00:05 +01:00
parent 5f6ee193e7
commit 4e9a3368a6
2 changed files with 30 additions and 12 deletions
+20 -11
View File
@@ -44,11 +44,6 @@ const UPLOAD_UPLOADING_ENTRY: UploadQueueEntry = {
message: UPLOAD_UPLOADING_MESSAGE message: UPLOAD_UPLOADING_MESSAGE
}; };
const UPLOAD_UPLOADED_ENTRY: UploadQueueEntry = {
status: 'uploaded',
message: UPLOAD_UPLOADED_MESSAGE
};
const UPLOAD_FAILED_ENTRY: UploadQueueEntry = { const UPLOAD_FAILED_ENTRY: UploadQueueEntry = {
status: 'failed', status: 'failed',
message: UPLOAD_FAILED_MESSAGE message: UPLOAD_FAILED_MESSAGE
@@ -177,11 +172,18 @@ export const useUploadStore = defineStore('upload', () => {
setUploadEntry(key, UPLOAD_UPLOADING_ENTRY); setUploadEntry(key, UPLOAD_UPLOADING_ENTRY);
try { try {
const { request } = prepared; const { request, fragmentKey } = prepared;
await uploadZk(request, altcha); const result = await uploadZk(request, altcha);
setUploadEntry(key, UPLOAD_UPLOADED_ENTRY); setUploadEntry(key, {
status: 'uploaded',
message: UPLOAD_UPLOADED_MESSAGE,
uploadId: result.id,
mode: 'zk',
deleteToken: result.deleteToken,
urlSecret: fragmentKey
});
} catch (error) { } catch (error) {
console.error('[upload] upload failed', { file: file.name, error }); console.error('[upload] upload failed', { file: file.name, error });
@@ -203,11 +205,18 @@ export const useUploadStore = defineStore('upload', () => {
setUploadEntry(key, UPLOAD_UPLOADING_ENTRY); setUploadEntry(key, UPLOAD_UPLOADING_ENTRY);
try { try {
const { request } = prepared; const { request, secret } = prepared;
await uploadHotlink(request, altcha); const result = await uploadHotlink(request, altcha);
setUploadEntry(key, UPLOAD_UPLOADED_ENTRY); setUploadEntry(key, {
status: 'uploaded',
message: UPLOAD_UPLOADED_MESSAGE,
uploadId: result.id,
mode: 'hotlink',
deleteToken: result.deleteToken,
urlSecret: secret
});
} catch (error) { } catch (error) {
console.error('[upload] upload failed', { file: file.name, error }); console.error('[upload] upload failed', { file: file.name, error });
+10 -1
View File
@@ -1,8 +1,17 @@
import type { UploadMode } from '@/types/upload/UploadMode';
export type UploadQueueEntry = export type UploadQueueEntry =
| { status: 'idle'; message: string } | { status: 'idle'; message: string }
| { status: 'queued'; message: string } | { status: 'queued'; message: string }
| { status: 'preparing'; message: string } | { status: 'preparing'; message: string }
| { status: 'uploading'; message: string } | { status: 'uploading'; message: string }
| { status: 'uploaded'; message: string } | {
status: 'uploaded';
message: string;
uploadId: string;
deleteToken: string;
urlSecret: string;
mode: UploadMode;
}
| { status: 'failed'; message: string } | { status: 'failed'; message: string }
| { status: 'skipped'; message: string }; | { status: 'skipped'; message: string };