diff --git a/packages/frontend/src/components/MkUploaderDialog.vue b/packages/frontend/src/components/MkUploaderDialog.vue
index 723b129822..3a83247d4b 100644
--- a/packages/frontend/src/components/MkUploaderDialog.vue
+++ b/packages/frontend/src/components/MkUploaderDialog.vue
@@ -51,6 +51,10 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
+
+
(), {
-
+ multiple: true,
});
const emit = defineEmits<{
@@ -316,22 +321,34 @@ async function upload() { // エラーハンドリングなどを考慮してシ
}
}
+async function chooseFile(ev: MouseEvent) {
+ const newFiles = await os.chooseFileFromPc({ multiple: true });
+
+ for (const file of newFiles) {
+ initializeFile(file);
+ }
+}
+
+function initializeFile(file: File) {
+ const id = uuid();
+ const filename = file.name ?? 'untitled';
+ const extension = filename.split('.').length > 1 ? '.' + filename.split('.').pop() : '';
+ items.value.push({
+ id,
+ name: prefer.s.keepOriginalFilename ? filename : id + extension,
+ progress: null,
+ thumbnail: window.URL.createObjectURL(file),
+ waiting: false,
+ uploading: false,
+ uploaded: null,
+ uploadFailed: false,
+ file: markRaw(file),
+ });
+}
+
onMounted(() => {
for (const file of props.files) {
- const id = uuid();
- const filename = file.name ?? 'untitled';
- const extension = filename.split('.').length > 1 ? '.' + filename.split('.').pop() : '';
- items.value.push({
- id,
- name: prefer.s.keepOriginalFilename ? filename : id + extension,
- progress: null,
- thumbnail: window.URL.createObjectURL(file),
- waiting: false,
- uploading: false,
- uploaded: null,
- uploadFailed: false,
- file: markRaw(file),
- });
+ initializeFile(file);
}
});
diff --git a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue
index ce3192e230..4e96eff82e 100644
--- a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue
+++ b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue
@@ -85,7 +85,7 @@ async function setAvatar(ev) {
});
}
- const driveFile = (await os.launchUploader([originalOrCropped], {}))[0];
+ const driveFile = (await os.launchUploader([originalOrCropped], { multiple: false }))[0];
const i = await os.apiWithDialog('i/update', {
avatarId: driveFile.id,
diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts
index 54fa5a5af9..6d49408f26 100644
--- a/packages/frontend/src/os.ts
+++ b/packages/frontend/src/os.ts
@@ -772,6 +772,7 @@ export function launchUploader(
files: File[],
options?: {
folderId?: string | null;
+ multiple?: boolean;
},
): Promise {
return new Promise((res, rej) => {
@@ -779,6 +780,7 @@ export function launchUploader(
const { dispose } = popup(defineAsyncComponent(() => import('@/components/MkUploaderDialog.vue')), {
files: markRaw(files),
folderId: options?.folderId,
+ multiple: options?.multiple,
}, {
done: driveFiles => {
if (driveFiles.length === 0) return rej();
diff --git a/packages/frontend/src/pages/chat/room.form.vue b/packages/frontend/src/pages/chat/room.form.vue
index 6702cd2ec1..7e3be67230 100644
--- a/packages/frontend/src/pages/chat/room.form.vue
+++ b/packages/frontend/src/pages/chat/room.form.vue
@@ -86,7 +86,7 @@ async function onPaste(ev: ClipboardEvent) {
const ext = lio >= 0 ? pastedFile.name.slice(lio) : '';
const formattedName = formatTimeString(new Date(pastedFile.lastModified), pastedFileName).replace(/{{number}}/g, '1') + ext;
const renamedFile = new File([pastedFile], formattedName, { type: pastedFile.type });
- os.launchUploader([renamedFile], {}).then(driveFiles => {
+ os.launchUploader([renamedFile], { multiple: false }).then(driveFiles => {
file.value = driveFiles[0];
});
}
@@ -131,7 +131,7 @@ function onDrop(ev: DragEvent): void {
// ファイルだったら
if (ev.dataTransfer.files.length === 1) {
ev.preventDefault();
- os.launchUploader([Array.from(ev.dataTransfer.files)[0]], {});
+ os.launchUploader([Array.from(ev.dataTransfer.files)[0]], { multiple: false });
return;
} else if (ev.dataTransfer.files.length > 1) {
ev.preventDefault();
@@ -177,7 +177,7 @@ function onChangeFile() {
if (fileEl.value == null || fileEl.value.files == null) return;
if (fileEl.value.files[0]) {
- os.launchUploader(Array.from(fileEl.value.files), {}).then(driveFiles => {
+ os.launchUploader(Array.from(fileEl.value.files), { multiple: false }).then(driveFiles => {
file.value = driveFiles[0];
});
}
diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue
index df637d9e9a..cd1565f39e 100644
--- a/packages/frontend/src/pages/settings/profile.vue
+++ b/packages/frontend/src/pages/settings/profile.vue
@@ -291,7 +291,7 @@ function changeAvatar(ev) {
});
}
- const driveFile = (await os.launchUploader([originalOrCropped], {}))[0];
+ const driveFile = (await os.launchUploader([originalOrCropped], { multiple: false }))[0];
done(driveFile);
},
}, {
@@ -339,7 +339,7 @@ function changeBanner(ev) {
});
}
- const driveFile = (await os.launchUploader([originalOrCropped], {}))[0];
+ const driveFile = (await os.launchUploader([originalOrCropped], { multiple: false }))[0];
done(driveFile);
},
}, {