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 };
|