diff --git a/app/assets/javascripts/player/movie.js.coffee b/app/assets/javascripts/player/movie.js.coffee index 0141fa8..8402c40 100644 --- a/app/assets/javascripts/player/movie.js.coffee +++ b/app/assets/javascripts/player/movie.js.coffee @@ -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 diff --git a/app/assets/javascripts/player/player_view.js.coffee b/app/assets/javascripts/player/player_view.js.coffee index e294afe..31de403 100644 --- a/app/assets/javascripts/player/player_view.js.coffee +++ b/app/assets/javascripts/player/player_view.js.coffee @@ -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('
')