Import from private repo
Este commit está contenido en:
84
content/db.js
Archivo normal
84
content/db.js
Archivo normal
@@ -0,0 +1,84 @@
|
||||
"use strict";
|
||||
let EXPORTED_SYMBOLS = ["DB"];
|
||||
|
||||
var Cc = Components.classes, Ci = Components.interfaces, Cu = Components.utils;
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/NetUtil.jsm");
|
||||
Cu.import("resource://gre/modules/FileUtils.jsm");
|
||||
|
||||
function copyDataURLToFile(document, url, file, callback) {
|
||||
NetUtil.asyncFetch(url, function(istream) {
|
||||
let ostream = Cc["@mozilla.org/network/file-output-stream;1"].
|
||||
createInstance(Ci.nsIFileOutputStream);
|
||||
ostream.init(file, -1, -1, Ci.nsIFileOutputStream.DEFER_OPEN);
|
||||
NetUtil.asyncCopy(istream, ostream, function(result) {
|
||||
callback && callback(file, result, document);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function showMessage(document, msg, style) {
|
||||
let div = document.createElement("div");
|
||||
div.className = style;
|
||||
div.appendChild(document.createTextNode(msg));
|
||||
let page = document.getElementById("page");
|
||||
page.appendChild(div);
|
||||
}
|
||||
|
||||
let DB = {
|
||||
|
||||
db: null,
|
||||
|
||||
openDB: function(dbname, document) {
|
||||
let dir = Services.dirsvc.get("ProfD", Ci.nsIFile); dir.append("ca-archive");
|
||||
try {
|
||||
let storageService = Cc["@mozilla.org/storage/service;1"].getService(Ci.mozIStorageService);
|
||||
let dbFile = dir.clone(); dbFile.append(dbname);
|
||||
if (dbFile.exists() && dbFile.fileSize > 0) {
|
||||
this.db = storageService.openDatabase(dbFile);
|
||||
} else {
|
||||
if (!dir.exists()) {
|
||||
showMessage(document, "Performing initial database provisioning ...", "db-warning ok");
|
||||
throw "Init";
|
||||
} else {
|
||||
throw "CA Archive database has jast been updated, not ready or corrupted!";
|
||||
}
|
||||
}
|
||||
return true;
|
||||
} catch (e) {
|
||||
if (e != "Init") {
|
||||
Cu.reportError(e);
|
||||
showMessage(document, e, "db-warning");
|
||||
showMessage(document, "Trying to (re)provision database, please wait ...", "db-warning");
|
||||
}
|
||||
let tmpFile = FileUtils.getFile("TmpD", ["ca-archive.tmp"]);
|
||||
tmpFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE);
|
||||
let src = Services.io.newURI("chrome://ca-archive/content/db/" + dbname, null, null);
|
||||
copyDataURLToFile(document, src, tmpFile, function(file, result, document) {
|
||||
try {
|
||||
if (result == 0 && file.exists()) {
|
||||
if (dir.exists()) {
|
||||
dir.remove(true);
|
||||
}
|
||||
dir.create(1, FileUtils.PERMS_FILE);
|
||||
tmpFile.moveTo(dir, dbname);
|
||||
showMessage(document, "Database has been processed successfully!", "db-warning ok");
|
||||
showMessage(document, "Please reload the page.", "db-warning ok");
|
||||
} else {
|
||||
throw "CA Archive database Fatal Error!";
|
||||
}
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
showMessage(document, e, "db-warning bad");
|
||||
showMessage(document, "Try to reinstall CA Archive.", "db-warning bad");
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
closeDB: function() {
|
||||
this.db.close();
|
||||
}
|
||||
|
||||
};
|
||||
Referencia en una nueva incidencia
Block a user