Skip to content

Commit 02a1042

Browse files
committed
Alternate implementation of localStorage for embedded veresion.
1 parent a2de37d commit 02a1042

File tree

4 files changed

+74
-11
lines changed

4 files changed

+74
-11
lines changed

codepulse/src/main/resources/toserve/common/CodePulse.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@
5454
return CodePulse.pathPrefix + '/api/' + endpoint
5555
}
5656

57+
if (CodePulse.isEmbedded)
58+
CodePulse.storage = process.mainModule.exports.storage;
59+
else
60+
CodePulse.storage = window.localStorage;
61+
5762
// Handle external links via the "external-href" attribute
5863
$(document).ready(function(){
5964

codepulse/src/main/resources/toserve/common/UpdateController.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@
7373

7474
/** returns true if the user has ignored this version */
7575
function isUpdateIgnored(version) {
76-
return localStorage.getItem('updater.ignoredVersion') == version
76+
return CodePulse.storage.getItem('updater.ignoredVersion') == version
7777
}
7878

79-
this.ignoreCurrentRelease = function() { localStorage.setItem('updater.ignoredVersion', self.releaseVersion) }
79+
this.ignoreCurrentRelease = function() { CodePulse.storage.setItem('updater.ignoredVersion', self.releaseVersion) }
8080

8181
/** checks `release`, firing off the appropriate events as necessary */
8282
function checkRelease(release) {
@@ -97,15 +97,15 @@
9797
getLatestRelease(function(latestRelease) {
9898
checkRelease(latestRelease)
9999

100-
localStorage.setItem('updater.latestReleaseCache', JSON.stringify(latestRelease))
101-
localStorage.setItem('updater.lastCheck', Date.now())
100+
CodePulse.storage.setItem('updater.latestReleaseCache', JSON.stringify(latestRelease))
101+
CodePulse.storage.setItem('updater.lastCheck', Date.now())
102102
setTimeout(runUpdateCheck, CheckInterval)
103103
})
104104
}
105105

106106
/** schedule an update check (or run one immediately), based on the last check time */
107107
function scheduleUpdateCheck() {
108-
var lastCheck = parseInt(localStorage.getItem('updater.lastCheck'))
108+
var lastCheck = parseInt(CodePulse.storage.getItem('updater.lastCheck'))
109109
var curTime = Date.now()
110110

111111
if (!lastCheck || curTime > (lastCheck + CheckInterval))
@@ -115,7 +115,7 @@
115115
setTimeout(runUpdateCheck, lastCheck + CheckInterval - curTime)
116116

117117
// for now, check what's cached, if we can
118-
var cachedRelease = JSON.parse(localStorage.getItem('updater.latestReleaseCache'))
118+
var cachedRelease = JSON.parse(CodePulse.storage.getItem('updater.latestReleaseCache'))
119119
if (cachedRelease)
120120
checkRelease(cachedRelease)
121121
}

codepulse/src/main/resources/toserve/pages/projects/trace-recording-controls.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,17 @@
9898

9999
this.getOrElseUpdate = function(rawKey, defaultValue){
100100
var key = storageKey(rawKey)
101-
entry = localStorage.getItem(key)
101+
entry = CodePulse.storage.getItem(key)
102102
if(!entry) {
103103
entry = defaultValue
104-
localStorage.setItem(key, entry)
104+
CodePulse.storage.setItem(key, entry)
105105
}
106106
return entry
107107
}
108108

109109
this.update = function(rawKey, newValue){
110110
var key = storageKey(rawKey)
111-
localStorage.setItem(key, newValue)
111+
CodePulse.storage.setItem(key, newValue)
112112
}
113113
}
114114
var localStorageColors = new LocalStorageColors()

distrib/common/app/main.js

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,14 @@ function checkWindowClose(window, cb) {
221221
} else cb();
222222
}
223223

224-
var gotMainWindow = false;
224+
var mainWindow = false;
225225

226226
exports.registerMainWindow = function(window) {
227-
if (!gotMainWindow) {
227+
if (!mainWindow) {
228228
writeLog('Registering main window...\n');
229+
mainWindow = window;
230+
231+
initStorage();
229232

230233
window.gui.on('close', function() {
231234
checkWindowClose(window.window, function() {
@@ -246,4 +249,59 @@ exports.registerMainWindow = function(window) {
246249
} else {
247250
writeLog('Attempt to re-register main window ignored...\n');
248251
}
252+
}
253+
254+
// an alternate implementation of localStorage for the embedded version
255+
// (since port number changes, so we're on a different origin every time, and therefore receive a
256+
// different localStorage)
257+
function initStorage() {
258+
var gui = global.window.nwDispatcher.requireNwGui(),
259+
path = require('path'), fs = require('fs');
260+
261+
var storage = {},
262+
storeFile = path.join(gui.App.dataPath, 'storage.json');
263+
264+
function loadStorage() {
265+
try {
266+
if (fs.existsSync(storeFile))
267+
storage = JSON.parse(fs.readFileSync(storeFile, 'utf8'));
268+
} catch (e) {
269+
writeLog('Error loading storage.json: ' + e + '\n');
270+
}
271+
}
272+
273+
function writeStorage() {
274+
fs.writeFileSync(storeFile, JSON.stringify(storage));
275+
}
276+
277+
function getItem(key) {
278+
return storage[key];
279+
}
280+
281+
function setItem(key, value) {
282+
if (typeof value !== 'string')
283+
value = value.toString();
284+
285+
storage[key] = value;
286+
writeStorage();
287+
}
288+
289+
function removeItem(key) {
290+
delete storage[key];
291+
writeStorage();
292+
}
293+
294+
function clear() {
295+
storage = {};
296+
writeStorage();
297+
}
298+
299+
loadStorage();
300+
301+
exports.storage = {
302+
getItem: function(key) { return getItem(key); },
303+
setItem: function(key, value) { setItem(key, value); },
304+
removeItem: function(key) { removeItem(key); },
305+
clear: function() { clear(); }
306+
};
249307
}

0 commit comments

Comments
 (0)