File size: 1,968 Bytes
8e64a96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// مدیریت 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.");
    });
}