VulpesOS/gaia/shared/js/smart-screen/bookmark_manager.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

85 lines
2.1 KiB
JavaScript
Executable file

/* global CardStore, evt */
(function(exports) {
'use strict';
var BookmarkManager = evt({
TABLE_NAME: 'appdeck_bookmarks',
init: function bm_init(ownerURL, mode) {
this._store = new CardStore(this.TABLE_NAME, mode, ownerURL);
this._store.on('change', this.fire.bind(this, 'change'));
},
iterate: function bm_iterate(cb) {
return this._store.iterateData(cb);
},
add: function bm_add(entry, id) {
if (!id) {
id = entry.url;
}
entry.date = new Date();
if (entry.iconUrl) {
return this.fetchIcon(entry.iconUrl).then(iconData => {
entry.icon = iconData;
delete entry.iconUrl;
return this._store.addData(entry, id);
}).catch(() => {
return this._store.addData(entry, id);
});
} else {
return this._store.addData(entry, id);
}
},
remove: function bm_remove(id) {
return this._store.removeData(id);
},
get: function bm_get(id) {
return this._store.getData(id);
},
set: function bm_set(id, entry) {
entry.date = new Date();
if (entry.iconUrl) {
return this.fetchIcon(entry.iconUrl).then(iconData => {
entry.icon = iconData;
delete entry.iconUrl;
return this._store.saveData(id, entry);
}).catch(() => {
return this._store.saveData(id, entry);
});
} else {
return this._store.saveData(id, entry);
}
},
fetchIcon: function bm_fetchIcon(url) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest({mozSystem: true});
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
xhr.onload = function() {
resolve(xhr.response);
};
xhr.onerror = function() {
console.warn('Unable to retrive icon data. Leaving icon empty.');
reject();
};
});
},
getLength: function bm_getLength() {
return this._store.getLength();
}
});
exports.BookmarkManager = BookmarkManager;
}(window));