diff --git a/assets/scripts/app/controllers/job.coffee b/assets/scripts/app/controllers/job.coffee index 193aab42..5705e0d6 100644 --- a/assets/scripts/app/controllers/job.coffee +++ b/assets/scripts/app/controllers/job.coffee @@ -1,7 +1,6 @@ Travis.JobController = Em.Controller.extend needs: ['repo'] - jobBinding: 'controllers.repo.job' repoBinding: 'controllers.repo.repo' commitBinding: 'job.commit' annotationsBinding: 'job.annotations' diff --git a/assets/scripts/app/controllers/repo.coffee b/assets/scripts/app/controllers/repo.coffee index 18468063..a2d73bf5 100644 --- a/assets/scripts/app/controllers/repo.coffee +++ b/assets/scripts/app/controllers/repo.coffee @@ -1,8 +1,9 @@ Travis.RepoController = Travis.Controller.extend - needs: ['repos', 'currentUser', 'build', 'request'] + needs: ['repos', 'currentUser', 'build', 'request', 'job'] currentUserBinding: 'controllers.currentUser' build: Ember.computed.alias('controllers.build.build') + job: Ember.computed.alias('controllers.job.job') request: Ember.computed.alias('controllers.request.model') slug: (-> @get('repo.slug') ).property('repo.slug') @@ -24,6 +25,9 @@ Travis.RepoController = Travis.Controller.extend if build && jobs = build.get('jobs') jobs.forEach (j) -> j.updateTimes() + deactivate: -> + @stopObservingLastBuild() + activate: (action) -> @stopObservingLastBuild() this["view#{$.camelize(action)}"]() diff --git a/assets/scripts/app/models/log.coffee b/assets/scripts/app/models/log.coffee index ef9b396e..6a4ac66c 100644 --- a/assets/scripts/app/models/log.coffee +++ b/assets/scripts/app/models/log.coffee @@ -6,9 +6,6 @@ require 'travis/log_chunks' isLoaded: false length: 0 - init: -> - @setParts() - fetchMissingParts: (partNumbers, after) -> return if @get('notStarted') @@ -27,31 +24,34 @@ require 'travis/log_chunks' for part in parts @append part - setParts: -> - if parts = @get('parts') + parts: (-> + #if Travis.config.pusher_log_fallback + # Travis.LogChunks.create(content: [], missingPartsCallback: => @fetchMissingParts.apply(this, arguments)) + #else + Ember.ArrayProxy.create(content: []) + ).property() + + clearParts: -> + parts = @get('parts') + @notifyPropertyChange('parts') + Ember.run.next -> + # destroy old parts after they're refreshed parts.destroy() - if Travis.config.pusher_log_fallback - parts = Travis.LogChunks.create(content: [], missingPartsCallback: => @fetchMissingParts.apply(this, arguments)) - else - parts = Ember.ArrayProxy.create(content: []) - - @set 'parts', parts - # @set 'parts', Travis.ChunkBuffer.create(content: []) - fetch: -> console.log 'log model: fetching log' if Log.DEBUG - @setParts() + @clearParts() handlers = json: (json) => @loadParts(json['log']['parts']) text: (text) => @loadText(text) Travis.Log.Request.create(id: id, handlers: handlers).run() if id = @get('job.id') clear: -> - @setParts() + @clearParts() @incrementProperty('version') append: (part) -> + return if @get('parts').isDestroying || @get('parts').isDestroyed @get('parts').pushObject(part) loadParts: (parts) -> diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index 1b308214..2017cfaf 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -208,18 +208,17 @@ Travis.BuildRoute = Travis.Route.extend model = Travis.Build.find(model) if model && !model.get repo = @controllerFor('repo') - repo.set('build', model) - repo.activate('build') + #repo.set('build', model) @controllerFor('build').set('build', model) - repo.set('build', model) + repo.activate('build') + #repo.set('build', model) model: (params) -> Travis.Build.fetch(params.build_id) deactivate: -> - repo = @controllerFor('repo') - repo.set('build', null) - repo.set('job', null) + @controllerFor('job').set('job', null) + @controllerFor('build').set('build', null) Travis.JobRoute = Travis.Route.extend serialize: (model, params) -> @@ -231,19 +230,19 @@ Travis.JobRoute = Travis.Route.extend model = Travis.Job.find(model) if model && !model.get repo = @controllerFor('repo') - repo.set('job', model) + @controllerFor('job').set('job', model) repo.activate('job') if build = model.get('build') @controllerFor('build').set('build', build) - repo.set('build', build) model: (params) -> Travis.Job.fetch(params.job_id) deactivate: -> - repo = @controllerFor('repo') - repo.set('job', null) + @controllerFor('build').set('build', null) + @controllerFor('job').set('job', null) + Travis.RepoIndexRoute = Travis.Route.extend setupController: (controller, model) -> @@ -258,8 +257,8 @@ Travis.RepoIndexRoute = Travis.Route.extend deactivate: -> repo = @controllerFor('repo') - repo.set('build', null) - repo.set('job', null) + @controllerFor('build').set('build', null) + @controllerFor('job').set('job', null) Travis.RepoRoute = Travis.Route.extend renderTemplate: -> @@ -280,6 +279,9 @@ Travis.RepoRoute = Travis.Route.extend slug = "#{params.owner}/#{params.name}" Travis.Repo.fetchBySlug(slug) + resetController: -> + @controllerFor('repo').deactivate() + actions: error: (error) -> # if error throwed has a slug (ie. it was probably repo not found) diff --git a/assets/scripts/app/views/log.coffee b/assets/scripts/app/views/log.coffee index 6a6ed987..553b230f 100644 --- a/assets/scripts/app/views/log.coffee +++ b/assets/scripts/app/views/log.coffee @@ -2,28 +2,46 @@ require 'log' require 'travis/lines_selector' require 'travis/log_folder' -Log.DEBUG = false +Log.DEBUG = true Log.LIMIT = 10000 Travis.reopen LogView: Travis.View.extend templateName: 'jobs/log' logBinding: 'job.log' - contextBinding: 'job' didInsertElement: -> + @setupLog() + + logDidChange: (-> + @setupLog() + ).observes('log') + + logWillChange: (-> + @teardownLog() + ).observesBefore('log') + + willDestroyElement: -> + @teardownLog() + + teardownLog: -> + job = @get('job') + job.unsubscribe() if job + + setupLog: -> job = @get('job') if job job.get('log').fetch() job.subscribe() - willDestroyElement: -> - job = @get('job') - job.unsubscribe() if job - PreView: Em.View.extend templateName: 'jobs/pre' + logWillChange: (-> + console.log 'log view: log will change' if Log.DEBUG + @teardownLog() + ).observesBefore('log') + didInsertElement: -> console.log 'log view: did insert' if Log.DEBUG @_super.apply this, arguments @@ -31,10 +49,7 @@ Travis.reopen willDestroyElement: -> console.log 'log view: will destroy' if Log.DEBUG - parts = @get('log.parts') - parts.removeArrayObserver(@, didChange: 'partsDidChange', willChange: 'noop') - parts.destroy() - @lineSelector?.willDestroy() + @teardownLog() versionDidChange: (-> @rerender() if @get('_state') == 'inDOM' @@ -42,17 +57,28 @@ Travis.reopen logDidChange: (-> console.log 'log view: log did change: rerender' if Log.DEBUG - @rerender() if @get('_state') == 'inDOM' + + if @get('log') + @createEngine() + @rerender() if @get('_state') == 'inDOM' ).observes('log') + teardownLog: -> + if @get('log') + parts = @get('log.parts') + parts.removeArrayObserver(@, didChange: 'partsDidChange', willChange: 'noop') + parts.destroy() + @lineSelector?.willDestroy() + createEngine: -> - console.log 'log view: create engine' if Log.DEBUG - @scroll = new Log.Scroll beforeScroll: => - @unfoldHighlight() - @engine = Log.create(limit: Log.LIMIT, listeners: [@scroll]) - @logFolder = new Travis.LogFolder(@$().find('#log')) - @lineSelector = new Travis.LinesSelector(@$().find('#log'), @scroll, @logFolder) - @observeParts() + if @get('log') + console.log 'log view: create engine' if Log.DEBUG + @scroll = new Log.Scroll beforeScroll: => + @unfoldHighlight() + @engine = Log.create(limit: Log.LIMIT, listeners: [@scroll]) + @logFolder = new Travis.LogFolder(@$().find('#log')) + @lineSelector = new Travis.LinesSelector(@$().find('#log'), @scroll, @logFolder) + @observeParts() unfoldHighlight: -> @lineSelector.unfoldLines()