diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee index 16f5bc27..f0e1d3ac 100644 --- a/assets/scripts/app/controllers.coffee +++ b/assets/scripts/app/controllers.coffee @@ -20,5 +20,6 @@ require 'controllers/home' require 'controllers/profile' require 'controllers/repos' require 'controllers/repo' +require 'controllers/running_jobs' require 'controllers/sidebar' require 'controllers/stats' diff --git a/assets/scripts/app/controllers/running_jobs.coffee b/assets/scripts/app/controllers/running_jobs.coffee new file mode 100644 index 00000000..f9af4841 --- /dev/null +++ b/assets/scripts/app/controllers/running_jobs.coffee @@ -0,0 +1,68 @@ +Travis.RunningJobsController = Em.ArrayProxy.extend + Group: Em.Object.extend + build: (-> @get('jobs.firstObject.build') ).property('jobs.firstObject.build') + + init: -> + @set 'jobs', [] + + add: (job) -> + @get('jobs').pushObject(job) unless @get('jobs').contains job + @attach() + + remove: (job) -> + @get('jobs').removeObject(job) + @clean() + + attach: -> + @get('parent').addGroup(this) + + clean: -> + @get('parent').removeGroup(this) if @get('isEmpty') + + isEmpty: (-> + @get('jobs.length') == 0 + ).property('jobs.length') + + groups: [] + groupsByBuildIds: {} + + init: -> + @_super.apply this, arguments + + @addedJobs @get('content') if @get('content') + + contentArrayWillChange: (array, index, removedCount, addedCount) -> + @_super.apply this, arguments + + if removedCount + @removedJobs array.slice(index, index + removedCount) + + contentArrayDidChange: (array, index, removedCount, addedCount) -> + @_super.apply this, arguments + + if addedCount + @addedJobs array.slice(index, index + addedCount) + + addedJobs: (jobs) -> + self = this + jobs.forEach (job) -> + buildId = job.get('buildId') + group = self.groupForBuild(buildId) + group.add(job) + + removedJobs: (jobs) -> + self = this + jobs.forEach (job) -> + buildId = job.get('buildId') + group = self.groupForBuild(buildId) + group.remove(job) + + groupForBuild: (buildId) -> + @groupsByBuildIds[buildId] ||= @Group.create(buildId: buildId, parent: this) + + addGroup: (group) -> + @get('groups').pushObject group unless @get('groups').contains group + + removeGroup: (group) -> + @get('groups').removeObject group + delete @groupsByBuildIds[group.get('buildId')] diff --git a/assets/scripts/app/models/job.coffee b/assets/scripts/app/models/job.coffee index 2ac799e9..40313156 100644 --- a/assets/scripts/app/models/job.coffee +++ b/assets/scripts/app/models/job.coffee @@ -103,6 +103,11 @@ require 'travis/model' # TODO: why queue is sometimes just common instead of build.common? queued && (!queue || job.get('queue') == "builds.#{queue}" || job.get('queue') == queue) + running: -> + @find(state: 'started') + Travis.app.store.filter this, (job) -> + job.get('state') == 'started' + findMany: (ids) -> Travis.app.store.findMany this, ids diff --git a/assets/scripts/app/templates/jobs/running.hbs b/assets/scripts/app/templates/jobs/running.hbs new file mode 100644 index 00000000..9cfa0fed --- /dev/null +++ b/assets/scripts/app/templates/jobs/running.hbs @@ -0,0 +1,6 @@ +