travis-web/assets/scripts/app/controllers/repo.coffee
Piotr Sarnacki edb4e19309 Run lastBuildDidChange only once for a runloop run
When a lot of pusher events come with build updates, lastBuildDidChange
can run quite frequently. We can avoid that by using scheduleOnce, which
will ensure that only the last invocation of lastBuildDidChange will be
run for a given runloop run.
2013-12-11 12:43:08 +01:00

75 lines
1.8 KiB
CoffeeScript

Travis.RepoController = Travis.Controller.extend
needs: ['repos', 'currentUser', 'build']
currentUserBinding: 'controllers.currentUser'
build: Ember.computed.alias('controllers.build.build')
slug: (-> @get('repo.slug') ).property('repo.slug')
isLoading: (-> @get('repo.isLoading') ).property('repo.isLoading')
init: ->
@_super.apply this, arguments
Visibility.every Travis.INTERVALS.updateTimes, @updateTimes.bind(this)
updateTimes: ->
Ember.run this, ->
if builds = @get('builds')
builds.forEach (b) -> b.updateTimes()
if build = @get('build')
build.updateTimes()
if build && jobs = build.get('jobs')
jobs.forEach (j) -> j.updateTimes()
activate: (action) ->
@stopObservingLastBuild()
this["view#{$.camelize(action)}"]()
viewIndex: ->
@observeLastBuild()
@connectTab('current')
viewCurrent: ->
@observeLastBuild()
@connectTab('current')
viewBuilds: ->
@connectTab('builds')
viewPullRequests: ->
@connectTab('pull_requests')
viewBranches: ->
@connectTab('branches')
viewBuild: ->
@connectTab('build')
viewJob: ->
@connectTab('job')
lastBuildDidChange: ->
Ember.run.scheduleOnce('data', this, @_lastBuildDidChange);
_lastBuildDidChange: ->
build = @get('repo.lastBuild')
@set('build', build)
stopObservingLastBuild: ->
@removeObserver('repo.lastBuild', this, 'lastBuildDidChange')
observeLastBuild: ->
@lastBuildDidChange()
@addObserver('repo.lastBuild', this, 'lastBuildDidChange')
connectTab: (tab) ->
# TODO: such implementation seems weird now, because we render
# in the renderTemplate function in routes
name = if tab == 'current' then 'build' else tab
@set('tab', tab)
urlGithub: (->
Travis.Urls.githubRepo(@get('repo.slug'))
).property('repo.slug')