From 869ca9d896dfd167aa3240ceacfcd61196daa70f Mon Sep 17 00:00:00 2001 From: Marcin Kulik Date: Tue, 13 Aug 2013 19:50:47 +0200 Subject: [PATCH] Adjust JS player to new asciicast JSON representation --- .../player/abstract_player.js.coffee | 12 +--- app/assets/javascripts/player/movie.js.coffee | 64 +++++++++---------- .../player/workers/main_worker.js.coffee | 3 +- 3 files changed, 33 insertions(+), 46 deletions(-) diff --git a/app/assets/javascripts/player/abstract_player.js.coffee b/app/assets/javascripts/player/abstract_player.js.coffee index ef64460..2d67a4c 100644 --- a/app/assets/javascripts/player/abstract_player.js.coffee +++ b/app/assets/javascripts/player/abstract_player.js.coffee @@ -23,8 +23,7 @@ class AsciiIo.AbstractPlayer throw 'not implemented' movieOptions: -> - timing: @model.get 'stdout_timing_data' - stdout_data: @model.get 'stdout_data' + stdout: @model.get 'stdout' duration: @model.get 'duration' speed: @options.speed benchmark: @options.benchmark @@ -32,14 +31,9 @@ class AsciiIo.AbstractPlayer lines: @options.lines fetchModel: -> - @model.fetch success: @onModelFetched + @model.fetch success: @onModelReady - onModelFetched: => - data = atob @model.get('escaped_stdout_data') - @model.set stdout_data: data - @onModelReady() - - onModelReady: -> + onModelReady: => @createVT() @createMovie() @bindEvents() diff --git a/app/assets/javascripts/player/movie.js.coffee b/app/assets/javascripts/player/movie.js.coffee index 7ae7f81..5eee8bd 100644 --- a/app/assets/javascripts/player/movie.js.coffee +++ b/app/assets/javascripts/player/movie.js.coffee @@ -8,7 +8,6 @@ class AsciiIo.Movie reset: -> @frameNo = 0 - @dataIndex = 0 @completedFramesTime = 0 @playing = false @lastFrameAt = undefined @@ -22,11 +21,8 @@ class AsciiIo.Movie now: -> (new Date()).getTime() - timing: -> - @options.timing - - data: -> - @options.stdout_data + stdout: -> + @options.stdout play: -> return if @isPlaying() @@ -74,8 +70,8 @@ class AsciiIo.Movie @playing = true @resumedAt = @now() - frame = @timing()[@frameNo] - [delay, count] = frame + frame = @stdout()[@frameNo] + [delay, data] = frame delayMs = delay * 1000 delayLeft = delayMs - @totalFrameWaitTime @processFrameWithDelay(delayLeft) @@ -91,7 +87,7 @@ class AsciiIo.Movie !@isPlaying() and !@isFinished() and @frameNo > 0 isFinished: -> - !@isPlaying() and @frameNo >= @timing().length + !@isPlaying() and @frameNo >= (@stdout().length - 1) seek: (percent) -> @stop() @@ -105,26 +101,23 @@ class AsciiIo.Movie frameNo = 0 time = 0 totalCount = 0 - delay = undefined - count = undefined + delay = data = undefined + + @trigger 'reset' while time < requestedTime - [delay, count] = @timing()[frameNo] + [delay, data] = @stdout()[frameNo] if time + delay >= requestedTime break + frameData = String.fromCharCode.apply(String, data) + @trigger 'data', [frameData] time += delay - totalCount += count frameNo += 1 @frameNo = frameNo @completedFramesTime = time * 1000 - @dataIndex = totalCount - - data = @data().slice(0, totalCount) - @trigger 'reset' - @trigger 'data', [data] @lastFrameAt = @now() wait = requestedTime - time @@ -177,23 +170,25 @@ class AsciiIo.Movie @totalFrameWaitTime = 0 nextFrame: -> - if frame = @timing()[@frameNo] - [delay, count] = frame - - if delay <= @MIN_DELAY and @framesProcessed < 100 - @framesProcessed += 1 - @processFrame() - else - @framesProcessed = 0 - realDelay = delay * 1000 * (1.0 / @options.speed) - @processFrameWithDelay(realDelay) + frame = @stdout()[@frameNo] - true - else + if not frame or frame.length is 0 @playing = false @trigger 'finished' - false + return false + + [delay, data] = frame + + if delay <= @MIN_DELAY and @framesProcessed < 100 + @framesProcessed += 1 + @processFrame() + else + @framesProcessed = 0 + realDelay = delay * 1000 * (1.0 / @options.speed) + @processFrameWithDelay(realDelay) + + true processFrameWithDelay: (delay) -> @nextFrameTimeoutId = setTimeout( @@ -204,14 +199,13 @@ class AsciiIo.Movie ) processFrame: -> - frame = @timing()[@frameNo] - [delay, count] = frame + frame = @stdout()[@frameNo] + [delay, data] = frame - frameData = @data().slice(@dataIndex, @dataIndex + count) + frameData = String.fromCharCode.apply(String, data) @trigger 'data', [frameData] @frameNo += 1 - @dataIndex += count @completedFramesTime += delay * 1000 @lastFrameAt = @now() diff --git a/app/assets/javascripts/player/workers/main_worker.js.coffee b/app/assets/javascripts/player/workers/main_worker.js.coffee index a18571c..9c9491a 100644 --- a/app/assets/javascripts/player/workers/main_worker.js.coffee +++ b/app/assets/javascripts/player/workers/main_worker.js.coffee @@ -24,8 +24,7 @@ addEventListener 'message', (e) => postMessage evt: event, src: 'vt', args: args movie = new AsciiIo.Movie( - timing: options.timing - stdout_data: options.stdout_data + stdout: options.stdout duration: options.duration speed: options.speed benchmark: options.benchmark