SRP for Movie

openid
Marcin Kulik 12 years ago
parent e001676f21
commit dd3341921d

@ -1,7 +1,7 @@
class AsciiIo.Movie
MIN_DELAY: 0.01
constructor: (@model, @options) ->
constructor: (@options) ->
_.extend(this, Backbone.Events)
@reset()
@startTimeReporter()
@ -19,41 +19,11 @@ class AsciiIo.Movie
now: ->
(new Date()).getTime()
isLoaded: ->
@model.get('escaped_stdout_data') != undefined
load: ->
@model.fetch success: => @onLoaded()
onLoaded: ->
if typeof window.Worker == 'function'
@unpackViaWorker()
else
@trigger 'loaded', @model
unpackViaWorker: ->
worker = new Worker(window.worker_unpack_path)
worker.onmessage = (event) =>
@_data = event.data
@trigger 'loaded', @model
data = @model.get('escaped_stdout_data')
data = atob(data)
worker.postMessage(data)
timing: ->
@model.get('stdout_timing_data')
@options.timing
data: ->
unless @_data
# Web Worker fallback
d = @model.get('escaped_stdout_data')
d = atob(d)
d = ArchUtils.bz2.decode(d)
@_data = d
@_data
@options.stdout_data
play: ->
return if @isPlaying()
@ -121,7 +91,7 @@ class AsciiIo.Movie
!@isPlaying() and !@isFinished() and @frameNo > 0
isFinished: ->
!@isPlaying() and @isLoaded() and @frameNo >= @timing().length
!@isPlaying() and @frameNo >= @timing().length
seek: (percent) ->
@stop()
@ -129,7 +99,7 @@ class AsciiIo.Movie
@resume()
rewindTo: (percent) ->
duration = @model.get('duration')
duration = @options.duration
requestedTime = duration * percent / 100
frameNo = 0

@ -6,7 +6,7 @@ class AsciiIo.PlayerView extends Backbone.View
@prepareSelfView()
@createRendererView()
@createHudView()
@createMovie()
@fetchModel()
@showLoadingIndicator()
prepareSelfView: ->
@ -26,27 +26,35 @@ class AsciiIo.PlayerView extends Backbone.View
@hudView = new AsciiIo.HudView(cols: @options.cols)
@$el.append(@hudView.$el)
createMovie: ->
@vt = new AsciiIo.VT(@options.cols, @options.lines)
fetchModel: ->
@model.fetch success: => @onModelFetched()
@movie = new AsciiIo.Movie(
@model,
speed: @options.speed,
benchmark: @options.benchmark
cols: @options.cols
lines: @options.lines
)
@movie.on 'loaded', @onMovieLoaded, this
@movie.load()
onModelFetched: ->
data = @model.get 'escaped_stdout_data'
data = atob data
onStartPromptClick: ->
@hideToggleOverlay()
@movie.togglePlay()
if typeof window.Worker == 'function'
@unpackModelDataViaWorker data
else
@unpackModelDataHere data
onMovieLoaded: (asciicast) ->
@hideLoadingIndicator()
@hudView.setDuration(asciicast.get('duration'))
unpackModelDataViaWorker: (data) ->
worker = new Worker(window.worker_unpack_path)
worker.onmessage = (event) =>
@model.set stdout_data: event.data
@onModelReady()
worker.postMessage data
unpackModelDataHere: (data) ->
@model.set stdout_data: ArchUtils.bz2.decode(data)
@onModelReady()
onModelReady: ->
@hideLoadingIndicator()
@hudView.setDuration @model.get('duration')
@createMovie()
@bindEvents()
if @options.autoPlay
@ -54,6 +62,19 @@ class AsciiIo.PlayerView extends Backbone.View
else
@showToggleOverlay()
createMovie: ->
@vt = new AsciiIo.VT(@options.cols, @options.lines)
@movie = new AsciiIo.Movie(
timing: @model.get 'stdout_timing_data'
stdout_data: @model.get 'stdout_data'
duration: @model.get 'duration'
speed: @options.speed,
benchmark: @options.benchmark
cols: @options.cols
lines: @options.lines
)
bindEvents: ->
@movie.on 'reset', => @vt.reset()
@movie.on 'finished', => @vt.stopCursorBlink()
@ -76,6 +97,10 @@ class AsciiIo.PlayerView extends Backbone.View
@hudView.on 'play-click', => @movie.togglePlay()
@hudView.on 'seek-click', (percent) => @movie.seek(percent)
onStartPromptClick: ->
@hideToggleOverlay()
@movie.togglePlay()
showLoadingIndicator: ->
@$el.append('<div class="loading">')

Loading…
Cancel
Save