fix: deduplicate soundfont scan + source label + delete only uploads

- _scan_soundfonts: dict-keyed by base_id to prevent duplicates
- Add 'source' field ('system' | 'upload') to each soundfont entry
- Delete endpoint: only allow deleting upload soundfonts (403 for system)
- Frontend: show (system)/(upload) tag, hide Delete for system fonts
This commit is contained in:
2026-07-27 09:36:58 +07:00
parent d18c0085b6
commit 2ad29226c4
3 changed files with 29 additions and 16 deletions
+11 -6
View File
@@ -3459,12 +3459,17 @@ const PluginManagerModal = ({ isOpen, onClose, pluginsData }) => {
React.createElement('div', { className: 'text-xs font-semibold text-slate-200' }, sf.display || sf.name || sf.id),
React.createElement('div', { className: 'text-[10px] text-zinc-500' }, sf.file || sf.name)
)
),
React.createElement('div', { className: 'flex items-center gap-2' },
React.createElement('button', {
onClick: () => setSfToDelete(sf),
className: 'text-[10px] text-zinc-500 hover:text-red-400 opacity-0 group-hover:opacity-100 transition px-2 py-1'
}, 'Delete')
), React.createElement('div', {
className: 'text-[10px] text-zinc-500'
}, sf.file || sf.name, ' ', React.createElement('span', {
className: sf.source === 'system' ? 'text-blue-400' : 'text-amber-500'
}, sf.source === 'system' ? '(system)' : '(upload)'))
),
React.createElement('div', { className: 'flex items-center gap-2' },
sf.source === 'upload' ? React.createElement('button', {
onClick: () => setSfToDelete(sf),
className: 'text-[10px] text-zinc-500 hover:text-red-400 opacity-0 group-hover:opacity-100 transition px-2 py-1'
}, 'Delete') : React.createElement('span', { className: 'text-[10px] text-zinc-700' }, 'System')
)
)
)