This commit is contained in:
syuilo 2025-05-13 14:20:43 +09:00
parent 6c7f24fbb8
commit 90c40cd153
6 changed files with 39 additions and 24 deletions

View File

@ -316,9 +316,9 @@ function onDrop(ev: DragEvent) {
// //
if (ev.dataTransfer.files.length > 0) { if (ev.dataTransfer.files.length > 0) {
for (const file of Array.from(ev.dataTransfer.files)) { os.launchUploader(Array.from(ev.dataTransfer.files), {
upload(file, folder.value); folderId: folder.value?.id ?? null,
} });
return; return;
} }

View File

@ -729,7 +729,7 @@ function onDrop(ev: DragEvent): void {
// //
if (ev.dataTransfer && ev.dataTransfer.files.length > 0) { if (ev.dataTransfer && ev.dataTransfer.files.length > 0) {
ev.preventDefault(); ev.preventDefault();
for (const x of Array.from(ev.dataTransfer.files)) upload(x); os.launchUploader(Array.from(ev.dataTransfer.files), {});
return; return;
} }

View File

@ -773,3 +773,22 @@ export function checkExistence(fileData: ArrayBuffer): Promise<any> {
}); });
}); });
}*/ }*/
export function launchUploader(
files: File[],
options?: {
folderId?: string | null;
},
): Promise<Misskey.entities.DriveFile[]> {
return new Promise((res, rej) => {
const { dispose } = popup(defineAsyncComponent(() => import('@/components/MkUploaderDialog.vue')), {
files: markRaw(files),
folderId: options?.folderId,
}, {
done: driveFiles => {
res(driveFiles);
},
closed: () => dispose(),
});
});
}

View File

@ -128,7 +128,7 @@ function onDrop(ev: DragEvent): void {
// //
if (ev.dataTransfer.files.length === 1) { if (ev.dataTransfer.files.length === 1) {
ev.preventDefault(); ev.preventDefault();
upload(ev.dataTransfer.files[0]); os.launchUploader([Array.from(ev.dataTransfer.files)[0]], {});
return; return;
} else if (ev.dataTransfer.files.length > 1) { } else if (ev.dataTransfer.files.length > 1) {
ev.preventDefault(); ev.preventDefault();
@ -173,7 +173,11 @@ function chooseFile(ev: MouseEvent) {
function onChangeFile() { function onChangeFile() {
if (fileEl.value == null || fileEl.value.files == null) return; if (fileEl.value == null || fileEl.value.files == null) return;
if (fileEl.value.files[0]) upload(fileEl.value.files[0]); if (fileEl.value.files[0]) {
os.launchUploader(Array.from(fileEl.value.files), {}).then(driveFiles => {
file.value = driveFiles[0];
});
}
} }
function send() { function send() {

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */
import { defineAsyncComponent, markRaw, ref } from 'vue'; import { } from 'vue';
import * as Misskey from 'misskey-js'; import * as Misskey from 'misskey-js';
import * as os from '@/os.js'; import * as os from '@/os.js';
import { misskeyApi } from '@/utility/misskey-api.js'; import { misskeyApi } from '@/utility/misskey-api.js';
@ -12,30 +12,22 @@ import { i18n } from '@/i18n.js';
import { prefer } from '@/preferences.js'; import { prefer } from '@/preferences.js';
export function chooseFileFromPc( export function chooseFileFromPc(
multiple: boolean, options: {
options?: { multiple?: boolean;
uploadFolder?: string | null; folderId?: string | null;
nameConverter?: (file: File) => string | undefined; } = {},
},
): Promise<Misskey.entities.DriveFile[]> { ): Promise<Misskey.entities.DriveFile[]> {
const uploadFolder = options?.uploadFolder ?? prefer.s.uploadFolder;
const nameConverter = options?.nameConverter ?? (() => undefined);
return new Promise((res, rej) => { return new Promise((res, rej) => {
const input = window.document.createElement('input'); const input = window.document.createElement('input');
input.type = 'file'; input.type = 'file';
input.multiple = multiple; input.multiple = options.multiple ?? false;
input.onchange = () => { input.onchange = () => {
if (!input.files) return res([]); if (!input.files) return res([]);
const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/MkUploadDialog.vue')), { os.launchUploader(Array.from(input.files), {
files: markRaw(Array.from(input.files)), folderId: options.folderId,
folderId: uploadFolder, }).then(driveFiles => {
}, { res(driveFiles);
done: driveFiles => {
res(driveFiles);
},
closed: () => dispose(),
}); });
// 一応廃棄 // 一応廃棄