travis-web/assets/scripts/app/models/user.coffee
2012-11-21 21:20:12 +01:00

75 lines
1.9 KiB
CoffeeScript

require 'travis/ajax'
require 'travis/model'
@Travis.User = Travis.Model.extend
name: DS.attr('string')
email: DS.attr('string')
login: DS.attr('string')
token: DS.attr('string')
locale: DS.attr('string')
gravatarId: DS.attr('string')
isSyncing: DS.attr('boolean')
syncedAt: DS.attr('string')
repoCount: DS.attr('number')
init: ->
@poll() if @get('isSyncing')
@_super()
Ember.run.next this, ->
transaction = @get('store').transaction()
transaction.add this
urlGithub: (->
"https://github.com/#{@get('login')}"
).property()
permissions: (->
unless @permissions
@permissions = Ember.ArrayProxy.create(content: [])
Travis.ajax.get('/users/permissions', (data) => @permissions.set('content', data.permissions))
@permissions
).property()
updateLocale: (locale) ->
@setWithSession('locale', locale)
transaction = @get('transaction')
transaction.commit()
self = this
observer = ->
unless self.get('isSaving')
self.removeObserver 'isSaving', observer
transaction = self.get('store').transaction()
transaction.add self
@addObserver 'isSaving', observer
type: (->
'user'
).property()
sync: ->
Travis.ajax.post('/users/sync')
@setWithSession('isSyncing', true)
@poll()
poll: ->
Travis.ajax.get '/users', (data) =>
if data.user.is_syncing
Ember.run.later(this, this.poll.bind(this), 3000)
else
@set('isSyncing', false)
@setWithSession('syncedAt', data.user.synced_at)
Travis.trigger('user:synced', data.user)
# need to pass any param to trigger findQuery
Travis.Account.find(foo: '')
setWithSession: (name, value) ->
@set(name, value)
user = JSON.parse(sessionStorage?.getItem('travis.user'))
user[$.underscore(name)] = @get(name)
sessionStorage?.setItem('travis.user', JSON.stringify(user))