From 4d4ac5dda5706e8ce5121137f16791d2f0ea7df6 Mon Sep 17 00:00:00 2001 From: mei23 Date: Sat, 22 Jan 2022 20:17:29 +0900 Subject: [PATCH 01/36] wip --- .../backend/src/services/drive/add-file.ts | 12 +++++++++--- packages/client/package.json | 1 + packages/client/src/os.ts | 17 +++++++++++++++-- packages/client/yarn.lock | 19 +++++++++++++++++++ 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/packages/backend/src/services/drive/add-file.ts b/packages/backend/src/services/drive/add-file.ts index 9de4465eb95b..c117fe9100e0 100644 --- a/packages/backend/src/services/drive/add-file.ts +++ b/packages/backend/src/services/drive/add-file.ts @@ -178,6 +178,7 @@ export async function generateAlts(path: string, type: string, generateWeb: bool } let img: sharp.Sharp | null = null; + let webpublicNeeded: boolean; try { img = sharp(path); @@ -191,6 +192,9 @@ export async function generateAlts(path: string, type: string, generateWeb: bool thumbnail: null, }; } + + webpublicNeeded = !!metadata.exif || !!metadata.icc || !!metadata.iptc || !!metadata.xmp || !!metadata.tifftagPhotoshop + || !metadata.width || metadata.width > 2048 || !metadata.height || metadata.height > 2048; } catch (e) { logger.warn(`sharp failed: ${e}`); return { @@ -206,11 +210,13 @@ export async function generateAlts(path: string, type: string, generateWeb: bool logger.info(`creating web image`); try { - if (['image/jpeg'].includes(type)) { + if (['image/jpeg'].includes(type) && webpublicNeeded) { webpublic = await convertSharpToJpeg(img, 2048, 2048); - } else if (['image/webp'].includes(type)) { + } else if (['image/webp'].includes(type) && webpublicNeeded) { webpublic = await convertSharpToWebp(img, 2048, 2048); - } else if (['image/png', 'image/svg+xml'].includes(type)) { + } else if (['image/png'].includes(type) && webpublicNeeded) { + webpublic = await convertSharpToPng(img, 2048, 2048); + } else if (['image/svg+xml'].includes(type)) { webpublic = await convertSharpToPng(img, 2048, 2048); } else { logger.debug(`web image not created (not an required image)`); diff --git a/packages/client/package.json b/packages/client/package.json index 6c4cf764d0c3..19a1fb5a6fb9 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -45,6 +45,7 @@ "autwh": "0.1.0", "blurhash": "1.1.4", "broadcast-channel": "4.9.0", + "browser-image-resizer": "2.2.1", "chart.js": "3.7.0", "chartjs-adapter-date-fns": "2.0.0", "chartjs-plugin-zoom": "1.2.0", diff --git a/packages/client/src/os.ts b/packages/client/src/os.ts index 378523e1bc7f..6e8a93822039 100644 --- a/packages/client/src/os.ts +++ b/packages/client/src/os.ts @@ -9,6 +9,7 @@ import MkPostFormDialog from '@/components/post-form-dialog.vue'; import MkWaitingDialog from '@/components/waiting-dialog.vue'; import { resolve } from '@/router'; import { $i } from '@/account'; +import { readAndCompressImage } from 'browser-image-resizer'; export const pendingApiRequestsCount = ref(0); @@ -548,7 +549,7 @@ export function upload(file: File, folder?: any, name?: string): Promise { + reader.onload = async (e) => { const ctx = reactive({ id: id, name: name || file.name || 'untitled', @@ -557,12 +558,24 @@ export function upload(file: File, folder?: any, name?: string): Promise Date: Sat, 29 Jan 2022 14:53:16 +0900 Subject: [PATCH 02/36] Update packages/client/src/os.ts Co-authored-by: tamaina --- packages/client/src/os.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/os.ts b/packages/client/src/os.ts index 6e8a93822039..5664cded77b6 100644 --- a/packages/client/src/os.ts +++ b/packages/client/src/os.ts @@ -567,7 +567,7 @@ export function upload(file: File, folder?: any, name?: string): Promise Date: Sat, 29 Jan 2022 18:37:36 +0900 Subject: [PATCH 03/36] =?UTF-8?q?=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E3=82=92Composition=20API=E5=8C=96=E3=80=81switch=E3=82=A2?= =?UTF-8?q?=E3=82=A4=E3=83=86=E3=83=A0=E8=BF=BD=E5=8A=A0=20=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=B3=E3=83=88=E3=82=B5=E3=82=A4?= =?UTF-8?q?=E3=83=89=E7=94=BB=E5=83=8F=E5=9C=A7=E7=B8=AE=E3=81=AE=E6=BA=96?= =?UTF-8?q?=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/ja-JP.yml | 2 + .../client/src/components/form/switch.vue | 64 +++--- .../client/src/components/ui/context-menu.vue | 128 +++++------- packages/client/src/components/ui/menu.vue | 189 ++++++++---------- .../client/src/components/ui/popup-menu.vue | 50 ++--- packages/client/src/os.ts | 9 +- packages/client/src/pages/settings/drive.vue | 7 +- packages/client/src/scripts/select-file.ts | 9 +- packages/client/src/store.ts | 4 + 9 files changed, 215 insertions(+), 247 deletions(-) diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index b3279d78b88f..8fd41e533b30 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -235,6 +235,8 @@ resetAreYouSure: "リセットしますか?" saved: "保存しました" messaging: "チャット" upload: "アップロード" +keepOriginalUploading: "オリジナル画像を保持" +keepOriginalUploadingDescription: "画像をアップロードする時にオリジナル版を保持します。オフにするとアップロード時にブラウザでWeb公開用画像を生成します。" fromDrive: "ドライブから" fromUrl: "URLから" uploadFromUrl: "URLアップロード" diff --git a/packages/client/src/components/form/switch.vue b/packages/client/src/components/form/switch.vue index f8a07b4caaae..e57941c6702e 100644 --- a/packages/client/src/components/form/switch.vue +++ b/packages/client/src/components/form/switch.vue @@ -20,44 +20,38 @@ - diff --git a/packages/client/src/components/ui/context-menu.vue b/packages/client/src/components/ui/context-menu.vue index 85606bf6d521..463426282aa2 100644 --- a/packages/client/src/components/ui/context-menu.vue +++ b/packages/client/src/components/ui/context-menu.vue @@ -1,88 +1,70 @@ -