diff options
Diffstat (limited to 'web/react/stores')
-rw-r--r-- | web/react/stores/browser_store.jsx | 37 | ||||
-rw-r--r-- | web/react/stores/user_store.jsx | 9 |
2 files changed, 37 insertions, 9 deletions
diff --git a/web/react/stores/browser_store.jsx b/web/react/stores/browser_store.jsx index 75fb8aa3c..8e86ce32f 100644 --- a/web/react/stores/browser_store.jsx +++ b/web/react/stores/browser_store.jsx @@ -24,11 +24,17 @@ class BrowserStoreClass { this.setLastServerVersion = this.setLastServerVersion.bind(this); this.clear = this.clear.bind(this); this.clearAll = this.clearAll.bind(this); + this.checkedLocalStorageSupported = ''; + this.signalLogout = this.signalLogout.bind(this); var currentVersion = sessionStorage.getItem('storage_version'); if (currentVersion !== global.window.mm_config.Version) { sessionStorage.clear(); - sessionStorage.setItem('storage_version', global.window.mm_config.Version); + try { + sessionStorage.setItem('storage_version', global.window.mm_config.Version); + } catch (e) { + // Do nothing + } } } @@ -105,6 +111,13 @@ class BrowserStoreClass { sessionStorage.setItem('last_server_version', version); } + signalLogout() { + if (this.isLocalStorageSupported()) { + localStorage.setItem('__logout__', 'yes'); + localStorage.removeItem('__logout__'); + } + } + /** * Preforms the given action on each item that has the given prefix * Signature for action is action(key, value) @@ -147,20 +160,26 @@ class BrowserStoreClass { } isLocalStorageSupported() { + if (this.checkedLocalStorageSupported !== '') { + return this.checkedLocalStorageSupported; + } + try { - sessionStorage.setItem('testSession', '1'); - sessionStorage.removeItem('testSession'); + sessionStorage.setItem('__testSession__', '1'); + sessionStorage.removeItem('__testSession__'); - localStorage.setItem('testLocal', '1'); - if (localStorage.getItem('testLocal') !== '1') { - return false; + localStorage.setItem('__testLocal__', '1'); + if (localStorage.getItem('__testLocal__') !== '1') { + this.checkedLocalStorageSupported = false; } - localStorage.removeItem('testLocal', '1'); + localStorage.removeItem('__testLocal__', '1'); - return true; + this.checkedLocalStorageSupported = true; } catch (e) { - return false; + this.checkedLocalStorageSupported = false; } + + return this.checkedLocalStorageSupported; } } diff --git a/web/react/stores/user_store.jsx b/web/react/stores/user_store.jsx index 4fa7224b7..6b7d671fc 100644 --- a/web/react/stores/user_store.jsx +++ b/web/react/stores/user_store.jsx @@ -58,6 +58,8 @@ class UserStoreClass extends EventEmitter { this.setStatus = this.setStatus.bind(this); this.getStatuses = this.getStatuses.bind(this); this.getStatus = this.getStatus.bind(this); + + this.profileCache = null; } emitChange(userId) { @@ -184,6 +186,10 @@ class UserStoreClass extends EventEmitter { } getProfiles() { + if (this.profileCache !== null) { + return this.profileCache; + } + return BrowserStore.getItem('profiles', {}); } @@ -218,6 +224,7 @@ class UserStoreClass extends EventEmitter { saveProfile(profile) { var ps = this.getProfiles(); ps[profile.id] = profile; + this.profileCache = ps; BrowserStore.setItem('profiles', ps); } @@ -226,6 +233,8 @@ class UserStoreClass extends EventEmitter { if (currentId in profiles) { delete profiles[currentId]; } + + this.profileCache = profiles; BrowserStore.setItem('profiles', profiles); } |