fasttyper/fasttyper/application.py
2021-07-10 23:27:11 +02:00

52 lines
1.5 KiB
Python

class Application:
def __init__(self, listener, user_buffer, reference_buffer, config):
self._running = False
self.listener = listener
self.user_buffer = user_buffer
self.reference_buffer = reference_buffer
self.config = config
from .state import StateMachine
self.state = StateMachine(self)
from .stats import Stats
self.stats = Stats()
def start(self):
self._running = True
def running(self):
return self._running
def valid_user_text_position(self):
if self.state.mistake_position is not None:
return self.state.mistake_position
return self.user_buffer.get_position()
def get_user_text(self):
text = self.user_buffer.get_matrix()
mistake_position = self.valid_user_text_position()
return text[:mistake_position], text[mistake_position:]
def get_reference_text(self, position):
return self.reference_buffer.get_matrix(position)
def action(self, screen):
try:
action, key = self.listener.listen(screen)
self.user_buffer.handle_action(action, key)
self.state.update(action, key)
self.stats.update(action, self.state.valid())
except StoppingSignal:
self._running = False
self.stats.signal_stop()
def summarize(self):
self.stats.summarize(self.config.get("summary_template"))
self.stats.export_to_datafile(self.config.get("summary_datafile"))
class StoppingSignal(Exception):
pass