| |
| 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."); |
| }); |
| } |