From 6f0eaf7091f161e2cc70d2e8b62e555ec2697404 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 4 Feb 2015 19:31:46 +0100 Subject: [PATCH] Don't save data from pusher that won't likely be used If user is logged in and doesn't keep 'recent repositories' tab opened, most of the pusher events from 'common' channel are useless. This commit introduces a logic to reject pusher events if: * recent tab hasn't been opened * user is signed in * Travis CI for open source is used * repository for a given event is not yet in store * repository for a given event is not part of current user's repositories --- app/routes/main/recent.coffee | 3 +++ app/store.coffee | 17 +++++++++++++++++ app/utils/auth.coffee | 2 ++ 3 files changed, 22 insertions(+) diff --git a/app/routes/main/recent.coffee b/app/routes/main/recent.coffee index 9ac661d9..5e8e2e2f 100644 --- a/app/routes/main/recent.coffee +++ b/app/routes/main/recent.coffee @@ -4,4 +4,7 @@ Route = MainTabRoute.extend reposTabName: 'recent' + activate: -> + @store.set('recentReposOpened', true) + `export default Route` diff --git a/app/store.coffee b/app/store.coffee index 213403df..d5c40077 100644 --- a/app/store.coffee +++ b/app/store.coffee @@ -1,4 +1,5 @@ `import DS from 'ember-data'` +`import config from 'travis/config/environment'` Store = DS.Store.extend defaultAdapter: 'application' @@ -7,6 +8,22 @@ Store = DS.Store.extend receivePusherEvent: (event, data) -> [name, type] = event.split(':') + auth = @container.lookup('auth:main') + if !@get('recentReposOpened') && event != 'job:log' && auth.get('signedIn') && + !config.pro && !config.enterprise + # if recent repos hasn't been opened yet, we can safely + # drop any events that doesn't belong to repos owned by + # the logged in user and that aren't related to any + # repositories that are already opened + + permissions = auth.get('permissions') + if name == 'job' + id = data.job.repository_id + else if name == 'build' + id = data.repository.id + + return if !@hasRecordForId('repo', id) && !permissions.contains(id) + if name == 'job' && data.job?.commit @pushPayload(commits: [data.job.commit]) diff --git a/app/utils/auth.coffee b/app/utils/auth.coffee index 9d2c7ff9..5852edee 100644 --- a/app/utils/auth.coffee +++ b/app/utils/auth.coffee @@ -144,4 +144,6 @@ Auth = Ember.Object.extend "#{location.protocol}//www.gravatar.com/avatar/#{@get('currentUser.gravatarId')}?s=48&d=mm" ).property('currentUser.gravatarId') + permissions: Ember.computed.alias('currentUser.permissions') + `export default Auth`