diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-05-08 08:52:01 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-05-08 08:52:01 +0900 |
| commit | 151586ab602794914be281aab6db5589d9c9c9d8 (patch) | |
| tree | 839ad6294bb639c68d57c36608c186ffd0df809a /packages/frontend/src/scripts | |
| parent | fix(frontend): fix MkInput style (diff) | |
| download | sharkey-151586ab602794914be281aab6db5589d9c9c9d8.tar.gz sharkey-151586ab602794914be281aab6db5589d9c9c9d8.tar.bz2 sharkey-151586ab602794914be281aab6db5589d9c9c9d8.zip | |
refactor
Diffstat (limited to 'packages/frontend/src/scripts')
| -rw-r--r-- | packages/frontend/src/scripts/select-file.ts | 120 |
1 files changed, 63 insertions, 57 deletions
diff --git a/packages/frontend/src/scripts/select-file.ts b/packages/frontend/src/scripts/select-file.ts index ec5f8f65e9..fe9f0a2447 100644 --- a/packages/frontend/src/scripts/select-file.ts +++ b/packages/frontend/src/scripts/select-file.ts @@ -6,70 +6,76 @@ import { i18n } from '@/i18n'; import { defaultStore } from '@/store'; import { uploadFile } from '@/scripts/upload'; -function select(src: any, label: string | null, multiple: boolean): Promise<DriveFile | DriveFile[]> { +export function chooseFileFromPc(multiple: boolean, keepOriginal = false): Promise<DriveFile[]> { return new Promise((res, rej) => { - const keepOriginal = ref(defaultStore.state.keepOriginalUploading); - - const chooseFileFromPc = () => { - const input = document.createElement('input'); - input.type = 'file'; - input.multiple = multiple; - input.onchange = () => { - const promises = Array.from(input.files).map(file => uploadFile(file, defaultStore.state.uploadFolder, undefined, keepOriginal.value)); + const input = document.createElement('input'); + input.type = 'file'; + input.multiple = multiple; + input.onchange = () => { + const promises = Array.from(input.files).map(file => uploadFile(file, defaultStore.state.uploadFolder, undefined, keepOriginal)); - Promise.all(promises).then(driveFiles => { - res(multiple ? driveFiles : driveFiles[0]); - }).catch(err => { - // アップロードのエラーは uploadFile 内でハンドリングされているためアラートダイアログを出したりはしてはいけない - }); + Promise.all(promises).then(driveFiles => { + res(driveFiles); + }).catch(err => { + // アップロードのエラーは uploadFile 内でハンドリングされているためアラートダイアログを出したりはしてはいけない + }); - // 一応廃棄 - (window as any).__misskey_input_ref__ = null; - }; + // 一応廃棄 + (window as any).__misskey_input_ref__ = null; + }; - // https://qiita.com/fukasawah/items/b9dc732d95d99551013d - // iOS Safari で正常に動かす為のおまじない - (window as any).__misskey_input_ref__ = input; + // https://qiita.com/fukasawah/items/b9dc732d95d99551013d + // iOS Safari で正常に動かす為のおまじない + (window as any).__misskey_input_ref__ = input; - input.click(); - }; + input.click(); + }); +} - const chooseFileFromDrive = () => { - os.selectDriveFile(multiple).then(files => { - res(files); - }); - }; +export function chooseFileFromDrive(multiple: boolean): Promise<DriveFile[]> { + return new Promise((res, rej) => { + os.selectDriveFile(multiple).then(files => { + res(files); + }); + }); +} - const chooseFileFromUrl = () => { - os.inputText({ - title: i18n.ts.uploadFromUrl, - type: 'url', - placeholder: i18n.ts.uploadFromUrlDescription, - }).then(({ canceled, result: url }) => { - if (canceled) return; +export function chooseFileFromUrl(): Promise<DriveFile> { + return new Promise((res, rej) => { + os.inputText({ + title: i18n.ts.uploadFromUrl, + type: 'url', + placeholder: i18n.ts.uploadFromUrlDescription, + }).then(({ canceled, result: url }) => { + if (canceled) return; - const marker = Math.random().toString(); // TODO: UUIDとか使う + const marker = Math.random().toString(); // TODO: UUIDとか使う - const connection = stream.useChannel('main'); - connection.on('urlUploadFinished', urlResponse => { - if (urlResponse.marker === marker) { - res(multiple ? [urlResponse.file] : urlResponse.file); - connection.dispose(); - } - }); + const connection = stream.useChannel('main'); + connection.on('urlUploadFinished', urlResponse => { + if (urlResponse.marker === marker) { + res(urlResponse.file); + connection.dispose(); + } + }); - os.api('drive/files/upload-from-url', { - url: url, - folderId: defaultStore.state.uploadFolder, - marker, - }); + os.api('drive/files/upload-from-url', { + url: url, + folderId: defaultStore.state.uploadFolder, + marker, + }); - os.alert({ - title: i18n.ts.uploadFromUrlRequested, - text: i18n.ts.uploadFromUrlMayTakeTime, - }); + os.alert({ + title: i18n.ts.uploadFromUrlRequested, + text: i18n.ts.uploadFromUrlMayTakeTime, }); - }; + }); + }); +} + +function select(src: any, label: string | null, multiple: boolean): Promise<DriveFile[]> { + return new Promise((res, rej) => { + const keepOriginal = ref(defaultStore.state.keepOriginalUploading); os.popupMenu([label ? { text: label, @@ -81,23 +87,23 @@ function select(src: any, label: string | null, multiple: boolean): Promise<Driv }, { text: i18n.ts.upload, icon: 'ti ti-upload', - action: chooseFileFromPc, + action: () => chooseFileFromPc(multiple, keepOriginal.value).then(files => res(files)), }, { text: i18n.ts.fromDrive, icon: 'ti ti-cloud', - action: chooseFileFromDrive, + action: () => chooseFileFromDrive(multiple).then(files => res(files)), }, { text: i18n.ts.fromUrl, icon: 'ti ti-link', - action: chooseFileFromUrl, + action: () => chooseFileFromUrl().then(file => res([file])), }], src); }); } export function selectFile(src: any, label: string | null = null): Promise<DriveFile> { - return select(src, label, false) as Promise<DriveFile>; + return select(src, label, false).then(files => files[0]); } export function selectFiles(src: any, label: string | null = null): Promise<DriveFile[]> { - return select(src, label, true) as Promise<DriveFile[]>; + return select(src, label, true); } |