| Index: lib/io.js | 
| =================================================================== | 
| --- a/lib/io.js | 
| +++ b/lib/io.js | 
| @@ -26,27 +26,43 @@ | 
| { | 
| let key = fileToKey(file); | 
| - ext.storage.get([key], function(items) | 
| + // Make sure we do not have subscriptions in localStorage from older | 
| + // versions first | 
| + let entry = localStorage.getItem(key); | 
| + if (typeof entry == "string") | 
| { | 
| - let entry = items[key]; | 
| - | 
| - if (entry) | 
| - successCallback(entry); | 
| + try | 
| + { | 
| + entry = JSON.parse(entry); | 
| + } | 
| + catch(err) | 
| + { | 
| + setTimeout(errorCallback(new Error("File is corrupted"))); | 
| + return; | 
| + } | 
| + setTimeout(successCallback(entry)); | 
| + return; | 
| + } | 
| + // Now try to read from IndexedDB | 
| + localforage.getItem(key, function(err, value) | 
| + { | 
| + if (err || !value) | 
| + errorCallback(new Error("File doesn't exist")); | 
| else | 
| - errorCallback(new Error("File doesn't exist")); | 
| + successCallback(value); | 
| }); | 
| } | 
| function saveFile(file, data, callback) | 
| { | 
| - ext.storage.set( | 
| - fileToKey(file), | 
| - { | 
| - content: Array.from(data), | 
| - lastModified: Date.now() | 
| - }, | 
| - callback | 
| - ); | 
| + var key = fileToKey(file); | 
| + var entry = { | 
| + content: Array.from(data), | 
| + lastModified: Date.now() | 
| + }; | 
| + | 
| + localStorage.removeItem(key); | 
| + localforage.setItem(key, entry, callback); | 
| } | 
| exports.IO = | 
| @@ -60,9 +76,11 @@ | 
| { | 
| function onLoaded(entry) | 
| { | 
| - for (let line of entry.content) | 
| - listener.process(line); | 
| - | 
| + if ("content" in entry) | 
| + { | 
| + for (let line of entry.content) | 
| + listener.process(line); | 
| + } | 
| listener.process(null); | 
| callback(null); | 
| } |