asciinema.org/app/services/film.rb

38 lines
643 B
Ruby

class Film
def initialize(stdout, terminal)
@stdout = stdout
@terminal = terminal
end
def snapshot_at(time)
stdout_each_until(time) do |delay, data|
terminal.feed(data)
end
terminal.snapshot
end
def frames
frames = stdout.lazy.map do |delay, data|
terminal.feed(data)
[delay, Frame.new(terminal.snapshot, terminal.cursor)]
end
FrameDiffList.new(frames)
end
private
def stdout_each_until(seconds)
stdout.each do |delay, frame_data|
seconds -= delay
break if seconds <= 0
yield(delay, frame_data)
end
end
attr_reader :stdout, :terminal
end