-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbegw-store.js
More file actions
55 lines (49 loc) · 1.67 KB
/
Copy pathbegw-store.js
File metadata and controls
55 lines (49 loc) · 1.67 KB
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
/* Launcher — store user game files in IndexedDB (same origin as games). */
(function (global) {
'use strict';
var DB_NAME = 'begw-showcase-v1';
var STORE = 'payload';
function openDb() {
return new Promise(function (resolve, reject) {
var req = indexedDB.open(DB_NAME, 1);
req.onupgradeneeded = function () {
req.result.createObjectStore(STORE);
};
req.onsuccess = function () { resolve(req.result); };
req.onerror = function () { reject(req.error); };
});
}
function saveActive(payload) {
return openDb().then(function (db) {
return new Promise(function (resolve, reject) {
var tx = db.transaction(STORE, 'readwrite');
tx.objectStore(STORE).put(payload, 'active');
tx.oncomplete = function () { resolve(payload); };
tx.onerror = function () { reject(tx.error); };
});
});
}
function readFile(file) {
return new Promise(function (resolve, reject) {
var r = new FileReader();
r.onload = function () {
var name = file.webkitRelativePath || file.name;
if (name.indexOf('/') >= 0) {
var parts = name.split('/');
if (parts.length > 1) name = parts.slice(1).join('/');
}
resolve({ name: name, data: r.result });
};
r.onerror = function () { reject(r.error); };
r.readAsArrayBuffer(file);
});
}
function filesFromList(fileList) {
var files = Array.prototype.slice.call(fileList || []);
return Promise.all(files.map(readFile));
}
global.BEGW_Store = {
saveActive: saveActive,
filesFromList: filesFromList
};
})(window);