Merge pull request #4009 from RocketChat/improvements/load-and-clear-cache-correctly

Load and clear some cache on login
pull/4010/head
Gabriel Engel 10 years ago committed by GitHub
commit e76d2df45b
  1. 1
      client/routes/router.coffee
  2. 4
      packages/rocketchat-authorization/client/lib/ChatPermissions.coffee
  3. 48
      packages/rocketchat-lib/client/lib/cachedCollection.js
  4. 9
      packages/rocketchat-ui/lib/RoomManager.coffee
  5. 2
      packages/rocketchat-ui/lib/collections.coffee

@ -6,7 +6,6 @@ BlazeLayout.setRoot 'body'
FlowRouter.subscriptions = ->
Tracker.autorun =>
if Meteor.userId()
RoomManager.init()
@register 'userData', Meteor.subscribe('userData')
@register 'activeUsers', Meteor.subscribe('activeUsers')

@ -1,4 +1,2 @@
RocketChat.authz.cachedCollection = new RocketChat.CachedCollection({ name: 'permissions', eventType: 'onAll' })
RocketChat.authz.cachedCollection = new RocketChat.CachedCollection({ name: 'permissions', eventType: 'onAll', initOnLogin: true })
@ChatPermissions = RocketChat.authz.cachedCollection.collection
RocketChat.authz.cachedCollection.init()

@ -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) {

@ -55,14 +55,6 @@ Tracker.autorun ->
Dep = new Tracker.Dependency
init = ->
if CachedChatSubscription.ready.get()
return
CachedChatSubscription.init()
return
close = (typeName) ->
if openedRooms[typeName]
if openedRooms[typeName].sub?
@ -245,7 +237,6 @@ Tracker.autorun ->
open: open
close: close
closeAllRooms: closeAllRooms
init: init
getDomOfRoom: getDomOfRoom
existsDomOfRoom: existsDomOfRoom
msgStream: msgStream

@ -1,7 +1,7 @@
@ChatMessage = new Meteor.Collection null
@ChatRoom = new Meteor.Collection 'rocketchat_room'
@CachedChatSubscription = new RocketChat.CachedCollection({ name: 'subscriptions' })
@CachedChatSubscription = new RocketChat.CachedCollection({ name: 'subscriptions', initOnLogin: true })
@ChatSubscription = CachedChatSubscription.collection
@UserRoles = new Mongo.Collection null
@RoomRoles = new Mongo.Collection null

Loading…
Cancel
Save