Caret/installer.js

134 lines
3.9 KiB
JavaScript
Raw Normal View History

/*
For right now, run upgrades each time the background page reloads, just to be safe.
chrome.runtime.onInstalled.addListener(function(e) {
//this is where we'll track upgrades
if (!e.previousVersion) return;
var semver = e.previousVersion.split(".");
var major = semver[0];
var minor = semver[1];
var build = semver[2];
console.log("Upgrading Caret from version " + e.previousVersion);
*/
/*
As with Android database upgrades, we'll perform these as a series of if statements, ordered by increasing
version number. We should also provide a notification that the system is upgrading, and prevent opening new
windows until the process finishes. In theory, this script shares a document with background.js, so they can
just use a common flag to halt the openWindow process during upgrades.
*/
//upgrade object tracks async upgrade processes, and handles notifications
var upgrade = {
count: 0,
notification: true,
openWhenComplete: false,
errorURL: null,
noop: function() {},
start: function() {
this.count++;
if (!this.notification) {
chrome.notifications.create("caret:upgrading", {
type: "basic",
iconUrl: "icon-128.png",
title: "Caret: Upgrading...",
message: "Please wait while Caret upgrades its background files."
}, function(id) {
this.notification = id;
});
this.notification = true;
}
if (pending) {
clearTimeout(pending);
pending = null;
this.openWhenComplete = true;
}
2013-12-04 00:54:03 +00:00
//upgrading = true;
},
finish: function() {
this.count--;
2013-12-04 00:54:03 +00:00
console.log("finishing", this, this.count);
if (this.count <= 0) {
chrome.notifications.clear("caret:upgrading", this.noop);
upgrading = false;
if (this.openWhenComplete) {
2013-12-03 16:56:15 +00:00
openWindow();
this.openWhenComplete = false;
2013-12-03 16:56:15 +00:00
}
}
},
fail: function(url) {
this.finish();
this.errorURL = url;
chrome.notifications.create("caret:upgrade-error", {
type: "basic",
iconUrl: "icon-128.png",
title: "Upgrade was unsuccessful",
message: "Part of the Caret upgrade was unsuccessful. Click here for more information.",
isClickable: true
}, this.noop);
}
};
2013-12-04 00:54:03 +00:00
chrome.notifications.onClicked.addListener(function(id) {
if (id == "caret:upgrade-error") {
window.open(upgrade.errorURL, "_blank");
}
});
//start backing up settings to syncFileSystem
//currently not gated on version
if (true) {
chrome.storage.sync.get(function(sync) {
2013-12-04 00:54:03 +00:00
upgrade.start();
console.log("Upgrade: migrating settings from storage to syncFileSystem");
var man = "https://gist.github.com/thomaswilburn/7773707";
var saved = {};
var check = function() {
for (var name in sync) {
if (!(name in saved)) {
2013-12-04 00:54:03 +00:00
console.log("failed migration", name);
return;
}
}
upgrade.finish();
}
chrome.syncFileSystem.requestFileSystem(function(fs) {
if (!fs) {
2013-12-04 00:54:03 +00:00
return upgrade.fail(man);
}
window.fs = fs;
var root = fs.root;
for (var name in sync) {
root.getFile(name, {create: true}, function(f) {
f.createWriter(function(writer) {
writer.onwriteend = function() {
writer.onwriteend = function() {
saved[f.name] = f;
2013-12-04 00:54:03 +00:00
console.log("wrote file", f.name);
check();
};
writer.write(new Blob([sync[name]]));
};
writer.onerror = function() {
2013-12-04 00:54:03 +00:00
console.log("write error", f.name);
upgrade.fail(man);
}
writer.truncate(0);
});
}, function() {
2013-12-04 00:54:03 +00:00
console.log("getfile error");
upgrade.fail(man);
});
}
});
});
}
/*
});
*/