From 9d8949a16c835ba355b144c444bd755a73afa0a9 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 19 May 2025 14:38:10 +0900 Subject: [PATCH 1/4] =?UTF-8?q?enhance(frontend):=20URL=E3=83=97=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E3=82=92=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E3=83=BC=E3=82=B5=E3=82=A4=E3=83=89=E3=81=A7=E7=84=A1=E5=8A=B9?= =?UTF-8?q?=E5=8C=96=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/index.d.ts | 4 ++++ locales/ja-JP.yml | 1 + packages/frontend/src/components/MkLink.vue | 2 +- packages/frontend/src/components/MkNote.vue | 2 +- packages/frontend/src/components/MkNoteDetailed.vue | 2 +- packages/frontend/src/components/MkUrlPreview.vue | 2 +- .../frontend/src/components/MkYouTubePlayer.vue | 2 +- packages/frontend/src/components/global/MkUrl.vue | 2 +- packages/frontend/src/components/page/page.text.vue | 2 +- packages/frontend/src/instance.ts | 2 -- .../frontend/src/pages/settings/preferences.vue | 13 +++++++++++++ packages/frontend/src/preferences/def.ts | 3 +++ .../{player-url-transform.ts => url-preview.ts} | 5 +++++ 13 files changed, 33 insertions(+), 9 deletions(-) rename packages/frontend/src/utility/{player-url-transform.ts => url-preview.ts} (77%) diff --git a/locales/index.d.ts b/locales/index.d.ts index 24be6be0cd..52cb880d29 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -5781,6 +5781,10 @@ export interface Locale extends ILocale { * リアルタイムモードがオンのときは、この設定に関わらずリアルタイムでコンテンツが更新されます。 */ "contentsUpdateFrequency_description2": string; + /** + * URLプレビューを表示する + */ + "showUrlPreview": string; "_chat": { /** * 送信者の名前を表示 diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index ab2ea71aa0..a27c0e5c3a 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1445,6 +1445,7 @@ _settings: contentsUpdateFrequency: "コンテンツの取得頻度" contentsUpdateFrequency_description: "高いほどリアルタイムにコンテンツが更新されますが、パフォーマンスが低下し、通信量とバッテリーの消費が多くなります。" contentsUpdateFrequency_description2: "リアルタイムモードがオンのときは、この設定に関わらずリアルタイムでコンテンツが更新されます。" + showUrlPreview: "URLプレビューを表示する" _chat: showSenderName: "送信者の名前を表示" diff --git a/packages/frontend/src/components/MkLink.vue b/packages/frontend/src/components/MkLink.vue index 7589c4900b..309ef727da 100644 --- a/packages/frontend/src/components/MkLink.vue +++ b/packages/frontend/src/components/MkLink.vue @@ -19,7 +19,7 @@ import { defineAsyncComponent, ref } from 'vue'; import { url as local } from '@@/js/config.js'; import { useTooltip } from '@/composables/use-tooltip.js'; import * as os from '@/os.js'; -import { isEnabledUrlPreview } from '@/instance.js'; +import { isEnabledUrlPreview } from '@/utility/url-preview.js'; import type { MkABehavior } from '@/components/global/MkA.vue'; import { maybeMakeRelative } from '@@/js/url.js'; diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index 7d3986a036..ee8a470b0e 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -234,7 +234,7 @@ import { claimAchievement } from '@/utility/achievements.js'; import { getNoteSummary } from '@/utility/get-note-summary.js'; import MkRippleEffect from '@/components/MkRippleEffect.vue'; import { showMovedDialog } from '@/utility/show-moved-dialog.js'; -import { isEnabledUrlPreview } from '@/instance.js'; +import { isEnabledUrlPreview } from '@/utility/url-preview.js'; import { focusPrev, focusNext } from '@/utility/focus.js'; import { getAppearNote } from '@/utility/get-appear-note.js'; import { prefer } from '@/preferences.js'; diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index ea59254f3d..767f4c88ce 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -268,7 +268,7 @@ import MkUserCardMini from '@/components/MkUserCardMini.vue'; import MkPagination from '@/components/MkPagination.vue'; import MkReactionIcon from '@/components/MkReactionIcon.vue'; import MkButton from '@/components/MkButton.vue'; -import { isEnabledUrlPreview } from '@/instance.js'; +import { isEnabledUrlPreview } from '@/utility/url-preview.js'; import { getAppearNote } from '@/utility/get-appear-note.js'; import { prefer } from '@/preferences.js'; import { getPluginHandlers } from '@/plugin.js'; diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue index 71c8a6a6e8..eacdb6538d 100644 --- a/packages/frontend/src/components/MkUrlPreview.vue +++ b/packages/frontend/src/components/MkUrlPreview.vue @@ -91,7 +91,7 @@ import { i18n } from '@/i18n.js'; import * as os from '@/os.js'; import { deviceKind } from '@/utility/device-kind.js'; import MkButton from '@/components/MkButton.vue'; -import { transformPlayerUrl } from '@/utility/player-url-transform.js'; +import { transformPlayerUrl } from '@/utility/url-preview.js'; import { store } from '@/store.js'; import { prefer } from '@/preferences.js'; import { maybeMakeRelative } from '@@/js/url.js'; diff --git a/packages/frontend/src/components/MkYouTubePlayer.vue b/packages/frontend/src/components/MkYouTubePlayer.vue index ab62a5113d..2375bcc9eb 100644 --- a/packages/frontend/src/components/MkYouTubePlayer.vue +++ b/packages/frontend/src/components/MkYouTubePlayer.vue @@ -27,7 +27,7 @@ SPDX-License-Identifier: AGPL-3.0-only import { ref } from 'vue'; import { versatileLang } from '@@/js/intl-const.js'; import MkWindow from '@/components/MkWindow.vue'; -import { transformPlayerUrl } from '@/utility/player-url-transform.js'; +import { transformPlayerUrl } from '@/utility/url-preview.js'; import { prefer } from '@/preferences.js'; const props = defineProps<{ diff --git a/packages/frontend/src/components/global/MkUrl.vue b/packages/frontend/src/components/global/MkUrl.vue index 2478b59f00..1da16b8923 100644 --- a/packages/frontend/src/components/global/MkUrl.vue +++ b/packages/frontend/src/components/global/MkUrl.vue @@ -30,7 +30,7 @@ import { toUnicode as decodePunycode } from 'punycode.js'; import { url as local } from '@@/js/config.js'; import * as os from '@/os.js'; import { useTooltip } from '@/composables/use-tooltip.js'; -import { isEnabledUrlPreview } from '@/instance.js'; +import { isEnabledUrlPreview } from '@/utility/url-preview.js'; import type { MkABehavior } from '@/components/global/MkA.vue'; import { maybeMakeRelative } from '@@/js/url.js'; diff --git a/packages/frontend/src/components/page/page.text.vue b/packages/frontend/src/components/page/page.text.vue index 7702e250e4..a00eb0b5ca 100644 --- a/packages/frontend/src/components/page/page.text.vue +++ b/packages/frontend/src/components/page/page.text.vue @@ -17,7 +17,7 @@ import { defineAsyncComponent } from 'vue'; import * as mfm from 'mfm-js'; import * as Misskey from 'misskey-js'; import { extractUrlFromMfm } from '@/utility/extract-url-from-mfm.js'; -import { isEnabledUrlPreview } from '@/instance.js'; +import { isEnabledUrlPreview } from '@/utility/url-preview.js'; const MkUrlPreview = defineAsyncComponent(() => import('@/components/MkUrlPreview.vue')); diff --git a/packages/frontend/src/instance.ts b/packages/frontend/src/instance.ts index 2943e60e43..a5397f0c0d 100644 --- a/packages/frontend/src/instance.ts +++ b/packages/frontend/src/instance.ts @@ -29,8 +29,6 @@ if (providedAt > cachedAt) { export const instance: Misskey.entities.MetaDetailed = reactive(cachedMeta ?? {}); -export const isEnabledUrlPreview = computed(() => instance.enableUrlPreview ?? true); - export async function fetchInstance(force = false): Promise { if (!force) { const cachedAt = miLocalStorage.getItem('instanceCachedAt') ? parseInt(miLocalStorage.getItem('instanceCachedAt')!) : 0; diff --git a/packages/frontend/src/pages/settings/preferences.vue b/packages/frontend/src/pages/settings/preferences.vue index 8a8774fcd0..4306adae9f 100644 --- a/packages/frontend/src/pages/settings/preferences.vue +++ b/packages/frontend/src/pages/settings/preferences.vue @@ -602,6 +602,18 @@ SPDX-License-Identifier: AGPL-3.0-only + + +
{{ i18n.ts._clientPerformanceIssueTip.title }}
@@ -845,6 +857,7 @@ const chatShowSenderName = prefer.model('chat.showSenderName'); const chatSendOnEnter = prefer.model('chat.sendOnEnter'); const useStickyIcons = prefer.model('useStickyIcons'); const enableHighQualityImagePlaceholders = prefer.model('enableHighQualityImagePlaceholders'); +const showUrlPreview = prefer.model('showUrlPreview'); const reduceAnimation = prefer.model('animation', v => !v, v => !v); const animatedMfm = prefer.model('animatedMfm'); const disableShowingAnimatedImages = prefer.model('disableShowingAnimatedImages'); diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts index b3af8cab87..44c0792dc0 100644 --- a/packages/frontend/src/preferences/def.ts +++ b/packages/frontend/src/preferences/def.ts @@ -348,6 +348,9 @@ export const PREF_DEF = { mutingEmojis: { default: [] as string[], }, + showUrlPreview: { + default: true, + }, 'sound.masterVolume': { default: 0.3, diff --git a/packages/frontend/src/utility/player-url-transform.ts b/packages/frontend/src/utility/url-preview.ts similarity index 77% rename from packages/frontend/src/utility/player-url-transform.ts rename to packages/frontend/src/utility/url-preview.ts index 39c6df6500..7cab6721ee 100644 --- a/packages/frontend/src/utility/player-url-transform.ts +++ b/packages/frontend/src/utility/url-preview.ts @@ -2,7 +2,12 @@ * SPDX-FileCopyrightText: syuilo and misskey-project * SPDX-License-Identifier: AGPL-3.0-only */ +import { computed } from 'vue'; import { hostname } from '@@/js/config.js'; +import { instance } from '@/instance.js'; +import { prefer } from '@/preferences.js'; + +export const isEnabledUrlPreview = computed(() => (instance.enableUrlPreview && prefer.r.showUrlPreview.value)); export function transformPlayerUrl(url: string): string { const urlObj = new URL(url); From 15cbfb8c6952095297a141e83e9270fefceca751 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 19 May 2025 14:45:22 +0900 Subject: [PATCH 2/4] fix lint --- packages/frontend/src/pages/settings/preferences.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/frontend/src/pages/settings/preferences.vue b/packages/frontend/src/pages/settings/preferences.vue index 4306adae9f..68ecb108c0 100644 --- a/packages/frontend/src/pages/settings/preferences.vue +++ b/packages/frontend/src/pages/settings/preferences.vue @@ -602,7 +602,6 @@ SPDX-License-Identifier: AGPL-3.0-only -
-
+
diff --git a/packages/frontend/src/pages/settings/preferences.vue b/packages/frontend/src/pages/settings/preferences.vue index 68ecb108c0..18dfc2250c 100644 --- a/packages/frontend/src/pages/settings/preferences.vue +++ b/packages/frontend/src/pages/settings/preferences.vue @@ -602,17 +602,6 @@ SPDX-License-Identifier: AGPL-3.0-only - -
{{ i18n.ts._clientPerformanceIssueTip.title }}
@@ -655,9 +644,13 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts._dataSaver._avatar.title }} - - {{ i18n.ts._dataSaver._urlPreview.title }} - + + {{ i18n.ts._dataSaver._disableUrlPreview.title }} + + + + {{ i18n.ts._dataSaver._urlPreviewThumbnail.title }} + {{ i18n.ts._dataSaver._code.title }} @@ -856,7 +849,6 @@ const chatShowSenderName = prefer.model('chat.showSenderName'); const chatSendOnEnter = prefer.model('chat.sendOnEnter'); const useStickyIcons = prefer.model('useStickyIcons'); const enableHighQualityImagePlaceholders = prefer.model('enableHighQualityImagePlaceholders'); -const showUrlPreview = prefer.model('showUrlPreview'); const reduceAnimation = prefer.model('animation', v => !v, v => !v); const animatedMfm = prefer.model('animatedMfm'); const disableShowingAnimatedImages = prefer.model('disableShowingAnimatedImages'); diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts index 44c0792dc0..7b0628e937 100644 --- a/packages/frontend/src/preferences/def.ts +++ b/packages/frontend/src/preferences/def.ts @@ -290,9 +290,10 @@ export const PREF_DEF = { default: { media: false, avatar: false, - urlPreview: false, + urlPreviewThumbnail: false, + disableUrlPreview: false, code: false, - } as Record, + } satisfies Record, }, hemisphere: { default: hemisphere as 'N' | 'S', @@ -348,9 +349,6 @@ export const PREF_DEF = { mutingEmojis: { default: [] as string[], }, - showUrlPreview: { - default: true, - }, 'sound.masterVolume': { default: 0.3, diff --git a/packages/frontend/src/utility/url-preview.ts b/packages/frontend/src/utility/url-preview.ts index 7cab6721ee..e7379f4202 100644 --- a/packages/frontend/src/utility/url-preview.ts +++ b/packages/frontend/src/utility/url-preview.ts @@ -7,7 +7,7 @@ import { hostname } from '@@/js/config.js'; import { instance } from '@/instance.js'; import { prefer } from '@/preferences.js'; -export const isEnabledUrlPreview = computed(() => (instance.enableUrlPreview && prefer.r.showUrlPreview.value)); +export const isEnabledUrlPreview = computed(() => (instance.enableUrlPreview && !prefer.r.dataSaver.value.disableUrlPreview)); export function transformPlayerUrl(url: string): string { const urlObj = new URL(url);