This commit is contained in:
syuilo 2025-05-19 15:46:43 +09:00
parent 6ce18fad6a
commit 9f775395f5
5 changed files with 40 additions and 21 deletions

View File

@ -51,6 +51,10 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</div>
<div v-if="props.multiple">
<MkButton style="margin: auto;" :iconOnly="true" rounded @click="chooseFile($event)"><i class="ti ti-plus"></i></MkButton>
</div>
<MkSelect
v-if="items.length > 0"
v-model="compressionLevel"
@ -123,8 +127,9 @@ const mimeTypeMap = {
const props = withDefaults(defineProps<{
files: File[];
folderId?: string | null;
multiple?: boolean;
}>(), {
multiple: true,
});
const emit = defineEmits<{
@ -316,8 +321,15 @@ async function upload() { // エラーハンドリングなどを考慮してシ
}
}
onMounted(() => {
for (const file of props.files) {
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() : '';
@ -332,6 +344,11 @@ onMounted(() => {
uploadFailed: false,
file: markRaw(file),
});
}
onMounted(() => {
for (const file of props.files) {
initializeFile(file);
}
});
</script>

View File

@ -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,

View File

@ -772,6 +772,7 @@ export function launchUploader(
files: File[],
options?: {
folderId?: string | null;
multiple?: boolean;
},
): Promise<Misskey.entities.DriveFile[]> {
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();

View File

@ -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];
});
}

View File

@ -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);
},
}, {