diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/program_parser.py | 11 | ||||
| -rw-r--r-- | src/static/main.css | 5 | ||||
| -rw-r--r-- | src/templates/index.html | 4 | ||||
| -rw-r--r-- | src/text_tv.py | 40 |
4 files changed, 38 insertions, 22 deletions
diff --git a/src/program_parser.py b/src/program_parser.py index 1fae528..a104ecf 100755 --- a/src/program_parser.py +++ b/src/program_parser.py @@ -27,9 +27,8 @@ class ProgramParser: ''' Parse the JSON program into dataformat for easy processing ''' - def __init__(self, program_path:os.PathLike=None, title_max_length:int=34, override_date:datetime.datetime|None=None): + def __init__(self, program_path:os.PathLike=None, override_date:datetime.datetime|None=None): self.program_path = program_path - self.title_max_length = title_max_length self.override_date = override_date self.icons = { 'Startent at Info Desk' : "⭐", @@ -74,7 +73,7 @@ class ProgramParser: program = sorted(program, key=lambda x: x.start_date) return program - def get_events_to_show(self, program: list[Event], lines=1000) -> list[Event]: + def get_events_to_show(self, program: list[Event], lines=1000,title_max_length:int=34) -> list[Event]: current_datetime = datetime.datetime.now() if not self.override_date else self.override_date #current_datetime = datetime.datetime(year=2025, month=7, day=18, hour=15, minute=30) # DEBUG # Get events to show @@ -86,12 +85,12 @@ class ProgramParser: events_to_show.append(event) def format_program(event: Event) -> str: - if len(event.title) > self.title_max_length: + if len(event.title) > title_max_length: # Truncate title by deleting was 1-3 chars and putting ... - event.short = f'{event.title[:self.title_max_length - 3]}...' + event.short = f'{event.title[:title_max_length - 3]}...' else: event.short = event.title - event.spacer = "." * (self.title_max_length - len(event.title)) # Pad title + event.spacer = "." * (title_max_length - len(event.title)) # Pad title event.day = event.start_date.strftime('%a') start_time = event.start_date.strftime('%H:%M') end_time = event.end_date.strftime('%H:%M') diff --git a/src/static/main.css b/src/static/main.css index 817887f..c0002a1 100644 --- a/src/static/main.css +++ b/src/static/main.css @@ -31,10 +31,6 @@ hr { /* Program */ -:root { - --line-height: 1.5em; -} - #program { white-space-collapse: collapse; /* Allow program template to be spaced legibly */ line-height: var(--line-height); @@ -57,7 +53,6 @@ hr { .program-text { position: absolute; - width: 120%; } .program-text > * { diff --git a/src/templates/index.html b/src/templates/index.html index 084a67c..a637300 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -41,6 +41,10 @@ zoom: {{ scale }}; } {% endif %} + + :root { + --line-height: {{ line_height }}; + } </style> {% endblock %} diff --git a/src/text_tv.py b/src/text_tv.py index 21ff2e8..abd86e2 100644 --- a/src/text_tv.py +++ b/src/text_tv.py @@ -12,33 +12,51 @@ app = flask.Flask(__name__, template_folder='templates', static_folder='static', debug = 'PROD' not in os.environ - +@app.route('/top', defaults={'width': 34}) +@app.route('/top/<width>') @app.route('/top') -def top(): +def top(width: int): now = datetime.datetime.now() if not program_parser.override_date else program_parser.override_date - return ' '.join(['BornHack', 'S105', now.strftime("%a %d %b"), now.strftime("%R:%S")]) + parts = ['BornHack', 'S105', now.strftime("%a %d %b"), now.strftime("%R:%S")] + parts_length = len(''.join(parts)) + padding_length = width - parts_length + padding = int(padding_length / (len(parts) - 1)) + top = (' ' * padding).join(parts) + remainder = width - len(top) + top = top + " " * remainder + return top @app.route('/update') def update(): return top() + '\n' + flask.render_template('program.html', parts=text()) -@app.route('/program.json') -def program(): - events_to_show: list[Event] = program_parser.get_events_to_show(program_parser.get_program()) +@app.route('/program.json', defaults={'width': 34}) +@app.route('/program.json/<width>') +def program(width: int): + title_max_length = width - 17 # Truncate the title minus the length of the date, icon and associated whitespace + print(f'title_max_length: {title_max_length}') + events_to_show: list[Event] = program_parser.get_events_to_show(program_parser.get_program(), title_max_length=title_max_length) #{event.title} {day} {start_time}-{end_time} {icon} return events_to_show -@app.route('/text') -def text() -> dict[str, str]: - return {part: eval(part)() for part in ['top', 'program']} +@app.route("/text/", defaults={'width': 34}) +@app.route("/text/<width>") +def text(width: int) -> dict[str, str]: + return {part: eval(part)(width=width) for part in ['top', 'program']} @app.route('/') def index(): - scale = flask.request.args.get("scale", "2") - return flask.render_template('index.html', parts=text(), scale=scale) + arg_defaults = { + 'scale': 2, + 'line_height': 1.5, + 'width': 50, + } + args = {key: flask.request.args.get(key, value) for key, value in arg_defaults.items()} + args['width'] = int(args['width']) + return flask.render_template('index.html', parts=text(width=args['width']), **args) def main(): |
