From 5065bb573978d94c664a31982c7334168ebb74ee Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Thu, 15 Jan 2015 10:36:35 +0100 Subject: [PATCH] Subscribe to pusher channels only when entering the MainRoute We don't want to subscribe if we're at any other routes, because there is no data there. The main target is to avoid all of the notifications from a common channel if we're on the /dashboard route. --- assets/scripts/app/pusher.coffee | 4 +++- assets/scripts/app/routes.coffee | 2 ++ assets/scripts/app/routes/dashboard.coffee | 7 +++++++ assets/scripts/app/routes/main.coffee | 6 ++++++ assets/scripts/app/templates/dashboard.hbs | 1 + .../app/templates/layouts/dashboard.hbs | 5 +++++ assets/scripts/app/views.coffee | 21 ++----------------- assets/scripts/app/views/dashboard.coffee | 8 +++++++ assets/scripts/app/views/view.coffee | 19 +++++++++++++++++ assets/scripts/travis.coffee | 7 +++++++ 10 files changed, 60 insertions(+), 20 deletions(-) create mode 100644 assets/scripts/app/routes/dashboard.coffee create mode 100644 assets/scripts/app/templates/dashboard.hbs create mode 100644 assets/scripts/app/templates/layouts/dashboard.hbs create mode 100644 assets/scripts/app/views/dashboard.coffee create mode 100644 assets/scripts/app/views/view.coffee diff --git a/assets/scripts/app/pusher.coffee b/assets/scripts/app/pusher.coffee index 74802a85..b1abc51f 100644 --- a/assets/scripts/app/pusher.coffee +++ b/assets/scripts/app/pusher.coffee @@ -21,7 +21,6 @@ $.extend Travis.Pusher.prototype, Pusher.warn = @warn.bind(this) Pusher.host = config.host if config.host @pusher = new Pusher(config.key, encrypted: Travis.Pusher.ENCRYPTED, disableStats: true) - @subscribeAll(Travis.Pusher.CHANNELS) if Travis.Pusher.CHANNELS @callbacksToProcess = [] @@ -33,6 +32,9 @@ $.extend Travis.Pusher.prototype, subscribeAll: (channels) -> @subscribe(channel) for channel in channels + unsubscribeAll: (channels) -> + @unsubscribe(channel) for channel in channels + subscribe: (channel) -> return unless channel channel = @prefix(channel) diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index 96233579..830bf89a 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -9,6 +9,7 @@ Ember.Router.reopen @_super(url) Travis.Router.map -> + @resource 'dashboard' @resource 'main', path: '/', -> @resource 'getting_started' @route 'recent' @@ -80,3 +81,4 @@ require 'routes/settings' require 'routes/simple_layout' require 'routes/ssh_key' require 'routes/stats' +require 'routes/dashboard' diff --git a/assets/scripts/app/routes/dashboard.coffee b/assets/scripts/app/routes/dashboard.coffee new file mode 100644 index 00000000..114efe6c --- /dev/null +++ b/assets/scripts/app/routes/dashboard.coffee @@ -0,0 +1,7 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend() + +Travis.DashboardRoute = Route diff --git a/assets/scripts/app/routes/main.coffee b/assets/scripts/app/routes/main.coffee index b5bf6bb5..7ae7fe80 100644 --- a/assets/scripts/app/routes/main.coffee +++ b/assets/scripts/app/routes/main.coffee @@ -1,6 +1,8 @@ require 'routes/route' +require 'pusher' TravisRoute = Travis.Route +channels = Travis.Pusher.CHANNELS Route = TravisRoute.extend renderTemplate: -> @@ -15,5 +17,9 @@ Route = TravisRoute.extend toActivate = if @signedIn() then 'owned' else 'recent' @container.lookup('controller:repos').activate(toActivate) + activate: -> + # subscribe to pusher only if we're at a main route + if channels + @get('pusher').subscribeAll(channels) Travis.MainRoute = Route diff --git a/assets/scripts/app/templates/dashboard.hbs b/assets/scripts/app/templates/dashboard.hbs new file mode 100644 index 00000000..13a665c5 --- /dev/null +++ b/assets/scripts/app/templates/dashboard.hbs @@ -0,0 +1 @@ +DASHBOARD GOES HERE! diff --git a/assets/scripts/app/templates/layouts/dashboard.hbs b/assets/scripts/app/templates/layouts/dashboard.hbs new file mode 100644 index 00000000..8fd17179 --- /dev/null +++ b/assets/scripts/app/templates/layouts/dashboard.hbs @@ -0,0 +1,5 @@ +{{#link-to "main"}}Home{{/link-to}} + +{{yield}} + +END diff --git a/assets/scripts/app/views.coffee b/assets/scripts/app/views.coffee index ea0aa8b9..c7dda171 100644 --- a/assets/scripts/app/views.coffee +++ b/assets/scripts/app/views.coffee @@ -1,4 +1,5 @@ require 'ext/ember/namespace' +require 'views/view' Em.View.reopen init: -> @@ -9,25 +10,6 @@ Em.View.reopen Travis.NotFoundView = Ember.View.extend layoutName: 'layouts/simple' -@Travis.reopen - View: Em.View.extend - actions: - popup: (name) -> @popup(name) - popupClose: -> @popupClose() - - popup: (name) -> - @popupCloseAll() - name = event?.target?.name || name - $("##{name}").toggleClass('display') - popupClose: -> - $('.popup').removeClass('display') - popupCloseAll: -> - if view = Travis.View.currentPopupView - view.destroy() - Travis.View.currentPopupView = null - - $('.popup').removeClass('display') - Travis.MainView = Travis.View.extend layoutName: 'layouts/home' classNames: ['application'] @@ -120,3 +102,4 @@ require 'views/signin' require 'views/top' require 'views/status_images' require 'views/status_image_input' +require 'views/dashboard' diff --git a/assets/scripts/app/views/dashboard.coffee b/assets/scripts/app/views/dashboard.coffee new file mode 100644 index 00000000..4f29bfcd --- /dev/null +++ b/assets/scripts/app/views/dashboard.coffee @@ -0,0 +1,8 @@ +require 'views/view' + +TravisView = Travis.View + +View = TravisView.extend + layoutName: 'layouts/dashboard' + +Travis.DashboardView = View diff --git a/assets/scripts/app/views/view.coffee b/assets/scripts/app/views/view.coffee new file mode 100644 index 00000000..9ee4526a --- /dev/null +++ b/assets/scripts/app/views/view.coffee @@ -0,0 +1,19 @@ +View = Ember.View.extend + actions: + popup: (name) -> @popup(name) + popupClose: -> @popupClose() + + popup: (name) -> + @popupCloseAll() + name = event?.target?.name || name + $("##{name}").toggleClass('display') + popupClose: -> + $('.popup').removeClass('display') + popupCloseAll: -> + if view = Travis.View.currentPopupView + view.destroy() + Travis.View.currentPopupView = null + + $('.popup').removeClass('display') + +Travis.View = View diff --git a/assets/scripts/travis.coffee b/assets/scripts/travis.coffee index e6691600..eb0ee6d0 100644 --- a/assets/scripts/travis.coffee +++ b/assets/scripts/travis.coffee @@ -182,6 +182,13 @@ Travis.initializer application.inject('controller', 'config', 'config:main') application.inject('route', 'config', 'config:main') +Travis.initializer + name: 'inject-pusher' + + initialize: (container, application) -> + application.register 'pusher:main', Travis.pusher, { instantiate: false } + + application.inject('route', 'pusher', 'pusher:main') Travis.Router.reopen didTransition: ->