Merge pull request +6318 from c9/fix-vfs-storage

Save vfs to sessionStorage only on unload to not share it with other tabs
pull/39/head
Harutyun Amirjanyan 2015-02-23 16:32:58 +04:00
commit ee0fa0413a
1 zmienionych plików z 30 dodań i 12 usunięć

Wyświetl plik

@ -16,7 +16,7 @@ define(function(require, exports, module) {
var plugin = new Plugin("Ajax.org", main.consumes); var plugin = new Plugin("Ajax.org", main.consumes);
var emit = plugin.getEmitter(); var emit = plugin.getEmitter();
var urlServers; var urlServers, lastVfs;
var query = require("url").parse(document.location.href, true).query; var query = require("url").parse(document.location.href, true).query;
if (query.vfs) { if (query.vfs) {
if (!query.vfs.match(/^https:\/\/.*\/vfs$/)) if (!query.vfs.match(/^https:\/\/.*\/vfs$/))
@ -164,7 +164,6 @@ define(function(require, exports, module) {
return callback(new Error("Disconnected: Could not reach your workspace. Please try again later.")); return callback(new Error("Disconnected: Could not reach your workspace. Please try again later."));
var server = servers[i]; var server = servers[i];
auth.request(server.url + "/" + options.pid, { auth.request(server.url + "/" + options.pid, {
method: "POST", method: "POST",
timeout: 120000, timeout: 120000,
@ -268,22 +267,24 @@ define(function(require, exports, module) {
}; };
var data = JSON.stringify(vfs); var data = JSON.stringify(vfs);
var oldData = window.sessionStorage.getItem("vfsid");
var oldData = lastVfs || window.sessionStorage.getItem("vfsid");
if (oldData && oldData !== data) if (oldData && oldData !== data)
deleteOldVfs(); deleteOldVfs();
try { lastVfs = data;
window.sessionStorage.setItem("vfsid", data);
} catch(e) {
// could throw a quota exception
}
return vfs; return vfs;
} }
function recallVfs() { function recallVfs() {
var vfs; var vfs;
try { try {
vfs = JSON.parse(window.sessionStorage.getItem("vfsid")); vfs = JSON.parse(lastVfs || window.sessionStorage.getItem("vfsid"));
if (!lastVfs) {
window.sessionStorage.removeItem("vfsid");
lastVfs = JSON.stringify(vfs);
}
} catch (e) {} } catch (e) {}
if (!vfs) if (!vfs)
@ -300,10 +301,11 @@ define(function(require, exports, module) {
function deleteOldVfs() { function deleteOldVfs() {
var vfs; var vfs;
try { try {
vfs = JSON.parse(window.sessionStorage.getItem("vfsid")); vfs = JSON.parse(lastVfs || window.sessionStorage.getItem("vfsid"));
} catch (e) {} } catch (e) {}
window.sessionStorage.removeItem("vfsid"); window.sessionStorage.removeItem("vfsid");
lastVfs = null;
if (!vfs) return; if (!vfs) return;
auth.request(vfs.vfsid, { auth.request(vfs.vfsid, {
@ -315,13 +317,29 @@ define(function(require, exports, module) {
if (err) console.error(vfs.vfsid, "deleted", err); if (err) console.error(vfs.vfsid, "deleted", err);
}); });
} }
function fatalError(msg, action) { function fatalError(msg, action) {
var err = new Error(msg); var err = new Error(msg);
err.fatal = true; err.fatal = true;
err.action = action || "reload"; err.action = action || "reload";
return err; return err;
} }
function saveToSessionStorage() {
try {
window.sessionStorage.setItem("vfsid", lastVfs);
} catch(e) {
// could throw a quota exception
}
}
plugin.on("load", function() {
window.addEventListener("unload", saveToSessionStorage);
});
plugin.on("unload", function() {
window.removeEventListener("unload", saveToSessionStorage);
});
/***** Register and define API *****/ /***** Register and define API *****/