telzine/dialazine/lib/zine_functions.py

55 lines
2.1 KiB
Python
Raw Permalink Normal View History

2023-07-30 03:26:31 +00:00
from lib.contents_reader import ContentsReader
import asyncio
CLEAR_SCREEN = "\u001b[2J"
NEW_LINE = "\r\n"
class ZineFunctions:
def __init__(self, reader, writer, index_file_path):
self.reader = reader
self.writer = writer
self.contents_reader = ContentsReader(index_file_path)
async def run_index(self):
for welcome_line in self.contents_reader.read_hello_file():
self.writer.write(welcome_line)
await self.writer.drain()
# Read one byte (any key)
await self.reader.read(1)
running = True
while (running):
for index_line in self.contents_reader.read_index_lines():
self.writer.write(index_line)
item_choice = await self.reader.read(1)
item_choice_int = -1
if item_choice.upper() == 'X':
running = False
continue
item_choice_int = self.contents_reader.map_input_to_numerical_index(item_choice)
if item_choice_int == -1:
self.writer.write(f"{NEW_LINE}{NEW_LINE}Pick a story, or X to quit.{NEW_LINE}")
continue
self.writer.write(f"{NEW_LINE}{NEW_LINE}...you picked: %s" % (item_choice))
self.writer.write(f"{NEW_LINE}{NEW_LINE}...press RETURN to start reading, and to continue after each page")
await self.reader.read(1)
self.writer.write(NEW_LINE + CLEAR_SCREEN)
await asyncio.sleep(1)
await self.run_story(item_choice_int)
self.disconnect()
async def run_story(self, story_number):
page_number = 1
story_lines = self.contents_reader.read_story(story_number, page_number)
while len(story_lines) > 0:
self.writer.write(CLEAR_SCREEN)
for story_line in story_lines:
self.writer.write(story_line)
await self.writer.drain()
char_read = await self.reader.readline()
page_number += 1
story_lines = self.contents_reader.read_story(story_number, page_number)
def disconnect(self):
self.writer.close()