Skip to content

Commit

Permalink
#253 file storage
Browse files Browse the repository at this point in the history
  • Loading branch information
Mizzick committed May 24, 2016
1 parent b6fe054 commit e310ab3
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 246 deletions.
170 changes: 19 additions & 151 deletions Extension/browser/chrome/lib/utils/file-storage.js
Expand Up @@ -23,162 +23,30 @@ var FS = exports.FS = {
LINE_BREAK: '\n',

readFromFile: function (path, callback) {

var successCallback = function (fs, fileEntry) {

fileEntry.file(function (file) {

var reader = new FileReader();
reader.onloadend = function () {

if (reader.error) {
callback(reader.error);
} else {
var lines = [];
if (reader.result) {
lines = reader.result.split(/[\r\n]+/);
}
callback(null, lines);
}
};

reader.onerror = function (e) {
callback(e);
};

reader.readAsText(file);

}, callback);
};

this._getFile(path, true, successCallback, callback);
try {
var value = LS.getItem(path);
var lines = [];
if (value) {
lines = value.split(/[\r\n]+/);
}
callback(null, lines);
} catch (ex) {
callback(ex);
}
},

writeToFile: function (path, data, callback) {

var successCallback = function (fs, fileEntry) {

fileEntry.createWriter(function (fileWriter) {

var writeOperation = function (operation, nextOperation) {

fileWriter.onwriteend = function () {
if (fileWriter.error) {
callback(fileWriter.error);
} else {
nextOperation();
}
};

fileWriter.onerror = function (e) {
callback(e);
};

operation();
};

var nextOperation = function () {
var blob;
try {
blob = new Blob([data.join(FS.LINE_BREAK)], {type: "text/plain"});
} catch (ex) {
var builder = new (window.BlobBuilder || window.WebKitBlobBuilder)();
builder.append(data.join(FS.LINE_BREAK));
blob = builder.getBlob("text/plain");
}

writeOperation(fileWriter.write.bind(fileWriter, blob), callback);
};

writeOperation(fileWriter.truncate.bind(fileWriter, 0), nextOperation);

}, callback);
};

this._getFile(path, true, successCallback, callback);
},

_getFile: function (path, create, successCallback, errorCallback) {

path = path.replace(/^.*[\/\\]/, "");

var requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
requestFileSystem(window.PERSISTENT, 1024 * 1024 * 1024, function (fs) {
fs.root.getFile(path, {create: create}, function (fileEntry) {
successCallback(fs, fileEntry);
}, errorCallback);
}, errorCallback);
},

translateError: function (e) {
var msg = e.message || e.name;
if (msg) {
return msg;
var value = data.join(FS.LINE_BREAK);
try {
LS.setItem(path, value);
callback();
} catch (ex) {
callback(ex);
}
switch (e.code) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
}
return msg;
},

/**
* @Deprecated use only for data transfer from previous versions
* @param path
* @param listener
* @param callback
*/
readFromFileWithListener: function (path, listener, callback) {

var successCallback = function (fs, fileEntry) {

fileEntry.file(function (file) {

var reader = new FileReader();
reader.onloadend = function () {

if (reader.error) {
callback(reader.error);
} else {
var lines = reader.result.split(/[\r\n]+/);
for (var i = 0; i < lines.length; i++) {
listener.process(lines[i]);
}
callback(null);
}
};

reader.onerror = function (e) {
callback(e);
};

reader.readAsText(file);

}, callback);
};

this._getFile(path, false, successCallback, callback);
},

removeFile: function (path, successCallback, errorCallback) {
this._getFile(path, false, function (fs, fileEntry) {
fileEntry.remove(successCallback, errorCallback);
}, errorCallback);
removeFile: function (path, successCallback) {
LS.removeItem(path);
successCallback();
}
};
6 changes: 3 additions & 3 deletions Extension/browser/firefox/lib/utils/file-storage.js
Expand Up @@ -77,7 +77,7 @@ var FS = exports.FS = {
NetUtil.asyncFetch(aSource, fetchCallback);
}
} catch (ex) {
callback(ex);
callback(this._translateError(ex));
}
},

Expand All @@ -99,7 +99,7 @@ var FS = exports.FS = {

} catch (ex) {
Log.error("Error writing to file {0}, cause: {1}", filename, ex);
callback(ex);
callback(this._translateError(ex));
}
},

Expand Down Expand Up @@ -134,7 +134,7 @@ var FS = exports.FS = {
sdkFile.mkpath(adguardDir);
},

translateError: function (e) {
_translateError: function (e) {
var msg = e.message || e.name;
if (msg) {
return msg;
Expand Down
71 changes: 0 additions & 71 deletions Extension/browser/safari/lib/utils/file-storage.js

This file was deleted.

24 changes: 3 additions & 21 deletions Extension/lib/filter/storage.js
Expand Up @@ -41,7 +41,7 @@ var FilterStorage = exports.FilterStorage = {
var filePath = FilterStorage._getFilePath(filterId);
FS.writeToFile(filePath, filterRules, function (e) {
if (e) {
Log.error("Error write filters to file {0} cause: {1}", filePath, FS.translateError(e));
Log.error("Error write filters to file {0} cause: {1}", filePath, e);
}
if (callback) {
callback();
Expand All @@ -59,7 +59,7 @@ var FilterStorage = exports.FilterStorage = {
var filePath = FilterStorage._getFilePath(filterId);
FS.readFromFile(filePath, function (e, rules) {
if (e) {
Log.error("Error while reading rules from file {0} cause: {1}", filePath, FS.translateError(e));
Log.error("Error while reading rules from file {0} cause: {1}", filePath, e);
}
callback(rules);
}.bind(this));
Expand All @@ -86,7 +86,7 @@ var FilterStorage = exports.FilterStorage = {

FS.writeToFile(filePath, cssRules, function (e) {
if (e && e.error) {
Log.error("Error write css styleSheet to file {0} cause: {1}", filePath, FS.translateError(e.error));
Log.error("Error write css styleSheet to file {0} cause: {1}", filePath, e);
return;
} else {
callback();
Expand All @@ -113,24 +113,6 @@ var FilterStorage = exports.FilterStorage = {
return this.injectCssUrl;
},

/**
* This method is deprecated, used in previous version until to 1.0.1.0
* TODO: Remove it
*
* @deprecated
* @param successCallback
*/
loadFromDisk: function (successCallback) {
var filePath = FilterStorage.FILE_PATH;
var parser = new FilterParser();
FS.readFromFileWithListener(filePath, parser, function (e) {
if (e) {
Log.error("Error read filters from file {0} cause: {1}", filePath, FS.translateError(e));
}
successCallback(parser.antiBannerFilters || []);
}.bind(this));
},

_getFilePath: function (filterId) {
return "filterrules_" + filterId + ".txt";
}
Expand Down

0 comments on commit e310ab3

Please sign in to comment.