diff --git a/locales/en-US.yml b/locales/en-US.yml index 22d30a871c..fe7bc3c451 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -696,6 +696,10 @@ create: "Create" notificationSetting: "Notification settings" notificationSettingDesc: "Select the types of notification to display." enableFaviconNotificationDot: "Enable favicon notification dot" +verifyNotificationDotWorkingButton: "Check if the notification dot works on your instance" +notificationDotNotWorking: "Unfortunately, this instance does not support the notification dot feature at this time." +notificationDotWorking: "The notification dot is functioning properly on this instance." +notificationDotNotWorkingAdvice: "If the notification dot doesn't work, ask an admin to check our documentation {link}" useGlobalSetting: "Use global settings" useGlobalSettingDesc: "If turned on, your account's notification settings will be used. If turned off, individual configurations can be made." other: "Other" diff --git a/locales/index.d.ts b/locales/index.d.ts index e5f77cf239..7314151708 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -2793,9 +2793,25 @@ export interface Locale extends ILocale { */ "notificationSettingDesc": string; /** - * ファビコン通知ドットを有効にする + * 未読の通知があるときにタブのアイコンを目立たせる */ "enableFaviconNotificationDot": string; + /** + * 通知ドットがインスタンスで機能するかどうかを確認します。 + */ + "verifyNotificationDotWorkingButton": string; + /** + * 残念ながら、このインスタンスは現時点では通知ドット機能をサポートしていません。 + */ + "notificationDotNotWorking": string; + /** + * 通知ドットは、このインスタンスで正しく機能しています。 + */ + "notificationDotWorking": string; + /** + * 通知ドットが機能しない場合は、管理者にドキュメントを確認するように依頼してください {link} + */ + "notificationDotNotWorkingAdvice": ParameterizedString<"link">; /** * グローバル設定を使う */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 454e0b3cee..8485037111 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -694,7 +694,11 @@ channel: "チャンネル" create: "作成" notificationSetting: "通知設定" notificationSettingDesc: "表示する通知の種別を選択してください。" -enableFaviconNotificationDot: "ファビコン通知ドットを有効にする" +enableFaviconNotificationDot: "未読の通知があるときにタブのアイコンを目立たせる" +verifyNotificationDotWorkingButton: "通知ドットがインスタンスで機能するかどうかを確認します。" +notificationDotNotWorking: "残念ながら、このインスタンスは現時点では通知ドット機能をサポートしていません。" +notificationDotWorking: "通知ドットは、このインスタンスで正しく機能しています。" +notificationDotNotWorkingAdvice: "通知ドットが機能しない場合は、管理者にドキュメントを確認するように依頼してください {link}" useGlobalSetting: "グローバル設定を使う" useGlobalSettingDesc: "オンにすると、アカウントの通知設定が使用されます。オフにすると、個別に設定できるようになります。" other: "その他" diff --git a/packages/frontend/src/boot/main-boot.ts b/packages/frontend/src/boot/main-boot.ts index 013fa7c37c..e7c2ef9449 100644 --- a/packages/frontend/src/boot/main-boot.ts +++ b/packages/frontend/src/boot/main-boot.ts @@ -21,6 +21,7 @@ import { initializeSw } from '@/scripts/initialize-sw.js'; import { deckStore } from '@/ui/deck/deck-store.js'; import { emojiPicker } from '@/scripts/emoji-picker.js'; import { mainRouter } from '@/router/main.js'; +import { setFavIconDot } from '@/scripts/favicon-dot.js'; export async function mainBoot() { const { isClientUpdated } = await common(() => createApp( @@ -261,6 +262,14 @@ export async function mainBoot() { } } + function attemptShowNotificationDot() { + if (defaultStore.state.enableFaviconNotificationDot) { + setFavIconDot(true); + } + } + + if ($i.hasUnreadNotification) attemptShowNotificationDot(); + const main = markRaw(stream.useChannel('main', null, 'System')); // 自分の情報が更新されたとき @@ -269,6 +278,8 @@ export async function mainBoot() { }); main.on('readAllNotifications', () => { + setFavIconDot(false); + updateAccount({ hasUnreadNotification: false, unreadNotificationsCount: 0, @@ -276,6 +287,8 @@ export async function mainBoot() { }); main.on('unreadNotification', () => { + attemptShowNotificationDot(); + const unreadNotificationsCount = ($i?.unreadNotificationsCount ?? 0) + 1; updateAccount({ hasUnreadNotification: true, diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue index d7bb6156e4..eef69f694a 100644 --- a/packages/frontend/src/pages/settings/general.vue +++ b/packages/frontend/src/pages/settings/general.vue @@ -139,8 +139,22 @@ SPDX-License-Identifier: AGPL-3.0-only