Spaces:
Paused
Paused
| // مدیریت 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."); | |
| }); | |
| } |