|
|
|
|
@ -4,12 +4,26 @@ class CachedCollectionManager { |
|
|
|
|
constructor() { |
|
|
|
|
this.items = []; |
|
|
|
|
this._syncEnabled = false; |
|
|
|
|
this.loginCb = []; |
|
|
|
|
this.logged = false; |
|
|
|
|
|
|
|
|
|
const _unstoreLoginToken = Accounts._unstoreLoginToken; |
|
|
|
|
Accounts._unstoreLoginToken = (...args) => { |
|
|
|
|
_unstoreLoginToken.apply(Accounts, args); |
|
|
|
|
this.clearAllCache(); |
|
|
|
|
this.clearAllCacheOnLogout(); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
Tracker.autorun(() => { |
|
|
|
|
if (Meteor.userId() !== null) { |
|
|
|
|
if (this.logged === false) { |
|
|
|
|
for (const cb of this.loginCb) { |
|
|
|
|
cb(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.logged = Meteor.userId() !== null; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
register(cachedCollection) { |
|
|
|
|
@ -22,6 +36,12 @@ class CachedCollectionManager { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
clearAllCacheOnLogout() { |
|
|
|
|
for (const item of this.items) { |
|
|
|
|
item.clearCacheOnLogout(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
countQueries() { |
|
|
|
|
for (const item of this.items) { |
|
|
|
|
item.countQueries(); |
|
|
|
|
@ -36,6 +56,13 @@ class CachedCollectionManager { |
|
|
|
|
get syncEnabled() { |
|
|
|
|
return this._syncEnabled; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onLogin(cb) { |
|
|
|
|
this.loginCb.push(cb); |
|
|
|
|
if (this.logged) { |
|
|
|
|
cb(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
RocketChat.CachedCollectionManager = new CachedCollectionManager; |
|
|
|
|
@ -49,6 +76,7 @@ class CachedCollection { |
|
|
|
|
syncMethodName, |
|
|
|
|
eventName, |
|
|
|
|
eventType = 'onUser', |
|
|
|
|
initOnLogin = false, |
|
|
|
|
useSync = true, |
|
|
|
|
useCache = true, |
|
|
|
|
debug = true, |
|
|
|
|
@ -67,10 +95,21 @@ class CachedCollection { |
|
|
|
|
this.useCache = useCache; |
|
|
|
|
this.debug = debug; |
|
|
|
|
this.version = version; |
|
|
|
|
this.initOnLogin = initOnLogin; |
|
|
|
|
this.updatedAt = new Date(0); |
|
|
|
|
this.maxCacheTime = maxCacheTime; |
|
|
|
|
|
|
|
|
|
RocketChat.CachedCollectionManager.register(this); |
|
|
|
|
|
|
|
|
|
if (initOnLogin === true) { |
|
|
|
|
RocketChat.CachedCollectionManager.onLogin(() => { |
|
|
|
|
this.log('Init on login'); |
|
|
|
|
this.ready.set(false); |
|
|
|
|
this.updatedAt = new Date(0); |
|
|
|
|
this.initiated = false; |
|
|
|
|
this.init(); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log(...args) { |
|
|
|
|
@ -209,9 +248,16 @@ class CachedCollection { |
|
|
|
|
this.log('saving cache (done)'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
clearCacheOnLogout() { |
|
|
|
|
if (this.initOnLogin === true) { |
|
|
|
|
this.clearCache(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
clearCache() { |
|
|
|
|
this.log('clearing cache'); |
|
|
|
|
localforage.removeItem(this.name); |
|
|
|
|
this.collection.remove({}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
setupListener(eventType, eventName) { |
|
|
|
|
|