diff --git a/packages/frontend/src/composables/use-uploader.ts b/packages/frontend/src/composables/use-uploader.ts index 3f105dc201..0dbc3052df 100644 --- a/packages/frontend/src/composables/use-uploader.ts +++ b/packages/frontend/src/composables/use-uploader.ts @@ -67,6 +67,7 @@ export type UploaderItem = { preprocessedFile?: Blob | null; file: File; watermarkPresetId: string | null; + isSensitive?: boolean; abort?: (() => void) | null; }; @@ -170,6 +171,15 @@ export function useUploader(options: { item.name = result; }, + }, { + type: 'switch', + text: i18n.ts.sensitive, + ref: computed({ + get: () => item.isSensitive ?? false, + set: (value) => item.isSensitive = value, + }), + }, { + type: 'divider', }); } @@ -381,6 +391,7 @@ export function useUploader(options: { const { filePromise, abort } = uploadFile(item.preprocessedFile ?? item.file, { name: item.uploadName ?? item.name, folderId: options.folderId, + isSensitive: item.isSensitive ?? false, onProgress: (progress) => { if (item.progress == null) { item.progress = { max: progress.total, value: progress.loaded }; diff --git a/packages/frontend/src/utility/drive.ts b/packages/frontend/src/utility/drive.ts index bc1813f48c..1912b3f805 100644 --- a/packages/frontend/src/utility/drive.ts +++ b/packages/frontend/src/utility/drive.ts @@ -6,6 +6,7 @@ import { defineAsyncComponent } from 'vue'; import * as Misskey from 'misskey-js'; import { apiUrl } from '@@/js/config.js'; +import type { UploaderFeatures } from '@/composables/use-uploader.js'; import * as os from '@/os.js'; import { misskeyApi } from '@/utility/misskey-api.js'; import { useStream } from '@/stream.js'; @@ -16,7 +17,6 @@ import { instance } from '@/instance.js'; import { globalEvents } from '@/events.js'; import { getProxiedImageUrl } from '@/utility/media-proxy.js'; import { genId } from '@/utility/id.js'; -import type { UploaderDialogFeatures } from '@/components/MkUploaderDialog.vue'; type UploadReturnType = { filePromise: Promise; @@ -32,6 +32,7 @@ export class UploadAbortedError extends Error { export function uploadFile(file: File | Blob, options: { name?: string; folderId?: string | null; + isSensitive?: boolean; onProgress?: (ctx: { total: number; loaded: number; }) => void; } = {}): UploadReturnType { const xhr = new XMLHttpRequest(); @@ -140,6 +141,7 @@ export function uploadFile(file: File | Blob, options: { formData.append('force', 'true'); formData.append('file', file); formData.append('name', options.name ?? (file instanceof File ? file.name : 'untitled')); + formData.append('isSensitive', options.isSensitive ? 'true' : 'false'); if (options.folderId) formData.append('folderId', options.folderId); xhr.send(formData); @@ -156,7 +158,7 @@ export function uploadFile(file: File | Blob, options: { export function chooseFileFromPcAndUpload( options: { multiple?: boolean; - features?: UploaderDialogFeatures; + features?: UploaderFeatures; folderId?: string | null; } = {}, ): Promise { @@ -254,7 +256,7 @@ type SelectFileOptions = { export async function selectFile< M extends boolean, - MR extends M extends true ? Misskey.entities.DriveFile[] : Misskey.entities.DriveFile + MR extends M extends true ? Misskey.entities.DriveFile[] : Misskey.entities.DriveFile, >(opts: SelectFileOptions): Promise { const files = await select(opts.anchorElement, opts.label ?? null, opts.multiple ?? false, opts.features); return opts.multiple ? (files as MR) : (files[0]! as MR);