97 lines
2.2 KiB
CoffeeScript
97 lines
2.2 KiB
CoffeeScript
get = Ember.get
|
|
|
|
Travis.ChunkBuffer = Em.ArrayProxy.extend
|
|
timeout: 5000
|
|
checkTimeoutFrequency: 5000
|
|
start: 1
|
|
next: 1
|
|
|
|
init: ->
|
|
@_super.apply this, arguments
|
|
|
|
@lastInsert = 0
|
|
|
|
@set('next', @get('start'))
|
|
|
|
@checkTimeout()
|
|
|
|
if @get('content.length')
|
|
@get('queue.content').pushObjects @get('content').toArray()
|
|
|
|
arrangedContent: (->
|
|
[]
|
|
).property('content')
|
|
|
|
addObject: (obj) ->
|
|
@get('content').pushObject(obj)
|
|
|
|
removeObject: (obj) ->
|
|
@get('content').removeObject(obj)
|
|
|
|
replaceContent: (idx, amt, objects) ->
|
|
@get('content').replace(idx, amt, objects)
|
|
|
|
queue: (->
|
|
Em.ArrayProxy.extend(Em.SortableMixin, {
|
|
content: []
|
|
sortProperties: ['number']
|
|
sortAscending: true
|
|
}).create()
|
|
).property()
|
|
|
|
contentArrayDidChange: (array, index, removedCount, addedCount) ->
|
|
@_super.apply this, arguments
|
|
|
|
if addedCount
|
|
queue = @get('queue')
|
|
addedObjects = array.slice(index, index + addedCount)
|
|
console.log 'Added log parts with numbers:', addedObjects.map( (element) -> get(element, 'number') )+'', 'current', @get('next')
|
|
queue.pushObjects addedObjects
|
|
@check()
|
|
|
|
check: ->
|
|
queue = @get('queue')
|
|
next = @get('next')
|
|
|
|
arrangedContent = @get('arrangedContent')
|
|
toPush = []
|
|
|
|
while queue.get('firstObject.number') <= next
|
|
element = queue.shiftObject()
|
|
if get(element, 'number') == next
|
|
@finalize() if get(element, 'final')
|
|
toPush.pushObject get(element, 'content')
|
|
next += 1
|
|
|
|
if toPush.length
|
|
arrangedContent.pushObjects toPush
|
|
@inserted()
|
|
|
|
@set('next', next)
|
|
|
|
inserted: ->
|
|
now = @now()
|
|
@lastInsert = now
|
|
|
|
finalize: ->
|
|
clearTimeout @get('runLaterId')
|
|
|
|
checkTimeout: ->
|
|
now = @now()
|
|
if now - @lastInsert > @get('timeout')
|
|
@giveUpOnMissingParts()
|
|
@set 'runLaterId', setTimeout((=> @checkTimeout()), @get('checkTimeoutFrequency'))
|
|
|
|
willDestroy: ->
|
|
@finalize()
|
|
@_super.apply this, arguments
|
|
|
|
now: ->
|
|
(new Date()).getTime()
|
|
|
|
giveUpOnMissingParts: ->
|
|
if number = @get('queue.firstObject.number')
|
|
console.log 'Giving up on missing parts in the buffer, switching to:', number
|
|
@set('next', number)
|
|
@check()
|