2013-12-03 16:54:48 +00:00
|
|
|
chrome.runtime.onInstalled.addListener(function(e) {
|
2013-10-08 00:54:20 +00:00
|
|
|
//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];
|
|
|
|
|
2013-12-03 00:35:50 +00:00
|
|
|
/*
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
*/
|
2013-12-03 16:28:34 +00:00
|
|
|
|
|
|
|
var process = {
|
|
|
|
count: 0,
|
2013-12-03 16:54:48 +00:00
|
|
|
notification: null,
|
|
|
|
openWhenComplete: false,
|
|
|
|
errorURL: null,
|
|
|
|
noop: function() {},
|
2013-12-03 16:28:34 +00:00
|
|
|
start: function() {
|
|
|
|
this.count++;
|
2013-12-03 16:54:48 +00:00
|
|
|
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);
|
|
|
|
this.openWhenComplete = true;
|
|
|
|
}
|
2013-12-03 16:28:34 +00:00
|
|
|
},
|
|
|
|
finish: function() {
|
|
|
|
this.count--;
|
2013-12-03 16:54:48 +00:00
|
|
|
if (this.count <= 0) {
|
|
|
|
chrome.notifications.clear("caret:upgrading", process.noop);
|
2013-12-03 16:56:15 +00:00
|
|
|
if (this.openWhenComplete) {
|
|
|
|
openWindow();
|
|
|
|
}
|
2013-12-03 16:28:34 +00:00
|
|
|
}
|
2013-12-03 16:54:48 +00:00
|
|
|
},
|
|
|
|
fail: function(url) {
|
|
|
|
process.errorURL = url;
|
|
|
|
chrome.notifications.create("caret:upgrade-error", {
|
|
|
|
type: "basic",
|
|
|
|
iconUrl: "icon-128.png",
|
|
|
|
title: "Upgrade was unsuccessful",
|
|
|
|
message: "Part of the Caret upgrade process was unsuccessful. Click here for more information.",
|
|
|
|
isClickable: true
|
|
|
|
}, process.noop);
|
|
|
|
chrome.notifications.onClicked.addListener(function(id) {
|
|
|
|
if (id == "caret:upgrade-error") {
|
|
|
|
window.open(process.errorURL);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
this.finish();
|
2013-12-03 16:28:34 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
//start backing up settings to syncFileSystem
|
|
|
|
if (true) {
|
|
|
|
process.start();
|
|
|
|
chrome.storage.sync.get(function(sync) {
|
|
|
|
var saved = {};
|
|
|
|
var check = function() {
|
|
|
|
for (var name in sync) {
|
|
|
|
if (!(name in saved)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
process.finish();
|
|
|
|
}
|
|
|
|
chrome.syncFileSystem.requestFileSystem(function(fs) {
|
2013-12-03 16:54:48 +00:00
|
|
|
if (!fs) {
|
|
|
|
return process.fail("http://example.com");
|
|
|
|
}
|
2013-12-03 16:28:34 +00:00
|
|
|
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() {
|
2013-12-03 16:54:48 +00:00
|
|
|
writer.onwriteend = function() {
|
|
|
|
saved[f.name] = f;
|
|
|
|
check();
|
|
|
|
};
|
2013-12-03 16:28:34 +00:00
|
|
|
writer.write(new Blob([sync[name]]));
|
|
|
|
};
|
|
|
|
writer.truncate(0);
|
|
|
|
});
|
|
|
|
}, function() {
|
|
|
|
process.fail("http://example.com");
|
2013-12-03 16:54:48 +00:00
|
|
|
});
|
2013-12-03 16:28:34 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2013-12-03 00:35:50 +00:00
|
|
|
|
2013-12-03 16:54:48 +00:00
|
|
|
});
|