Refactor frames module into events module

This commit is contained in:
Marcin Kulik
2018-03-01 20:51:25 +01:00
parent b9003a1a9c
commit 96ea4e735e
6 changed files with 47 additions and 44 deletions

View File

@@ -0,0 +1,28 @@
def to_relative_time(events):
prev_time = 0
for frame in events:
time, type, data = frame
delay = time - prev_time
prev_time = time
yield [delay, type, data]
def to_absolute_time(events):
time = 0
for frame in events:
delay, type, data = frame
time = time + delay
yield [time, type, data]
def cap_relative_time(events, time_limit):
if time_limit:
return ([min(delay, time_limit), type, data] for delay, type, data in events)
else:
return events
def adjust_speed(events, speed):
return ([delay / speed, type, data] for delay, type, data in events)

View File

@@ -1,28 +0,0 @@
def to_relative_time(frames):
prev_time = 0
for frame in frames:
time, data = frame
delay = time - prev_time
prev_time = time
yield [delay, data]
def to_absolute_time(frames):
time = 0
for frame in frames:
delay, data = frame
time = time + delay
yield [time, data]
def cap_relative_time(frames, time_limit):
if time_limit:
return ([min(delay, time_limit), text] for delay, text in frames)
else:
return frames
def adjust_speed(frames, speed):
return ([delay / speed, text] for delay, text in frames)

View File

@@ -1,7 +1,7 @@
import json
import json.decoder
from asciinema.asciicast.frames import to_absolute_time
from asciinema.asciicast.events import to_absolute_time
try:
@@ -27,12 +27,15 @@ class Asciicast:
header = {k: v for k, v in self.__attrs.items() if k in keys and v is not None}
return header
def events(self):
for time, data in self.stdout():
def __stdout_events(self):
for time, data in self.__attrs['stdout']:
yield [time, 'o', data]
def stdout(self):
return to_absolute_time(self.__attrs['stdout'])
def events(self):
return self.stdout_events()
def stdout_events(self):
return to_absolute_time(self.__stdout_events())
class open_from_file():

View File

@@ -31,10 +31,10 @@ class Asciicast:
for line in self.__file:
yield json.loads(line)
def stdout(self):
def stdout_events(self):
for time, type, data in self.events():
if type == 'o':
yield [time, data]
yield [time, type, data]
def build_from_header_and_file(header, f):
@@ -66,7 +66,7 @@ def get_duration(path):
with open(path, mode='rt', encoding='utf-8') as f:
first_line = f.readline()
with open_from_file(first_line, f) as a:
for last_frame in a.stdout():
for last_frame in a.stdout_events():
pass
return last_frame[0]

View File

@@ -13,7 +13,7 @@ class CatCommand(Command):
def execute(self):
try:
with asciicast.open_from_url(self.filename) as a:
for t, text in a.stdout():
for t, _type, text in a.stdout_events():
sys.stdout.write(text)
sys.stdout.flush()

View File

@@ -2,7 +2,7 @@ import os
import sys
import time
import asciinema.asciicast.frames as frames
import asciinema.asciicast.events as ev
from asciinema.term import raw, read_blocking
@@ -19,18 +19,18 @@ class Player:
def _play(self, asciicast, idle_time_limit, speed, stdin):
idle_time_limit = idle_time_limit or asciicast.idle_time_limit
stdout = asciicast.stdout()
stdout = frames.to_relative_time(stdout)
stdout = frames.cap_relative_time(stdout, idle_time_limit)
stdout = frames.to_absolute_time(stdout)
stdout = frames.adjust_speed(stdout, speed)
stdout = asciicast.stdout_events()
stdout = ev.to_relative_time(stdout)
stdout = ev.cap_relative_time(stdout, idle_time_limit)
stdout = ev.to_absolute_time(stdout)
stdout = ev.adjust_speed(stdout, speed)
base_time = time.time()
ctrl_c = False
paused = False
pause_time = None
for t, text in stdout:
for t, _type, text in stdout:
delay = t - (time.time() - base_time)
while stdin and not ctrl_c and delay > 0: