Skip to content

Commit

Permalink
Merge bb251ad into 7192311
Browse files Browse the repository at this point in the history
  • Loading branch information
eugeniopolito committed Jul 5, 2017
2 parents 7192311 + bb251ad commit 3a35308
Showing 1 changed file with 118 additions and 50 deletions.
168 changes: 118 additions & 50 deletions src/common/multi-storage.js
@@ -1,68 +1,136 @@
const genericStorage = {};

export function get (key) {
return new Promise((resolve, reject) => {

var Storage = function () {
this.browser = null;
};

Storage.prototype = {
setBrowser: function (browser) {
this.browser = browser;
},
get: function (key) {
this.browser.get(key);
},
set: function (key, value) {
this.browser.set(key, value);
},
del: function (key) {
this.browser.del(key);
}
};


var Chrome = function (resolve) {
this.get = function (key) {
chrome.storage.local.get(key, data => resolve(data[key]));
};
this.set = function (key, value) {
const data = {
[key]: value
};
chrome.storage.local.set(data, resolve());
};
this.del = function (key) {
chrome.storage.local.remove(key, resolve());
};
};

var Local = function (resolve) {
this.get = function (key) {
resolve(localStorage[key]);
};
this.set = function (key, value) {
localStorage[key] = value;
resolve();
};
this.del = function (key) {
delete localStorage[key];
resolve();
};
};

var Async = function (resolve, reject) {
this.get = function (key) {
AsyncStorage.getItem(key, (error, data) => {
if (error) {
reject(error);
} else {
resolve(data);
}
});
};
this.set = function (key, value) {
AsyncStorage.setItem(key, value, error => {
if (error) {
reject(error);
} else {
resolve();
}
});
};
this.del = function (key) {
AsyncStorage.removeItem(key, error => {
if (error) {
reject(error);
} else {
resolve();
}
});
};
};

var Generic = function (resolve) {
this.get = function (key) {
resolve(genericStorage[key]);
};
this.set = function (key, value) {
genericStorage[key] = value;
resolve();
};
this.del = function (key) {
delete genericStorage[key];
resolve();
};
};

function BrowserFactory () {
this.create = function (resolve, reject) {
var browser;
if (typeof chrome !== "undefined" && chrome.storage) {
chrome.storage.local.get(key, data => resolve(data[key]));
browser = new Chrome(resolve);
} else if (typeof localStorage !== "undefined") {
resolve(localStorage[key]);
browser = new Local(resolve);
} else if (typeof AsyncStorage !== "undefined") {
AsyncStorage.getItem(key, (error, data) => {
if (error) {
reject(error);
} else {
resolve(data);
}
});
browser = new Async(resolve, reject);
} else {
resolve(genericStorage[key]);
browser = new Generic(resolve);
}
return browser;
};
}


export function get (key) {
return new Promise((resolve, reject) => {
var storage = new Storage();
storage.setBrowser(new BrowserFactory().create(resolve, reject));
storage.get(key);
});
}

export function set (key, value) {
return new Promise((resolve, reject) => {
if (typeof chrome !== "undefined" && chrome.storage) {
const data = {
[key]: value
};
chrome.storage.local.set(data, resolve);
} else if (typeof localStorage !== "undefined") {
localStorage[key] = value;
resolve();
} else if (typeof AsyncStorage !== "undefined") {
AsyncStorage.setItem(key, value, error => {
if (error) {
reject(error);
} else {
resolve();
}
});
} else {
genericStorage[key] = value;
resolve();
}
var storage = new Storage();
storage.setBrowser(new BrowserFactory().create(resolve, reject));
storage.set(key, value);
});
}

export function del (key) {
return new Promise((resolve, reject) => {
if (typeof chrome !== "undefined" && chrome.storage) {
chrome.storage.local.remove(key, resolve);
} else if (typeof localStorage !== "undefined") {
delete localStorage[key];
resolve();
} else if (typeof AsyncStorage !== "undefined") {
AsyncStorage.removeItem(key, error => {
if (error) {
reject(error);
} else {
resolve();
}
});
} else {
delete genericStorage[key];
resolve();
}
var storage = new Storage();
storage.setBrowser(new BrowserFactory().create(resolve, reject));
storage.del(key);
});
}
}

0 comments on commit 3a35308

Please sign in to comment.