diff options
| author | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-03-28 09:47:34 +0900 |
|---|---|---|
| committer | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-03-28 09:47:34 +0900 |
| commit | a25fa62d645e6b18d676b7c994f2f1218ebe4251 (patch) | |
| tree | e8310a5f070f77d654698860cfb29c7ef36cc67a /packages | |
| parent | refactor (diff) | |
| download | sharkey-a25fa62d645e6b18d676b7c994f2f1218ebe4251.tar.gz sharkey-a25fa62d645e6b18d676b7c994f2f1218ebe4251.tar.bz2 sharkey-a25fa62d645e6b18d676b7c994f2f1218ebe4251.zip | |
enhance(frontend): ファイルアップロード処理のリファクタと設定の簡略化
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/frontend/src/components/MkDrive.vue | 93 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/custom-emojis-manager.local.register.vue | 10 | ||||
| -rw-r--r-- | packages/frontend/src/pages/drive.vue | 2 | ||||
| -rw-r--r-- | packages/frontend/src/pages/settings/drive.vue | 10 | ||||
| -rw-r--r-- | packages/frontend/src/pref-migrate.ts | 1 | ||||
| -rw-r--r-- | packages/frontend/src/preferences/def.ts | 3 | ||||
| -rw-r--r-- | packages/frontend/src/utility/autogen/settings-search-index.ts | 9 | ||||
| -rw-r--r-- | packages/frontend/src/utility/select-file.ts | 12 | ||||
| -rw-r--r-- | packages/frontend/src/utility/upload.ts | 2 |
9 files changed, 52 insertions, 90 deletions
diff --git a/packages/frontend/src/components/MkDrive.vue b/packages/frontend/src/components/MkDrive.vue index edbdf1cca1..c212167c8f 100644 --- a/packages/frontend/src/components/MkDrive.vue +++ b/packages/frontend/src/components/MkDrive.vue @@ -4,34 +4,37 @@ SPDX-License-Identifier: AGPL-3.0-only --> <template> -<div :class="$style.root"> - <nav :class="$style.nav"> - <div :class="$style.navPath" @contextmenu.prevent.stop="() => {}"> - <XNavFolder - :class="[$style.navPathItem, { [$style.navCurrent]: folder == null }]" - :parentFolder="folder" - @move="move" - @upload="upload" - @removeFile="removeFile" - @removeFolder="removeFolder" - /> - <template v-for="f in hierarchyFolders"> - <span :class="[$style.navPathItem, $style.navSeparator]"><i class="ti ti-chevron-right"></i></span> +<MkStickyContainer> + <template #header> + <nav :class="$style.nav"> + <div :class="$style.navPath" @contextmenu.prevent.stop="() => {}"> <XNavFolder - :folder="f" + :class="[$style.navPathItem, { [$style.navCurrent]: folder == null }]" :parentFolder="folder" - :class="[$style.navPathItem]" @move="move" @upload="upload" @removeFile="removeFile" @removeFolder="removeFolder" /> - </template> - <span v-if="folder != null" :class="[$style.navPathItem, $style.navSeparator]"><i class="ti ti-chevron-right"></i></span> - <span v-if="folder != null" :class="[$style.navPathItem, $style.navCurrent]">{{ folder.name }}</span> - </div> - <button class="_button" :class="$style.navMenu" @click="showMenu"><i class="ti ti-dots"></i></button> - </nav> + <template v-for="f in hierarchyFolders"> + <span :class="[$style.navPathItem, $style.navSeparator]"><i class="ti ti-chevron-right"></i></span> + <XNavFolder + :folder="f" + :parentFolder="folder" + :class="[$style.navPathItem]" + @move="move" + @upload="upload" + @removeFile="removeFile" + @removeFolder="removeFolder" + /> + </template> + <span v-if="folder != null" :class="[$style.navPathItem, $style.navSeparator]"><i class="ti ti-chevron-right"></i></span> + <span v-if="folder != null" :class="[$style.navPathItem, $style.navCurrent]">{{ folder.name }}</span> + </div> + <button class="_button" :class="$style.navMenu" @click="showMenu"><i class="ti ti-dots"></i></button> + </nav> + </template> + <div ref="main" :class="[$style.main, { [$style.uploading]: uploadings.length > 0, [$style.fetching]: fetching }]" @@ -91,8 +94,7 @@ SPDX-License-Identifier: AGPL-3.0-only <MkLoading v-if="fetching"/> </div> <div v-if="draghover" :class="$style.dropzone"></div> - <input ref="fileInput" style="display: none;" type="file" accept="*/*" multiple tabindex="-1" @change="onChangeFileInput"/> -</div> +</MkStickyContainer> </template> <script lang="ts" setup> @@ -110,6 +112,7 @@ import { i18n } from '@/i18n.js'; import { uploadFile, uploads } from '@/utility/upload.js'; import { claimAchievement } from '@/utility/achievements.js'; import { prefer } from '@/preferences.js'; +import { chooseFileFromPc } from '@/utility/select-file.js'; const props = withDefaults(defineProps<{ initialFolder?: Misskey.entities.DriveFolder; @@ -130,7 +133,6 @@ const emit = defineEmits<{ }>(); const loadMoreFiles = useTemplateRef('loadMoreFiles'); -const fileInput = useTemplateRef('fileInput'); const folder = ref<Misskey.entities.DriveFolder | null>(null); const files = ref<Misskey.entities.DriveFile[]>([]); @@ -142,7 +144,6 @@ const selectedFiles = ref<Misskey.entities.DriveFile[]>([]); const selectedFolders = ref<Misskey.entities.DriveFolder[]>([]); const uploadings = uploads; const connection = useStream().useChannel('drive'); -const keepOriginal = ref<boolean>(prefer.s.keepOriginalUploading); // 外部渡しが多いので$refは使わないほうがよい // ドロップされようとしているか const draghover = ref(false); @@ -304,10 +305,6 @@ function onDrop(ev: DragEvent) { //#endregion } -function selectLocalFile() { - fileInput.value?.click(); -} - function urlUpload() { os.inputText({ title: i18n.ts.uploadFromUrl, @@ -383,15 +380,8 @@ function deleteFolder(folderToDelete: Misskey.entities.DriveFolder) { }); } -function onChangeFileInput() { - if (!fileInput.value?.files) return; - for (const file of Array.from(fileInput.value.files)) { - upload(file, folder.value); - } -} - -function upload(file: File, folderToUpload?: Misskey.entities.DriveFolder | null) { - uploadFile(file, (folderToUpload && typeof folderToUpload === 'object') ? folderToUpload.id : null, undefined, keepOriginal.value).then(res => { +function upload(file: File, folderToUpload?: Misskey.entities.DriveFolder | null, keepOriginal?: boolean) { + uploadFile(file, (folderToUpload && typeof folderToUpload === 'object') ? folderToUpload.id : null, undefined, keepOriginal).then(res => { addFile(res, true); }); } @@ -630,16 +620,20 @@ function getMenu() { const menu: MenuItem[] = []; menu.push({ - type: 'switch', - text: i18n.ts.keepOriginalUploading, - ref: keepOriginal, - }, { type: 'divider' }, { text: i18n.ts.addFile, type: 'label', }, { + text: i18n.ts.upload + ' (' + i18n.ts.compress + ')', + icon: 'ti ti-upload', + action: () => { + chooseFileFromPc(true, { keepOriginal: false }); + }, + }, { text: i18n.ts.upload, icon: 'ti ti-upload', - action: () => { selectLocalFile(); }, + action: () => { + chooseFileFromPc(true, { keepOriginal: true }); + }, }, { text: i18n.ts.fromUrl, icon: 'ti ti-link', @@ -751,22 +745,17 @@ onBeforeUnmount(() => { </script> <style lang="scss" module> -.root { - display: flex; - flex-direction: column; - height: 100%; -} - .nav { display: flex; - z-index: 2; width: 100%; padding: 0 8px; box-sizing: border-box; overflow: auto; font-size: 0.9em; - box-shadow: 0 1px 0 var(--MI_THEME-divider); - user-select: none; + background: color(from var(--MI_THEME-bg) srgb r g b / 0.75); + -webkit-backdrop-filter: var(--MI-blur, blur(15px)); + backdrop-filter: var(--MI-blur, blur(15px)); + border-bottom: solid 0.5px var(--MI_THEME-divider); } .navPath { diff --git a/packages/frontend/src/pages/admin/custom-emojis-manager.local.register.vue b/packages/frontend/src/pages/admin/custom-emojis-manager.local.register.vue index 666e3c95ac..eff7efd0fa 100644 --- a/packages/frontend/src/pages/admin/custom-emojis-manager.local.register.vue +++ b/packages/frontend/src/pages/admin/custom-emojis-manager.local.register.vue @@ -18,11 +18,6 @@ SPDX-License-Identifier: AGPL-3.0-only </option> </MkSelect> - <MkSwitch v-model="keepOriginalUploading"> - <template #label>{{ i18n.ts.keepOriginalUploading }}</template> - <template #caption>{{ i18n.ts.keepOriginalUploadingDescription }}</template> - </MkSwitch> - <MkSwitch v-model="directoryToCategory"> <template #label>{{ i18n.ts._customEmojisManager._local._register.directoryToCategoryLabel }}</template> <template #caption>{{ i18n.ts._customEmojisManager._local._register.directoryToCategoryCaption }}</template> @@ -245,7 +240,6 @@ function setupGrid(): GridSetting { const uploadFolders = ref<FolderItem[]>([]); const gridItems = ref<GridItem[]>([]); const selectedFolderId = ref(prefer.s.uploadFolder); -const keepOriginalUploading = ref(prefer.s.keepOriginalUploading); const directoryToCategory = ref<boolean>(false); const registerButtonDisabled = ref<boolean>(false); const requestLogs = ref<RequestLogItem[]>([]); @@ -338,7 +332,7 @@ async function onDrop(ev: DragEvent) { it.file, selectedFolderId.value, it.file.name.replace(/\.[^.]+$/, ''), - keepOriginalUploading.value, + true, ), }), ), @@ -373,7 +367,7 @@ async function onFileSelectClicked() { true, { uploadFolder: selectedFolderId.value, - keepOriginal: keepOriginalUploading.value, + keepOriginal: true, // 拡張子は消す nameConverter: (file) => file.name.replace(/\.[a-zA-Z0-9]+$/, ''), }, diff --git a/packages/frontend/src/pages/drive.vue b/packages/frontend/src/pages/drive.vue index c5813a4523..bee54f3fd2 100644 --- a/packages/frontend/src/pages/drive.vue +++ b/packages/frontend/src/pages/drive.vue @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only <template> <div> - <XDrive ref="drive" @cd="x => folder = x"/> + <XDrive @cd="x => folder = x"/> </div> </template> diff --git a/packages/frontend/src/pages/settings/drive.vue b/packages/frontend/src/pages/settings/drive.vue index 8ff37d0404..2130cbc868 100644 --- a/packages/frontend/src/pages/settings/drive.vue +++ b/packages/frontend/src/pages/settings/drive.vue @@ -53,15 +53,6 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts.drivecleaner }} </FormLink> - <SearchMarker :keywords="['keep', 'original', 'raw', 'upload']"> - <MkPreferenceContainer k="keepOriginalUploading"> - <MkSwitch v-model="keepOriginalUploading"> - <template #label><SearchLabel>{{ i18n.ts.keepOriginalUploading }}</SearchLabel></template> - <template #caption><SearchKeyword>{{ i18n.ts.keepOriginalUploadingDescription }}</SearchKeyword></template> - </MkSwitch> - </MkPreferenceContainer> - </SearchMarker> - <SearchMarker :keywords="['keep', 'original', 'filename']"> <MkPreferenceContainer k="keepOriginalFilename"> <MkSwitch v-model="keepOriginalFilename"> @@ -130,7 +121,6 @@ const meterStyle = computed(() => { }; }); -const keepOriginalUploading = prefer.model('keepOriginalUploading'); const keepOriginalFilename = prefer.model('keepOriginalFilename'); misskeyApi('drive').then(info => { diff --git a/packages/frontend/src/pref-migrate.ts b/packages/frontend/src/pref-migrate.ts index beeaac8383..5d48508def 100644 --- a/packages/frontend/src/pref-migrate.ts +++ b/packages/frontend/src/pref-migrate.ts @@ -66,7 +66,6 @@ export function migrateOldSettings() { prefer.commit('collapseRenotes', store.s.collapseRenotes); prefer.commit('rememberNoteVisibility', store.s.rememberNoteVisibility); prefer.commit('uploadFolder', store.s.uploadFolder); - prefer.commit('keepOriginalUploading', store.s.keepOriginalUploading); prefer.commit('menu', store.s.menu); prefer.commit('statusbars', store.s.statusbars); prefer.commit('pinnedUserLists', store.s.pinnedUserLists); diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts index b588cc3b5f..9fa4e6af35 100644 --- a/packages/frontend/src/preferences/def.ts +++ b/packages/frontend/src/preferences/def.ts @@ -118,9 +118,6 @@ export const PREF_DEF = { keepCw: { default: true, }, - keepOriginalUploading: { - default: false, - }, rememberNoteVisibility: { default: false, }, diff --git a/packages/frontend/src/utility/autogen/settings-search-index.ts b/packages/frontend/src/utility/autogen/settings-search-index.ts index c939c93425..8ec9ef99c9 100644 --- a/packages/frontend/src/utility/autogen/settings-search-index.ts +++ b/packages/frontend/src/utility/autogen/settings-search-index.ts @@ -759,21 +759,16 @@ export const searchIndexes: SearchIndexItem[] = [ }, { id: 'goQdtf3dD', - label: i18n.ts.keepOriginalUploading, - keywords: ['keep', 'original', 'raw', 'upload', i18n.ts.keepOriginalUploadingDescription], - }, - { - id: '83xRo0XJl', label: i18n.ts.keepOriginalFilename, keywords: ['keep', 'original', 'filename', i18n.ts.keepOriginalFilenameDescription], }, { - id: 'wf77yRQQq', + id: '83xRo0XJl', label: i18n.ts.alwaysMarkSensitive, keywords: ['always', 'default', 'mark', 'nsfw', 'sensitive', 'media', 'file'], }, { - id: '3pxwNB8e4', + id: 'BrBqZL35E', label: i18n.ts.enableAutoSensitive, keywords: ['auto', 'nsfw', 'sensitive', 'media', 'file', i18n.ts.enableAutoSensitiveDescription], }, diff --git a/packages/frontend/src/utility/select-file.ts b/packages/frontend/src/utility/select-file.ts index b9b3687483..731ef58302 100644 --- a/packages/frontend/src/utility/select-file.ts +++ b/packages/frontend/src/utility/select-file.ts @@ -21,7 +21,7 @@ export function chooseFileFromPc( }, ): Promise<Misskey.entities.DriveFile[]> { const uploadFolder = options?.uploadFolder ?? prefer.s.uploadFolder; - const keepOriginal = options?.keepOriginal ?? prefer.s.keepOriginalUploading; + const keepOriginal = options?.keepOriginal ?? false; const nameConverter = options?.nameConverter ?? (() => undefined); return new Promise((res, rej) => { @@ -96,19 +96,17 @@ export function chooseFileFromUrl(): Promise<Misskey.entities.DriveFile> { function select(src: HTMLElement | EventTarget | null, label: string | null, multiple: boolean): Promise<Misskey.entities.DriveFile[]> { return new Promise((res, rej) => { - const keepOriginal = ref(prefer.s.keepOriginalUploading); - os.popupMenu([label ? { text: label, type: 'label', } : undefined, { - type: 'switch', - text: i18n.ts.keepOriginalUploading, - ref: keepOriginal, + text: i18n.ts.upload + ' (' + i18n.ts.compress + ')', + icon: 'ti ti-upload', + action: () => chooseFileFromPc(multiple, { keepOriginal: false }).then(files => res(files)), }, { text: i18n.ts.upload, icon: 'ti ti-upload', - action: () => chooseFileFromPc(multiple, { keepOriginal: keepOriginal.value }).then(files => res(files)), + action: () => chooseFileFromPc(multiple, { keepOriginal: true }).then(files => res(files)), }, { text: i18n.ts.fromDrive, icon: 'ti ti-cloud', diff --git a/packages/frontend/src/utility/upload.ts b/packages/frontend/src/utility/upload.ts index e13d793ffb..b43fea8e15 100644 --- a/packages/frontend/src/utility/upload.ts +++ b/packages/frontend/src/utility/upload.ts @@ -34,7 +34,7 @@ export function uploadFile( file: File, folder?: string | Misskey.entities.DriveFolder | null, name?: string, - keepOriginal: boolean = prefer.s.keepOriginalUploading, + keepOriginal = false, ): Promise<Misskey.entities.DriveFile> { if ($i == null) throw new Error('Not logged in'); |