Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/io.js

Issue 29350042: Issue 4023 - Move storage of subscription lists to localStorage (Closed)
Patch Set: Created Aug. 22, 2016, 9:24 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/ext/background.js ('k') | lib/lz-string.js » ('j') | lib/lz-string.js » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/io.js
===================================================================
--- a/lib/io.js
+++ b/lib/io.js
@@ -15,6 +15,8 @@
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
*/
+"use strict";
+
const keyPrefix = "file:";
function fileToKey(file)
@@ -22,33 +24,36 @@
return keyPrefix + (file instanceof FakeFile ? file.path : file.spec);
}
-function loadFile(file, successCallback, errorCallback)
+function loadFile(file)
{
- let key = fileToKey(file);
-
- ext.storage.get([key], function(items)
+ return new Promise((resolve, reject) =>
{
- let entry = items[key];
-
- if (entry)
- successCallback(entry);
- else
- errorCallback(new Error("File doesn't exist"));
+ let key = fileToKey(file);
+ ext.storage.get([key], items =>
+ {
+ let entry = items[key];
+ if (!entry)
+ {
+ // Check in localStorage
+ try
+ {
+ entry = JSON.parse(window.localStorage.getItem(key));
+ }
+ catch(err)
+ {
+ entry = null;
kzar 2016/08/22 15:38:32 Nit: `entry = null` seems redundant since we alrea
Oleksandr 2016/08/31 21:54:35 Done.
+ }
+ }
+ if (entry)
+ resolve(entry);
+ else
+ {
kzar 2016/08/22 15:38:32 Nit: Please remove the braces for the else clause.
Oleksandr 2016/08/31 21:54:35 Done.
+ reject(new Error("File doesn't exist"));
+ }
+ });
});
}
-function saveFile(file, data, callback)
-{
- ext.storage.set(
- fileToKey(file),
- {
- content: data,
- lastModified: Date.now()
- },
- callback
- );
-}
-
exports.IO =
{
resolveFilePath: function(path)
@@ -60,47 +65,44 @@
{
function onLoaded(entry)
{
- for (let line of entry.content)
- listener.process(line);
-
- listener.process(null);
+ if ("content" in entry)
+ {
+ if ("compressed" in entry)
+ entry.content = JSON.parse(LZString.decompressFromUTF16(entry.content));
+ for (let line of entry.content)
+ listener.process(line);
+ }
callback(null);
}
- loadFile(file, onLoaded, callback);
+ loadFile(file).then(onLoaded, callback);
},
writeToFile: function(file, data, callback)
{
- saveFile(file, data, callback);
- },
+ let entry = {};
+ var key = fileToKey(file);
kzar 2016/08/22 15:38:32 You seem to use let and var inconsistently through
Oleksandr 2016/08/31 21:54:35 Done.
- copyFile: function(fromFile, toFile, callback)
kzar 2016/08/22 15:38:32 copyFile and renameFile have been removed?
Oleksandr 2016/08/31 21:54:35 Yes.
kzar 2016/09/01 12:57:37 But aren't they needed by adblockpluscore/lib/file
Oleksandr 2016/09/02 04:12:26 I don't think they are. Looks like we are not doin
kzar 2016/09/02 08:57:49 Ah Ok, fair enough.
- {
- function onLoaded(entry)
+ // Edge cannot write files larger than 1Mb (500k string in UTF-16).
+ // However it does not always raise an exception when trying to do so.
+ if (typeof browser == "undefined")
kzar 2016/08/22 15:38:32 Since this code is for the adblockplusedge reposit
Sebastian Noack 2016/08/22 16:49:19 As discussed on IRC, this should go into a bookmar
Oleksandr 2016/08/31 21:54:36 Acknowledged.
{
- saveFile(toFile, entry.content, callback);
+ entry[key] = {lastModified: Date.now(),
+ content: data};
+ ext.storage.set(entry, callback);
}
-
- loadFile(fromFile, onLoaded, callback);
- },
-
- renameFile: function(fromFile, newName, callback)
- {
- function onLoaded()
+ else
{
- ext.storage.remove(fileToKey(fromFile), function()
- {
- ext.storage.set(keyPrefix + newName, entry, callback);
- });
+ // Compress and fallback to localStorage
+ var dataString = JSON.stringify(data);
kzar 2016/08/22 15:38:32 Perhaps do the JSON serialization and compression
Oleksandr 2016/08/31 21:54:35 Done.
+ var processedData = LZString.compressToUTF16(dataString);
+ chrome.storage.local.remove(key);
kzar 2016/08/22 15:38:32 Did you mean to use chrome.storage instead of ext.
Oleksandr 2016/08/31 21:54:36 Done.
+ entry[key] = {lastModified: Date.now(),
+ content: processedData,
+ compressed: true};
+ window.localStorage.setItem(key, JSON.stringify(entry[key]));
+ callback();
}
-
- loadFile(fromFile, onLoaded, callback);
- },
-
- removeFile: function(file, callback)
- {
- ext.storage.remove(fileToKey(file), callback);
},
statFile: function(file, callback)
@@ -113,6 +115,6 @@
});
}
- loadFile(file, onLoaded, callback);
+ loadFile(file).then(onLoaded, callback);
}
};
« no previous file with comments | « chrome/ext/background.js ('k') | lib/lz-string.js » ('j') | lib/lz-string.js » ('J')

Powered by Google App Engine
This is Rietveld