// مدیریت IndexedDB function initDB() { return new Promise((resolve, reject) => { const request = indexedDB.open(DB_NAME, DB_VERSION); request.onerror = e => reject(e); request.onupgradeneeded = e => { const db = e.target.result; if (!db.objectStoreNames.contains("projects")) { db.createObjectStore("projects", { keyPath: "id" }); } }; request.onsuccess = e => { db = e.target.result; resolve(db); }; }); } function saveProjectToDB() { if (!currentProjectId) return; const tx = db.transaction("projects", "readwrite"); const store = tx.objectStore("projects"); store.get(currentProjectId).onsuccess = (e) => { const data = e.target.result; if (data) { data.state = state; if(v && v.readyState >= 2) { try { const canvas = document.createElement('canvas'); canvas.width = 200; canvas.height = 350; const ctx = canvas.getContext('2d'); ctx.drawImage(v, 0, 0, canvas.width, canvas.height); data.thumbnail = canvas.toDataURL('image/jpeg', 0.5); } catch(err) {} } store.put(data); } }; } function getVideoBlobFromDB(projectId) { return new Promise((resolve, reject) => { if (!db) return reject("Database not initialized."); const tx = db.transaction("projects", "readonly"); const store = tx.objectStore("projects"); const request = store.get(projectId); request.onsuccess = e => { const projectData = e.target.result; if (projectData && projectData.videoBlob) resolve(projectData.videoBlob); else reject("Video blob not found."); }; request.onerror = e => reject("Error fetching from DB."); }); }