From 865b3039ccf6eec4f277dbb33296ab767d2ed7ce Mon Sep 17 00:00:00 2001
From: anatawa12 <anatawa12@icloud.com>
Date: Sun, 28 Jul 2024 14:44:15 +0900
Subject: [PATCH] =?UTF-8?q?fix:=20deck=20ui=E3=81=AE=E9=80=9A=E7=9F=A5?=
 =?UTF-8?q?=E9=9F=B3=E3=81=8C=E9=87=8D=E3=81=AA=E3=82=8B=E5=95=8F=E9=A1=8C?=
 =?UTF-8?q?=20(#14029)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* fix: deck uiの通知音が重なる

* docs: Fix: deck uiの通知音が重なる問題

* unexport internal function

* fix

Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com>

* chore: improve condition

* docs: move js dco comment

---------

Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
---
 CHANGELOG.md                           |  1 +
 packages/frontend/src/scripts/sound.ts | 23 ++++++++++++++++-------
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4b35034cc8..c2e9c8e258 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -41,6 +41,7 @@
 - Fix: リアクションしたユーザー一覧のユーザー名がはみ出る問題を修正  
   (Cherry-picked from https://github.com/MisskeyIO/misskey/pull/672)
 - Fix: `/share`ページにおいて絵文字ピッカーを開くことができない問題を修正
+- Fix: deck uiの通知音が重なる問題 (#14029)
 - Fix: ダイレクト投稿の"削除して編集"において、宛先が保持されていなかった問題を修正
 - Fix: 投稿フォームへのURL貼り付けによる引用が下書きに保存されていなかった問題を修正
 - Fix: "削除して編集"や下書きにおいて、リアクションの受け入れ設定が保持/保存されていなかった問題を修正
diff --git a/packages/frontend/src/scripts/sound.ts b/packages/frontend/src/scripts/sound.ts
index bba855cd64..814e080811 100644
--- a/packages/frontend/src/scripts/sound.ts
+++ b/packages/frontend/src/scripts/sound.ts
@@ -124,10 +124,23 @@ export async function loadAudio(url: string, options?: { useCache?: boolean; })
  */
 export function playMisskeySfx(operationType: OperationType) {
 	const sound = defaultStore.state[`sound_${operationType}`];
-	if (sound.type == null || !canPlay || ('userActivation' in navigator && !navigator.userActivation.hasBeenActive)) return;
+	playMisskeySfxFile(sound);
+}
+
+/**
+ * サウンド設定形式で指定された音声を再生する
+ * @param soundStore サウンド設定
+ */
+export function playMisskeySfxFile(soundStore: SoundStore) {
+	// 連続して再生しない
+	if (!canPlay) return;
+	// ユーザーアクティベーションが必要な場合はそれがない場合は再生しない
+	if ('userActivation' in navigator && !navigator.userActivation.hasBeenActive) return;
+	// サウンドがない場合は再生しない
+	if (soundStore.type === null || soundStore.type === '_driveFile_' && !soundStore.fileUrl) return;
 
 	canPlay = false;
-	playMisskeySfxFile(sound).finally(() => {
+	playMisskeySfxFileInternal(soundStore).finally(() => {
 		// ごく短時間に音が重複しないように
 		setTimeout(() => {
 			canPlay = true;
@@ -135,11 +148,7 @@ export function playMisskeySfx(operationType: OperationType) {
 	});
 }
 
-/**
- * サウンド設定形式で指定された音声を再生する
- * @param soundStore サウンド設定
- */
-export async function playMisskeySfxFile(soundStore: SoundStore) {
+async function playMisskeySfxFileInternal(soundStore: SoundStore) {
 	if (soundStore.type === null || (soundStore.type === '_driveFile_' && !soundStore.fileUrl)) {
 		return;
 	}