From bc8431fe81d08ee4284c74f8dd700d9ca60e35d1 Mon Sep 17 00:00:00 2001 From: locpham Date: Sun, 9 Aug 2026 03:30:57 +0000 Subject: [PATCH] =?UTF-8?q?FIX=203=20van=20de=20Windows:=201.=20LOAD=20CHA?= =?UTF-8?q?M:=20PyInstaller=20onefile=20723MB=20giai=20nen=20toan=20bo=20v?= =?UTF-8?q?ao=20%TEMP%=20moi=20lan=20chay=20->=20chuyen=20ONEDIR=20(engine?= =?UTF-8?q?.spec=20COLLECT)=20+=20bundle=20qua=20Tauri=20resources=20(reso?= =?UTF-8?q?urce=5Fdir/daw=5Fengine/daw=5Fengine.exe)=20thay=20externalBin?= =?UTF-8?q?=20=E2=80=94=20khoi=20dong=20tuc=20thi=20khong=20giai=20nen=202?= =?UTF-8?q?.=20WINDOW=20PICKER:=20Tauri=20v2=20khong=20co=20window.=5F=5FT?= =?UTF-8?q?AURI=5F=5F.dialog=20=E2=80=94=20goi=20invoke('plugin:dialog|ope?= =?UTF-8?q?n',=20{options:{directory:true}})=20qua=20=5F=5FTAURI=5F=5F.cor?= =?UTF-8?q?e.invoke=203.=20ICON=20exe:=20bundle.icon=20chuyen=20icon.ico?= =?UTF-8?q?=20->=20favicon.ico=20+=20thay=203=20PNG=20bang=20favicon=20ren?= =?UTF-8?q?der=20-=20build=5Fwindows.ps1=20buoc=204:=20copy=20onedir=20dis?= =?UTF-8?q?t/daw=5Fengine=20->=20src-tauri/resources/daw=5Fengine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/static/js/app.jsx | 10 +++++++--- app/static/js/app.precompiled.js | 6 ++++-- build_windows.ps1 | 16 +++++++++++++--- engine.spec | 15 ++++++++++++--- src-tauri/icons/128x128.png | Bin 1009 -> 18042 bytes src-tauri/icons/128x128@2x.png | Bin 1793 -> 49859 bytes src-tauri/icons/32x32.png | Bin 459 -> 2208 bytes src-tauri/src/lib.rs | 22 +++++++++++++++------- src-tauri/tauri.conf.json | 7 ++++--- 9 files changed, 55 insertions(+), 21 deletions(-) diff --git a/app/static/js/app.jsx b/app/static/js/app.jsx index bcf1dff..0637d37 100644 --- a/app/static/js/app.jsx +++ b/app/static/js/app.jsx @@ -5299,11 +5299,15 @@ const PluginManagerModal = ({ isOpen, onClose, pluginsData }) => { setTimeout(() => { try { window.lucide.createIcons(); } catch(e) {} }, 50); } }, [isOpen]); - // Folder picker: Tauri dialog (desktop) nếu có; fallback: paste path. + // Folder picker: Tauri v2 dialog qua invoke (window.__TAURI__.dialog KHONG + // ton tai trong v2 — plugin dialog chi co JS binding qua npm; goi truc tiep + // command 'plugin:dialog|open'). Fallback: prompt nhap path (browser). const pickPluginFolder = async () => { try { - if (window.__TAURI__ && window.__TAURI__.dialog) { - const sel = await window.__TAURI__.dialog.open({ directory: true, multiple: false }); + if (window.__TAURI__ && window.__TAURI__.core && window.__TAURI__.core.invoke) { + const sel = await window.__TAURI__.core.invoke('plugin:dialog|open', { + options: { directory: true, multiple: false } + }); if (typeof sel === 'string' && sel) { if (!pmDirs.includes(sel)) setPmDirs(prev => [...prev, sel]); } diff --git a/app/static/js/app.precompiled.js b/app/static/js/app.precompiled.js index 8d2be4f..4d9290a 100644 --- a/app/static/js/app.precompiled.js +++ b/app/static/js/app.precompiled.js @@ -363,8 +363,10 @@ const GraphEditorCanvas=({buffer,zoom,timelineWidth,volumeNodes,panningNodes,fad useEffect(()=>{if(!isOpen)return;if(window.SonicAPI&&window.SonicAPI.apiRequest){window.SonicAPI.apiRequest('/api/v1/auth/first-time',{method:'GET'}).then(function(d){setFirstTime(!!(d&&d.first_time));})// Fail-closed: endpoint lỗi/404 (backend chưa restart) → ẨN gợi ý // (không hiện — user đã yêu cầu bỏ gợi ý sau lần đầu). .catch(function(){setFirstTime(false);});}else{setFirstTime(false);}},[isOpen]);const handleSubmit=async e=>{e.preventDefault();setError('');setLoading(true);try{if(activeTab==='login'){const targetUsername=username.trim()||'admin';const targetPwd=password.trim()||'admin123';const res=await window.SonicAPI.login(targetUsername,targetPwd);localStorage.setItem('sonic_token',res.access_token);localStorage.setItem('sonic_user',JSON.stringify(res.user));if(res.user&&res.user.must_change_password){setOldPassword(targetPwd);}onSuccess(res.user,res.access_token);}else if(activeTab==='register'){const res=await window.SonicAPI.register(username.trim(),email.trim(),password.trim());localStorage.setItem('sonic_token',res.access_token);localStorage.setItem('sonic_user',JSON.stringify(res.user));onSuccess(res.user,res.access_token);}else if(activeTab==='force_change'){const res=await window.SonicAPI.changePassword(oldPassword.trim(),newPassword.trim());localStorage.setItem('sonic_token',res.access_token);const user=JSON.parse(localStorage.getItem('sonic_user')||'{}');user.must_change_password=false;localStorage.setItem('sonic_user',JSON.stringify(user));onSuccess(user,res.access_token);}}catch(err){setError(err.message||(activeTab==='login'?'Tài khoản hoặc mật khẩu không chính xác. (Nếu bạn đã đổi mật khẩu trước đó, vui lòng nhập mật khẩu mới mà bạn đã tạo)':'Thao tác không thành công'));}finally{setLoading(false);}};const isForceMode=activeTab==='force_change';const canClose=!forceMandatory&&!isForceMode;return/*#__PURE__*/React.createElement("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-md"},/*#__PURE__*/React.createElement("div",{className:"bg-[#262626] border border-[#383838] rounded-xl shadow-2xl w-full max-w-md p-6 text-slate-200"},/*#__PURE__*/React.createElement("div",{className:"flex justify-between items-center pb-4 border-b border-[#383838]"},/*#__PURE__*/React.createElement("h3",{className:"text-lg font-bold text-teal-400"},isForceMode?'⚠️ Bắt Buộc Đổi Mật Khẩu Khởi Tạo':activeTab==='login'?'🔐 Đăng Nhập Hệ Thống':'📝 Đăng Ký Tài Khoản'),canClose&&/*#__PURE__*/React.createElement("button",{onClick:onClose,className:"text-slate-400 hover:text-slate-200"},"✕")),error&&/*#__PURE__*/React.createElement("div",{className:"mt-4 p-3 bg-red-900/40 border border-red-700 rounded-lg text-red-200 text-sm"},error),/*#__PURE__*/React.createElement("form",{onSubmit:handleSubmit,className:"mt-4 space-y-4"},isForceMode?/*#__PURE__*/React.createElement(React.Fragment,null,/*#__PURE__*/React.createElement("p",{className:"text-xs text-amber-400 bg-amber-950/60 p-2.5 border border-amber-800/80 rounded leading-relaxed"},"🔒 Tài khoản của bạn đang dùng mật khẩu khởi tạo mặc định. Để bảo mật hệ thống, bạn phải đổi mật khẩu mới trước khi tiếp tục."),/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold mb-1 text-slate-400"},"Mật khẩu hiện tại (Mặc định: admin123)"),/*#__PURE__*/React.createElement("input",{type:"password",autoComplete:"current-password",required:true,value:oldPassword,onChange:e=>setOldPassword(e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-2 text-sm focus:outline-none focus:border-teal-500"})),/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold mb-1 text-slate-400"},"Mật khẩu mới"),/*#__PURE__*/React.createElement("input",{type:"password",autoComplete:"new-password",required:true,value:newPassword,onChange:e=>setNewPassword(e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-2 text-sm focus:outline-none focus:border-teal-500"}))):/*#__PURE__*/React.createElement(React.Fragment,null,activeTab==='login'?/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold mb-1 text-slate-400"},"Tên đăng nhập ",firstTime&&/*#__PURE__*/React.createElement("span",{className:"text-teal-400 font-normal"},"(Tùy chọn - Admin có thể bỏ trống)")),/*#__PURE__*/React.createElement("input",{type:"text",placeholder:"Mặc định: admin",value:username,onChange:e=>setUsername(e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-2 text-sm focus:outline-none focus:border-teal-500"})):/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold mb-1 text-slate-400"},"Tên đăng nhập"),/*#__PURE__*/React.createElement("input",{type:"text",required:true,value:username,onChange:e=>setUsername(e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-2 text-sm focus:outline-none focus:border-teal-500"})),activeTab==='register'&&/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold mb-1 text-slate-400"},"Email"),/*#__PURE__*/React.createElement("input",{type:"email",required:true,value:email,onChange:e=>setEmail(e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-2 text-sm focus:outline-none focus:border-teal-500"})),/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold mb-1 text-slate-400"},"Mật khẩu ",activeTab==='login'&&firstTime&&/*#__PURE__*/React.createElement("span",{className:"text-amber-400 font-normal"},"(Lần đầu: admin123)")),/*#__PURE__*/React.createElement("input",{type:"password",autoComplete:activeTab==='login'?'current-password':'new-password',required:true,value:password,onChange:e=>setPassword(e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-2 text-sm focus:outline-none focus:border-teal-500"}))),/*#__PURE__*/React.createElement("button",{type:"submit",disabled:loading,className:"w-full py-2 bg-teal-600 hover:bg-teal-500 text-white font-semibold rounded-lg shadow transition duration-150"},loading?'Đang xác thực...':isForceMode?'Đổi Mật Khẩu Ngay':activeTab==='login'?'Đăng Nhập System':'Tạo Tài Khoản Mới'),activeTab==='login'&&!isForceMode&&firstTime&&/*#__PURE__*/React.createElement("button",{type:"button",onClick:()=>{setUsername('admin');setPassword('admin123');setError('');},className:"w-full mt-2 py-1.5 bg-amber-950/60 hover:bg-amber-900/80 text-amber-300 border border-amber-800/60 text-xs font-semibold rounded-lg transition flex items-center justify-center gap-1.5"},"🔑 Điền Nhanh Tài Khoản Admin (admin / admin123)")),!isForceMode&&/*#__PURE__*/React.createElement("div",{className:"mt-4 pt-4 border-t border-[#383838] text-center text-xs text-slate-400"},activeTab==='login'?/*#__PURE__*/React.createElement("span",null,"Chưa có tài khoản? ",/*#__PURE__*/React.createElement("button",{onClick:()=>setActiveTab('register'),className:"text-teal-400 hover:underline"},"Đăng ký ngay")):/*#__PURE__*/React.createElement("span",null,"Đã có tài khoản? ",/*#__PURE__*/React.createElement("button",{onClick:()=>setActiveTab('login'),className:"text-teal-400 hover:underline"},"Đăng nhập")))));};const AIConfigModal=({isOpen,onClose,onConfigSaved})=>{if(!isOpen)return null;const defaultProvidersList=[{id:'openai_default',name:'OpenAI Official',provider_type:'openai',api_base_url:'https://api.openai.com/v1',api_key:'',model_name:'gpt-4o',temperature:0.7,is_active:true},{id:'openai_compat_default',name:'OpenAI Compatible (Ollama/LocalAI/DeepSeek)',provider_type:'openai_compatible',api_base_url:'http://localhost:11434/v1',api_key:'ollama',model_name:'deepseek-r1',temperature:0.7,is_active:false},{id:'anthropic_default',name:'Anthropic Claude',provider_type:'anthropic',api_base_url:'https://api.anthropic.com/v1',api_key:'',model_name:'claude-3-5-sonnet',temperature:0.7,is_active:false},{id:'gemini_default',name:'Google Gemini',provider_type:'gemini',api_base_url:'https://generativelanguage.googleapis.com',api_key:'',model_name:'gemini-1.5-pro',temperature:0.7,is_active:false}];const[providers,setProviders]=useState(defaultProvidersList);const[selectedId,setSelectedId]=useState('openai_default');const[msg,setMsg]=useState('');const[error,setError]=useState('');const[loading,setLoading]=useState(false);useEffect(()=>{if(isOpen)loadConfigs();},[isOpen]);const loadConfigs=async()=>{setLoading(true);setError('');try{const data=await window.SonicAPI.getAIConfigs();if(data&&data.providers){setProviders(data.providers);if(data.providers.length>0)setSelectedId(data.providers[0].id);}}catch(err){setError(err.message||'Lỗi nạp cấu hình AI');}finally{setLoading(false);}};const handleSave=async e=>{e.preventDefault();setMsg('');setError('');setLoading(true);try{const res=await window.SonicAPI.saveAIConfigs(providers);setMsg(res.message||'Đã lưu cấu hình AI Providers thành công!');if(onConfigSaved)onConfigSaved(providers);}catch(err){setError(err.message||'Lỗi khi lưu cấu hình AI');}finally{setLoading(false);}};const updateProviderField=(id,field,value)=>{setProviders(prev=>prev.map(p=>p.id===id?{...p,[field]:value}:p));};const activeProvider=providers.find(p=>p.id===selectedId)||providers[0];return/*#__PURE__*/React.createElement("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 backdrop-blur-sm select-none"},/*#__PURE__*/React.createElement("div",{className:"bg-[#262626] border border-[#383838] rounded-xl shadow-2xl w-full max-w-2xl p-6 text-slate-200"},/*#__PURE__*/React.createElement("div",{className:"flex justify-between items-center pb-4 border-b border-[#383838]"},/*#__PURE__*/React.createElement("h3",{className:"text-lg font-bold text-cyan-400 flex items-center gap-2"},"🤖 Quản Lý & Cấu Hình AI Providers"),/*#__PURE__*/React.createElement("button",{onClick:onClose,className:"text-slate-400 hover:text-slate-200"},"✕")),msg&&/*#__PURE__*/React.createElement("div",{className:"mt-3 p-2 bg-emerald-950/60 border border-emerald-700 text-emerald-300 rounded text-xs"},msg),error&&/*#__PURE__*/React.createElement("div",{className:"mt-3 p-2 bg-red-950/60 border border-red-700 text-red-300 rounded text-xs"},error),/*#__PURE__*/React.createElement("div",{className:"mt-4 grid grid-cols-3 gap-4"},/*#__PURE__*/React.createElement("div",{className:"space-y-1.5 border-r border-[#383838] pr-3"},/*#__PURE__*/React.createElement("span",{className:"text-xs uppercase font-bold text-slate-400 block mb-2"},"Providers"),providers.map(p=>/*#__PURE__*/React.createElement("button",{key:p.id,tabIndex:0,onClick:()=>setSelectedId(p.id),onKeyDown:e=>{if(e.key===' '){e.preventDefault();updateProviderField(p.id,'is_active',!p.is_active);}},className:`w-full text-left px-3 py-2 rounded-lg text-xs font-semibold flex items-center justify-between transition ${selectedId===p.id?'bg-cyan-600 text-white shadow':'bg-[#1e1e1e] text-slate-300 hover:bg-[#2e2e2e]'}`},/*#__PURE__*/React.createElement("span",{className:"truncate"},p.name),p.is_active&&/*#__PURE__*/React.createElement("span",{className:"w-2 h-2 rounded-full bg-emerald-400"}))),/*#__PURE__*/React.createElement("div",{className:"flex gap-1 mt-2"},/*#__PURE__*/React.createElement("button",{onClick:e=>{e.stopPropagation();const rearrangeNewId='provider_'+Date.now();setProviders(prev=>[...prev,{id:rearrangeNewId,name:'New Provider',provider_type:'openai_compatible',api_base_url:'https://api.openai.com/v1',api_key:'',model_name:'gpt-4o-mini',temperature:0.7,is_active:false}]);setSelectedId(rearrangeNewId);},className:"flex-1 px-2 py-1 bg-emerald-700 hover:bg-emerald-600 text-white text-xs font-bold rounded"},"+ Thêm"),providers.length>1&&/*#__PURE__*/React.createElement("button",{onClick:e=>{e.stopPropagation();if(confirm(`Xóa provider "${providers.find(p=>p.id===selectedId)?.name}"?`)){setProviders(prev=>{const filtered=prev.filter(p=>p.id!==selectedId);if(filtered.length>0)setSelectedId(filtered[0].id);return filtered;});}},className:"px-2 py-1 bg-red-800 hover:bg-red-700 text-white text-xs font-bold rounded"},"Xóa"),providers.length>1&&/*#__PURE__*/React.createElement("button",{onClick:function(e){e.stopPropagation();var provs=providers.slice();var pos=-1;for(var pi=0;pi0){var tmp=provs[pos];provs[pos]=provs[pos-1];provs[pos-1]=tmp;setProviders(provs);}},className:"px-2 py-1 bg-zinc-700 hover:bg-zinc-600 text-white text-xs font-bold rounded",title:"Di chuyển lên"},"▲"),providers.length>1&&/*#__PURE__*/React.createElement("button",{onClick:function(e){e.stopPropagation();var provs=providers.slice();var pos=-1;for(var pi=0;piupdateProviderField(activeProvider.id,'name',e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-1.5 text-xs text-slate-200 focus:outline-none focus:border-cyan-500"})),/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold text-slate-400 mb-1"},"API Base URL (Endpoint)"),/*#__PURE__*/React.createElement("input",{type:"text",value:activeProvider.api_base_url||'',onChange:e=>updateProviderField(activeProvider.id,'api_base_url',e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-1.5 text-xs font-mono text-cyan-300 focus:outline-none focus:border-cyan-500",placeholder:"https://api.openai.com/v1"})),/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold text-slate-400 mb-1"},"API Key Cá Nhân"),/*#__PURE__*/React.createElement("input",{type:"password",value:activeProvider.api_key||'',onChange:e=>updateProviderField(activeProvider.id,'api_key',e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-1.5 text-xs font-mono text-slate-200 focus:outline-none focus:border-cyan-500",placeholder:"sk-..."})),/*#__PURE__*/React.createElement("div",{className:"grid grid-cols-2 gap-3"},/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold text-slate-400 mb-1"},"Model Name"),/*#__PURE__*/React.createElement("input",{type:"text",value:activeProvider.model_name||'',onChange:e=>updateProviderField(activeProvider.id,'model_name',e.target.value),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-1.5 text-xs font-mono text-amber-300 focus:outline-none focus:border-cyan-500"})),/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",{className:"block text-xs font-semibold text-slate-400 mb-1"},"Temperature"),/*#__PURE__*/React.createElement("input",{type:"number",step:"0.1",min:"0",max:"2",value:activeProvider.temperature??0.7,onChange:e=>updateProviderField(activeProvider.id,'temperature',parseFloat(e.target.value)),className:"w-full bg-[#1e1e1e] border border-[#383838] rounded px-3 py-1.5 text-xs text-slate-200 focus:outline-none focus:border-cyan-500"}))),/*#__PURE__*/React.createElement("div",{className:"pt-2 flex items-center justify-between"},/*#__PURE__*/React.createElement("label",{className:"flex items-center gap-2 cursor-pointer text-xs text-slate-300"},/*#__PURE__*/React.createElement("input",{type:"checkbox",checked:activeProvider.is_active,onChange:e=>updateProviderField(activeProvider.id,'is_active',e.target.checked),className:"rounded accent-cyan-500"}),"Kích hoạt Provider này"),/*#__PURE__*/React.createElement("button",{type:"submit",disabled:loading,className:"px-4 py-1.5 bg-cyan-600 hover:bg-cyan-500 text-white font-semibold text-xs rounded-lg shadow transition"},loading?'Đang lưu...':'Lưu Cấu Hình AI'))))));};const PluginManagerModal=({isOpen,onClose,pluginsData})=>{if(!isOpen)return null;const[localData,setLocalData]=React.useState(pluginsData);const[sfUploadStatus,setSfUploadStatus]=React.useState('');const[sfToDelete,setSfToDelete]=React.useState(null);const[pmDirs,setPmDirs]=React.useState([]);const[pmScanning,setPmScanning]=React.useState(false);const[pmScanResult,setPmScanResult]=React.useState('');const[pmScanData,setPmScanData]=React.useState(null);// { vst_found, soundfonts } -React.useEffect(()=>{if(isOpen){window.SonicAPI.listPlugins().then(data=>setLocalData(data)).catch(()=>setLocalData({vst_instruments:[],soundfonts:[]}));window.SonicAPI.getPluginDirs().then(d=>setPmDirs(d.plugin_dirs||[])).catch(()=>{});setTimeout(()=>{try{window.lucide.createIcons();}catch(e){}},50);}},[isOpen]);// Folder picker: Tauri dialog (desktop) nếu có; fallback: paste path. -const pickPluginFolder=async()=>{try{if(window.__TAURI__&&window.__TAURI__.dialog){const sel=await window.__TAURI__.dialog.open({directory:true,multiple:false});if(typeof sel==='string'&&sel){if(!pmDirs.includes(sel))setPmDirs(prev=>[...prev,sel]);}return;}const manual=window.prompt('Nhập đường dẫn thư mục plugin (VST / SoundFont):');if(manual&&manual.trim()){const p=manual.trim();if(!pmDirs.includes(p))setPmDirs(prev=>[...prev,p]);}}catch(e){showToast('Browse failed: '+(e.message||e),'error');}};const removePluginDir=dir=>{setPmDirs(prev=>prev.filter(d=>d!==dir));};// Lưu dirs (user override) + scan cả 2 thư mục → refresh list + catalog. +React.useEffect(()=>{if(isOpen){window.SonicAPI.listPlugins().then(data=>setLocalData(data)).catch(()=>setLocalData({vst_instruments:[],soundfonts:[]}));window.SonicAPI.getPluginDirs().then(d=>setPmDirs(d.plugin_dirs||[])).catch(()=>{});setTimeout(()=>{try{window.lucide.createIcons();}catch(e){}},50);}},[isOpen]);// Folder picker: Tauri v2 dialog qua invoke (window.__TAURI__.dialog KHONG +// ton tai trong v2 — plugin dialog chi co JS binding qua npm; goi truc tiep +// command 'plugin:dialog|open'). Fallback: prompt nhap path (browser). +const pickPluginFolder=async()=>{try{if(window.__TAURI__&&window.__TAURI__.core&&window.__TAURI__.core.invoke){const sel=await window.__TAURI__.core.invoke('plugin:dialog|open',{options:{directory:true,multiple:false}});if(typeof sel==='string'&&sel){if(!pmDirs.includes(sel))setPmDirs(prev=>[...prev,sel]);}return;}const manual=window.prompt('Nhập đường dẫn thư mục plugin (VST / SoundFont):');if(manual&&manual.trim()){const p=manual.trim();if(!pmDirs.includes(p))setPmDirs(prev=>[...prev,p]);}}catch(e){showToast('Browse failed: '+(e.message||e),'error');}};const removePluginDir=dir=>{setPmDirs(prev=>prev.filter(d=>d!==dir));};// Lưu dirs (user override) + scan cả 2 thư mục → refresh list + catalog. const saveAndScanDirs=async()=>{setPmScanning(true);setPmScanResult('');setPmScanData(null);try{await window.SonicAPI.savePluginDirs({plugin_dirs:pmDirs});const scan=await window.SonicAPI.scanPluginDirs();setPmScanData({vst_found:scan.vst_found||[],soundfonts:scan.soundfonts||[]});const data=await window.SonicAPI.listPlugins();setLocalData(data);try{const cat=await window.SonicAPI.getSoundfontCatalog();window.__soundfontCatalog=cat;}catch(_){}setPmScanResult(`VST: ${scan.vst_count||0} | SoundFonts: ${scan.soundfont_count||0}`);showToast(`Scan xong: ${scan.vst_count||0} VST, ${scan.soundfont_count||0} SoundFonts.`,'success');}catch(err){setPmScanResult('Scan failed: '+(err.message||err));showToast('Scan failed: '+(err.message||err),'error');}finally{setPmScanning(false);}};const handleUploadSF=async e=>{const file=e.target.files?.[0];if(!file)return;setSfUploadStatus('Uploading...');try{const result=await window.SonicAPI.uploadSoundFont(file);setSfUploadStatus('Uploaded: '+result.name);// Refresh plugin list and catalog const data=await window.SonicAPI.listPlugins();setLocalData(data);try{const cat=await window.SonicAPI.getSoundfontCatalog();window.__soundfontCatalog=cat;}catch(_){}}catch(err){setSfUploadStatus('Error: '+err.message);}};const[pmTab,setPmTab]=React.useState('soundfont');return React.createElement('div',{className:'fixed inset-0 z-50 flex items-center justify-center bg-black/70 backdrop-blur-sm',onClick:onClose},React.createElement('div',{className:'bg-[#1e1e1e] border border-[#383838] rounded-xl shadow-2xl w-full max-w-3xl p-0 text-slate-200 overflow-hidden flex flex-col',style:{maxHeight:'80vh'},onClick:e=>e.stopPropagation()},// Header React.createElement('div',{className:'flex items-center justify-between px-5 py-3 bg-[#252525] border-b border-[#383838]'},React.createElement('h3',{className:'text-base font-bold text-cyan-400 flex items-center gap-2'},React.createElement('i',{'data-lucide':'zap',className:'w-4 h-4'}),'Plugin Manager (SoundFont / VSTi)'),React.createElement('button',{onClick:onClose,className:'text-zinc-500 hover:text-zinc-200 transition'},React.createElement('i',{'data-lucide':'x',className:'w-4 h-4'}))),// Left-right body diff --git a/build_windows.ps1 b/build_windows.ps1 index 1783d5b..b43ba0b 100644 --- a/build_windows.ps1 +++ b/build_windows.ps1 @@ -50,9 +50,19 @@ if ($LASTEXITCODE -ne 0) { exit 1 } -Write-Host "== [4/6] Sidecar binary -> src-tauri/binaries (tauri triple naming) ==" -New-Item -ItemType Directory -Force src-tauri\binaries | Out-Null -Copy-Item dist\daw_engine.exe src-tauri\binaries\daw_engine-x86_64-pc-windows-msvc.exe -Force +Write-Host "== [4/6] ONEDIR engine -> src-tauri/resources/daw_engine (Tauri resources) ==" +# ONEDIR: copy ca thu muc dist\daw_engine\ (exe + _internal) vao resources. +# Tauri bundle resources -> resource_dir()/daw_engine/daw_engine.exe luc runtime. +if (-not (Test-Path "dist\daw_engine\daw_engine.exe")) { + Write-Host "ERROR: dist\daw_engine\daw_engine.exe khong ton tai (onedir build loi?)" -ForegroundColor Red + exit 1 +} +if (Test-Path "src-tauri\resources\daw_engine") { + Remove-Item -Recurse -Force "src-tauri\resources\daw_engine" +} +New-Item -ItemType Directory -Force "src-tauri\resources\daw_engine" | Out-Null +Copy-Item "dist\daw_engine\*" "src-tauri\resources\daw_engine\" -Recurse -Force +Write-Host "Copied onedir engine -> src-tauri\resources\daw_engine" Write-Host "== [5/6] VC++ Redistributable cho hooks.nsh ==" if (-not (Test-Path src-tauri\vc_redist.x64.exe)) { diff --git a/engine.spec b/engine.spec index aff2a8d..fe1f417 100644 --- a/engine.spec +++ b/engine.spec @@ -112,10 +112,8 @@ pyz = PYZ(a.pure, a.zipped_data, cipher=None) exe = EXE( pyz, a.scripts, - a.binaries, - a.zipfiles, - a.datas, [], + exclude_binaries=True, name='daw_engine', debug=False, bootloader_ignore_signals=False, @@ -128,3 +126,14 @@ exe = EXE( # sinh boi tools/gen_favicon_ico.py). Cung nguon voi icon hien thi trong app. icon='src-tauri/icons/favicon.ico', ) + +# ONEDIR (khong phai onefile): exe 700MB+ onefile phai giai nen toan bo vao +# %TEMP% moi lan chay -> load RAT CHAM tren Windows. Onedir chay truc tiep tu +# thu muc (bundle qua Tauri resources), khoi dong gan nhu tuc thi. +coll = COLLECT( + exe, + a.binaries, + a.zipfiles, + a.datas, + name='daw_engine', +) diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png index 98477176cc512598d983679640dd767e4c8e25c3..0000046a2abf1d04148747258ba2b62b1788b5a4 100644 GIT binary patch literal 18042 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 N002ovPDHLkV1n0{e%Am1 literal 1009 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrVBX>B;uumf=k49|-Xe)I$3LFW z(JR}q;Hq=S1ujRqPXZSg{#SS*+eE#e4l zlTzE(l)HIK`=zaS`3#NL8lUfx{`Ka}^Uu3Dc3Zz@zW?3EcsG0Lg@zdS^tBTor&RA; zx@hy&?Lfy$FkD?@tK$NrJByw{r_P4Bc)^3%zE(~J2aQ)F&t&o^rMv6EWX3b*by9UjGt-`*wJBh~amu&F#5}((ad*SVZUs;K z<#oTW-<ueyOz5Za^^YIJ<_o36z=$c@!0EU?_!UhUuxN{eb>^2G3EP~GhP49Nxv{DmB1_z*1K7}M+ew_dN(EqJjw*+IER63XxmNT5t zWGLclm_u*o^g?gfPe}^(&W;&0cCA-5;%Gb&K%?E8But1=~aC>ipS$ z>=t#|+o;l?S$6M?vp(a$BoW6?Khnj@zA^7(XewiLo!}FA`1|>)%NL4e=bB!YZri)^ zhIqQ)SM{nj42S9(P1G-QN=Y&#^f3f*oYl%o=i7Cr{oY^Zi;5mbGwhy9?&mO))i^0& wdiVzOwY&*Bh5q;2&J`TJFh}a<#{Ue{5Ax0Xe(ugUU{+@EboFyt=akR{09AgossI20 diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png index 3272f57584dd1eccff22e2f455e0b0dbcc56e760..031d8e34a912be1d6316c342950c469f81afd879 100644 GIT binary patch literal 49859 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 literal 1793 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