diff --git a/frontend/src/melodies/MelodyDetail.jsx b/frontend/src/melodies/MelodyDetail.jsx index 7e72450..996e406 100644 --- a/frontend/src/melodies/MelodyDetail.jsx +++ b/frontend/src/melodies/MelodyDetail.jsx @@ -42,6 +42,44 @@ function Field({ label, children }) { ); } +function UrlField({ label, value }) { + const [copied, setCopied] = useState(false); + return ( +
Top = Note #, Bottom = Assigned Bell
+Top = Note, Bottom = Assigned Bell
@@ -432,9 +472,13 @@ export default function MelodyDetail() { e.preventDefault(); try { const token = localStorage.getItem("access_token"); - const res = await fetch(binaryUrl, { + let res = await fetch(binaryUrl, { headers: token ? { Authorization: `Bearer ${token}` } : {}, }); + // For external URLs (e.g. Firebase Storage), retry without auth header + if (!res.ok && binaryUrl.startsWith("http")) { + res = await fetch(binaryUrl); + } if (!res.ok) throw new Error(`Download failed: ${res.statusText}`); const blob = await res.blob(); const objectUrl = URL.createObjectURL(blob); diff --git a/frontend/src/melodies/MelodyForm.jsx b/frontend/src/melodies/MelodyForm.jsx index 3b25901..304142d 100644 --- a/frontend/src/melodies/MelodyForm.jsx +++ b/frontend/src/melodies/MelodyForm.jsx @@ -616,7 +616,7 @@ export default function MelodyForm() {Loading binary...
)} @@ -322,15 +351,15 @@ export default function PlaybackModal({ open, melody, builtMelody, files, archet )}Note → Assigned Bell
Top = Note, Bottom = Bell assigned
Active Bells
+Do you still want to delete this archetype?