142 lines
4.0 KiB
CoffeeScript
142 lines
4.0 KiB
CoffeeScript
`import Ember from 'ember'`
|
|
`import limit from 'travis/utils/computed-limit'`
|
|
`import Repo from 'travis/models/repo'`
|
|
|
|
Controller = Ember.Controller.extend
|
|
actions:
|
|
activate: (name) ->
|
|
@activate(name)
|
|
|
|
showRunningJobs: ->
|
|
@activate('running')
|
|
|
|
showMyRepositories: ->
|
|
# this is a bit of a hack. I don't want to switch URL for 'running'
|
|
# so depending on current state I'm either just switching back or
|
|
# redirecting
|
|
if @get('tab') == 'running'
|
|
@activate('owned')
|
|
else
|
|
@transitionToRoute('main.repositories')
|
|
|
|
|
|
tabOrIsLoadedDidChange: (->
|
|
@possiblyRedirectToGettingStartedPage()
|
|
).observes('isLoaded', 'tab', 'repos.length')
|
|
|
|
possiblyRedirectToGettingStartedPage: ->
|
|
Ember.run.scheduleOnce 'routerTransitions', this, ->
|
|
if @get('tab') == 'owned' && @get('isLoaded') && @get('repos.length') == 0
|
|
@container.lookup('router:main').send('redirectToGettingStarted')
|
|
|
|
isLoaded: false
|
|
repoController: Ember.inject.controller('repo')
|
|
currentUserBinding: 'auth.currentUser'
|
|
selectedRepo: (->
|
|
# we need to observe also repo.content here, because we use
|
|
# ObjectProxy in repo controller
|
|
# TODO: get rid of ObjectProxy there
|
|
@get('repoController.repo.content') || @get('repoController.repo')
|
|
).property('repoController.repo', 'repoController.repo.content')
|
|
|
|
startedJobsCount: Ember.computed.alias('runningJobs.length')
|
|
allJobsCount: (->
|
|
@get('startedJobsCount') + @get('queuedJobs.length')
|
|
).property('startedJobsCount', 'queuedJobs.length')
|
|
|
|
init: ->
|
|
@_super.apply this, arguments
|
|
if !Ember.testing
|
|
Visibility.every @config.intervals.updateTimes, @updateTimes.bind(this)
|
|
|
|
runningJobs: (->
|
|
result = @store.filter('job', {}, (job) ->
|
|
['queued', 'started', 'received'].indexOf(job.get('state')) != -1
|
|
)
|
|
result.set('isLoaded', false)
|
|
result.then =>
|
|
result.set('isLoaded', true)
|
|
result
|
|
).property()
|
|
|
|
queuedJobs: (->
|
|
result = @get('store').filter('job', {}, (job) ->
|
|
['created'].indexOf(job.get('state')) != -1
|
|
)
|
|
result.set('isLoaded', false)
|
|
result.then =>
|
|
result.set('isLoaded', true)
|
|
result
|
|
).property()
|
|
|
|
recentRepos: (->
|
|
# I return an empty array here, because we're removing left sidebar, but
|
|
# I don't want to refactor too much code (it will be all changed anyway
|
|
# when we switch to new dashboard)
|
|
[]
|
|
).property()
|
|
|
|
updateTimes: ->
|
|
if repos = @get('repos')
|
|
repos.forEach (r) -> r.updateTimes()
|
|
|
|
activate: (tab, params) ->
|
|
@set('sortProperties', ['sortOrder'])
|
|
@set('tab', tab)
|
|
this["view_#{tab}".camelize()](params)
|
|
|
|
viewOwned: ->
|
|
if repos = @get('ownedRepos')
|
|
@set('repos', repos)
|
|
else if !@get('fetchingOwnedRepos')
|
|
@set('fetchingOwnedRepos', true)
|
|
@set('isLoaded', false)
|
|
if user = @get('currentUser')
|
|
user.get('_rawPermissions').then (data) =>
|
|
repos = Repo.accessibleBy(@store, data.pull).then( (reposRecordArray) =>
|
|
@set('isLoaded', true)
|
|
@set('repos', reposRecordArray)
|
|
@set('ownedRepos', reposRecordArray)
|
|
@set('fetchingOwnedRepos', false)
|
|
)
|
|
# TODO: handle error
|
|
|
|
viewRunning: ->
|
|
|
|
viewSearch: (phrase) ->
|
|
@set('search', phrase)
|
|
@set('isLoaded', false)
|
|
Repo.search(@store, phrase).then( (reposRecordArray) =>
|
|
@set('isLoaded', true)
|
|
@set('repos', reposRecordArray)
|
|
)
|
|
|
|
searchObserver: (->
|
|
search = @get('search')
|
|
if search
|
|
@searchFor search
|
|
).observes('search')
|
|
|
|
searchFor: (phrase) ->
|
|
Ember.run.cancel(@searchLater) if @searchLater
|
|
@searchLater = Ember.run.later(this, (->
|
|
@transitionTo('main.search', phrase.replace(/\//g, '%2F'))
|
|
), 500)
|
|
|
|
noReposMessage: (->
|
|
tab = @get('tab')
|
|
|
|
if tab == 'owned'
|
|
'You don\'t have any repos set up on Travis CI'
|
|
else if tab == 'recent'
|
|
'Repositories could not be loaded'
|
|
else
|
|
'Could not find any repos'
|
|
).property('tab')
|
|
|
|
showRunningJobs: (->
|
|
@get('tab') == 'running'
|
|
).property('tab')
|
|
|
|
`export default Controller`
|