From 5e21afd1f4f47edcfc3b8c134f41d64e3e242652 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 1 Apr 2015 10:32:04 +0200 Subject: [PATCH] Display running repos info on landing page --- app/controllers/home.coffee | 5 ++++ .../landing-page-last-build-time.coffee | 7 +++++ app/routes/home.coffee | 30 +++++++++++++++++++ app/store.coffee | 20 +++++++++++-- app/templates/home.hbs | 13 ++++++-- 5 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 app/controllers/home.coffee create mode 100644 app/helpers/landing-page-last-build-time.coffee create mode 100644 app/routes/home.coffee diff --git a/app/controllers/home.coffee b/app/controllers/home.coffee new file mode 100644 index 00000000..90babea0 --- /dev/null +++ b/app/controllers/home.coffee @@ -0,0 +1,5 @@ +`import Ember from 'ember'` + +Controller = Ember.Controller.extend() + +`export default Controller` diff --git a/app/helpers/landing-page-last-build-time.coffee b/app/helpers/landing-page-last-build-time.coffee new file mode 100644 index 00000000..424bcde3 --- /dev/null +++ b/app/helpers/landing-page-last-build-time.coffee @@ -0,0 +1,7 @@ +`import { timeAgoInWords, safe } from 'travis/utils/helpers'` +`import Ember from "ember"` + +helper = Ember.Handlebars.makeBoundHelper (value, options) -> + safe timeAgoInWords(value) || 'currently running' + +`export default helper` diff --git a/app/routes/home.coffee b/app/routes/home.coffee new file mode 100644 index 00000000..c966a1cb --- /dev/null +++ b/app/routes/home.coffee @@ -0,0 +1,30 @@ +`import BasicRoute from 'travis/routes/basic'` +`import config from 'travis/config/environment'` +`import Repo from 'travis/models/repo'` +`import limit from 'travis/utils/computed-limit'` + +Route = BasicRoute.extend + activate: -> + if !config.pro && @pusher + @pusher.subscribeAll(['common']) + + @_super.apply(this, arguments) + @store.set('isLandingPageOpened', true) + + deactivate: -> + @_super.apply(this, arguments) + @store.set('isLandingPageOpened', false) + + setupController: (controller, model) -> + repos = Ember.ArrayProxy.extend( + isLoadedBinding: 'repos.isLoaded' + repos: Repo.withLastBuild(@store) + sorted: Ember.computed.sort('repos', 'sortedReposKeys') + content: limit('sorted', 'limit') + sortedReposKeys: ['sortOrder:asc'] + limit: 3 + ).create() + + controller.set('repos', repos) + +`export default Route` diff --git a/app/store.coffee b/app/store.coffee index a3eba84f..0d46166b 100644 --- a/app/store.coffee +++ b/app/store.coffee @@ -5,8 +5,19 @@ Store = DS.Store.extend defaultAdapter: 'application' adapter: 'application' - receivePusherEvent: (event, data) -> - [name, type] = event.split(':') + init: -> + @_super.apply(this, arguments) + + # we will let one start event every 5 seconds to populate some repos for + # landing page + setInterval => + @set('allowMoreLandingPageRepos', true) + , 5000 + + canHandleEvent: (event, data) -> + if @get('isLandingPageOpened') && @get('allowMoreLandingPageRepos') && event == 'build:started' + @set('allowMoreLandingPageRepos', false) + return true auth = @container.lookup('auth:main') if !@get('isRecentTabOpen') && event != 'job:log' && auth.get('signedIn') && @@ -24,6 +35,11 @@ Store = DS.Store.extend return if !@hasRecordForId('repo', id) && !permissions.contains(id) + receivePusherEvent: (event, data) -> + [name, type] = event.split(':') + + return unless @canHandleEvent(event, data) + if name == 'job' && data.job?.commit @pushPayload(commits: [data.job.commit]) diff --git a/app/templates/home.hbs b/app/templates/home.hbs index 0f01bddc..6a25ebbd 100644 --- a/app/templates/home.hbs +++ b/app/templates/home.hbs @@ -62,9 +62,16 @@

Here are just a few projects
currently running on Travis CI

- - - +