keeweb/app/scripts/comp/app/single-instance-checker.js

44 lines
1.3 KiB
JavaScript
Raw Normal View History

2019-09-15 14:16:32 +02:00
import Backbone from 'backbone';
import { Launcher } from 'comp/launcher';
2016-09-16 19:33:38 +02:00
const LocalStorageKeyName = 'instanceCheck';
const LocalStorageResponseKeyName = 'instanceMaster';
2017-01-31 07:50:28 +01:00
const instanceKey = Date.now().toString();
2016-09-16 19:33:38 +02:00
2017-01-31 07:50:28 +01:00
const SingleInstanceChecker = {
2019-08-18 10:17:09 +02:00
init() {
2016-09-16 19:33:38 +02:00
if (Launcher) {
return;
}
window.addEventListener('storage', SingleInstanceChecker.storageChanged);
SingleInstanceChecker.setKey(LocalStorageKeyName, instanceKey);
},
2019-08-18 10:17:09 +02:00
storageChanged(e) {
2016-09-16 19:33:38 +02:00
if (!e.newValue) {
return;
}
if (e.key === LocalStorageKeyName && e.newValue !== instanceKey) {
2019-08-18 08:05:38 +02:00
SingleInstanceChecker.setKey(
LocalStorageResponseKeyName,
instanceKey + Math.random().toString()
);
2016-09-16 19:33:38 +02:00
} else if (e.key === LocalStorageResponseKeyName && e.newValue.indexOf(instanceKey) < 0) {
window.removeEventListener('storage', SingleInstanceChecker.storageChanged);
Backbone.trigger('second-instance');
}
},
2019-08-18 10:17:09 +02:00
setKey(key, value) {
2016-09-16 19:33:38 +02:00
try {
localStorage.setItem(key, value);
2019-08-16 23:05:39 +02:00
setTimeout(() => {
localStorage.removeItem(key);
}, 100);
2016-09-16 19:33:38 +02:00
} catch (e) {}
}
};
2019-09-15 14:16:32 +02:00
export { SingleInstanceChecker };