fix(plugin-manager): xoa/add dir luu dung dir moi (stale closure); loc plugin file da mat khoi disk; scan VST3 giam timeout module con lai 4s va subprocess 300s

This commit is contained in:
2026-08-22 15:10:35 +07:00
parent c07b792bd4
commit 681cab4f25
4 changed files with 39 additions and 24 deletions
+12 -7
View File
@@ -6212,15 +6212,16 @@ const PluginManagerModal = ({ isOpen, onClose, pluginsData, onInsertInstrument }
const confirmPluginDir = () => {
const p = pmPicker && pmPicker.path;
if (p && !pmDirs.includes(p)) {
setPmDirs(prev => [...prev, p]);
const next = [...pmDirs, p];
setPmDirs(next);
// TỰ ĐỘNG lưu + scan → nút Synth có ngay danh sách instrument
clearTimeout(window.__pmAutoScanTimer);
window.__pmAutoScanTimer = setTimeout(() => { saveAndScanDirs(); }, 600);
window.__pmAutoScanTimer = setTimeout(() => { saveAndScanDirs(next); }, 600);
}
setPmPicker(null);
};
const pickPluginFolder = async () => {
const addDir = (p) => { if (p && !pmDirs.includes(p)) { setPmDirs(prev => [...prev, p]); clearTimeout(window.__pmAutoScanTimer); window.__pmAutoScanTimer = setTimeout(() => { saveAndScanDirs(); }, 600); } };
const addDir = (p) => { if (p && !pmDirs.includes(p)) { const next = [...pmDirs, p]; setPmDirs(next); clearTimeout(window.__pmAutoScanTimer); window.__pmAutoScanTimer = setTimeout(() => { saveAndScanDirs(next); }, 600); } };
try {
// 1) NATIVE dialog qua engine (Tauri bridge → IFileDialog/Explorer;
// fallback PowerShell/zenity/osascript) — UI chạy localhost:8000 nên
@@ -6250,10 +6251,11 @@ const PluginManagerModal = ({ isOpen, onClose, pluginsData, onInsertInstrument }
}
};
const removePluginDir = (dir) => {
setPmDirs(prev => prev.filter(d => d !== dir));
const next = pmDirs.filter(d => d !== dir);
setPmDirs(next);
// Tự động lưu + scan lại sau khi xóa thư mục
clearTimeout(window.__pmAutoScanTimer);
window.__pmAutoScanTimer = setTimeout(() => { saveAndScanDirs(); }, 600);
window.__pmAutoScanTimer = setTimeout(() => { saveAndScanDirs(next); }, 600);
};
// Expand 1 soundfont → đọc danh sách instrument (bank/program/name) bên trong
// qua API soundfont-instruments/{id} → hiển thị nút "Chèn vào Synth".
@@ -6319,12 +6321,15 @@ const PluginManagerModal = ({ isOpen, onClose, pluginsData, onInsertInstrument }
} catch (err) { showToast('Lỗi: ' + (err.message || err), 'error'); }
};
// Lưu dirs (user override) + scan cả 2 thư mục → refresh list + catalog.
const saveAndScanDirs = async () => {
// dirsOverride: mảng dirs mới nhất (fix stale-closure: setTimeout giữ
// pmDirs cũ nên add/remove xong tự scan lại vẫn lưu dir cũ).
const saveAndScanDirs = async (dirsOverride) => {
const dirs = dirsOverride || pmDirs;
setPmScanning(true);
setPmScanResult('');
setPmScanData(null);
try {
await window.SonicAPI.savePluginDirs({ plugin_dirs: pmDirs });
await window.SonicAPI.savePluginDirs({ plugin_dirs: dirs });
const scan = await window.SonicAPI.scanPluginDirs();
setPmScanData({ vst_found: scan.vst_found || [], soundfonts: scan.soundfonts || [] });
const data = await window.SonicAPI.listPlugins();
File diff suppressed because one or more lines are too long