-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpage.service.js
73 lines (60 loc) · 1.79 KB
/
page.service.js
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/** @private */
const PAGES_KEY = 'pages';
/** Shared logic */
class PageService {
/**
*
* @returns {Promise<Array>}
*/
static getPages = () => {
const promise = toPromise((resolve, reject) => {
chrome.storage.local.get([PAGES_KEY], (result) => {
if (chrome.runtime.lastError)
reject(chrome.runtime.lastError);
const researches = result.pages ?? [];
resolve(researches);
});
});
return promise;
}
static savePage = async (title, url, memory) => {
const pages = await this.getPages();
const b = co2.hosting;
const green = await b.check(title);
const updatedPages = [...pages, { title, url, memory, green }];
const promise = toPromise((resolve, reject) => {
chrome.storage.local.set({ [PAGES_KEY]: updatedPages }, () => {
if (chrome.runtime.lastError)
reject(chrome.runtime.lastError);
resolve(updatedPages);
});
});
return promise;
}
static clearPages = () => {
const promise = toPromise((resolve, reject) => {
chrome.storage.local.remove([PAGES_KEY], () => {
if (chrome.runtime.lastError)
reject(chrome.runtime.lastError);
resolve();
});
});
return promise;
}
}
/**
* Promisify a callback.
* @param {Function} callback
* @returns {Promise}
*/
const toPromise = (callback) => {
const promise = new Promise((resolve, reject) => {
try {
callback(resolve, reject);
}
catch (err) {
reject(err);
}
});
return promise;
}