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:
+12
-7
@@ -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
Reference in New Issue
Block a user