From 0348e715cb37ff04cea9aac40effcfc9ab0ac318 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Thu, 1 Sep 2022 14:05:54 -0600 Subject: [PATCH] Ditch unicurses, go back to curses --- .gitignore | 114 +++++++++++++++++++++++++++++++++++++++++ main.py | 148 ++++++++++++++++++++++++++++------------------------- simple.py | 2 +- 3 files changed, 193 insertions(+), 71 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bc0dfdb --- /dev/null +++ b/.gitignore @@ -0,0 +1,114 @@ +*.ipynb +.pytype +.DS_Store +.vscode +mypy_report +docs/build +docs/source/_build +tools/*.txt +playground/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/main.py b/main.py index b45ac3e..1a34216 100755 --- a/main.py +++ b/main.py @@ -1,13 +1,13 @@ -#!/home/pi/protovac/env/bin/python +#!/home/tanner/protovac/env/bin/python -from unicurses import * -from curses.textpad import Textbox, rectangle +import curses import requests ENTER_KEY = 10 BACKSPACE_KEY = 263 ESCAPE_KEY = 27 + def sign_send(to_send): try: data = dict(sign=to_send, on_behalf_of='protovac') @@ -27,9 +27,8 @@ def fetch_stats(): skip_input = False current_screen = 'home' +prev_screen = current_screen -highlight = 1 -choice = 0 c = 0 # highlighting: @@ -37,95 +36,101 @@ c = 0 #mvwaddstr(menu_win, y, x, choices[i]) #wattroff(menu_win, A_REVERSE) -stdscr = initscr() -clear() -noecho() -cbreak() -curs_set(0) - -keypad(stdscr, True) +stdscr = curses.initscr() +curses.noecho() +curses.cbreak() +stdscr.keypad(True) +curses.curs_set(0) sign_to_send = '' stats = {} while True: if current_screen == 'home': - mvaddstr(1, 1, 'PROTOVAC - can you smell the phosphorus?') - mvaddstr(4, 4, '[T] Stats') - mvaddstr(6, 4, '[S] Sign') - #mvaddstr(8, 4, '[C] Classes') - #mvaddstr(10, 4, '[F] Forum') - - mvaddstr(23, 1, '') - clrtoeol() - refresh() + stdscr.addstr(1, 1, ' _______ _______ ___ _________ ___ ____ ____ _ ______ ') + stdscr.addstr(2, 1, '|_ __ \|_ __ \ .\' `. | _ _ | .\' `.|_ _| |_ _|/ \ .\' ___ |') + stdscr.addstr(3, 1, ' | |__) | | |__) | / .-. \|_/ | | \_|/ .-. \ \ \ / / / _ \ / .\' \_|') + stdscr.addstr(4, 1, ' | ___/ | __ / | | | | | | | | | | \ \ / / / ___ \ | | ') + stdscr.addstr(5, 1, ' _| |_ _| | \ \_\ `-\' / _| |_ \ `-\' / \ \' /_/ / \ \_\ `.___.\'\\') + stdscr.addstr(6, 1, '|_____| |____| |___|`.___.\' |_____| `.___.\' \_/|____| |____|`.____ .\'') + + stdscr.addstr(9, 4, '[T] Stats') + stdscr.addstr(11, 4, '[S] Sign') + #stdscr.addstr(8, 4, '[C] Classes') + #stdscr.addstr(10, 4, '[F] Forum') + + stdscr.addstr(23, 1, ' Copyright (c) 1985 Bikeshed Computer Systems Corp.') + stdscr.clrtoeol() + stdscr.refresh() elif current_screen == 'debug': - mvaddstr(1, 1, 'PROTOVAC') - mvaddstr(3, 1, 'Debug Mode') - mvaddstr(4, 1, '==========') - mvaddstr(6, 1, str.format('Character pressed = {0}', c)) - clrtoeol() - - mvaddstr(23, 1, '[B] Back') - clrtoeol() - refresh() + stdscr.addstr(1, 1, 'PROTOVAC') + stdscr.addstr(3, 1, 'Debug Mode') + stdscr.addstr(4, 1, '==========') + stdscr.addstr(6, 1, str.format('Character pressed = {0}', c)) + stdscr.clrtoeol() + + stdscr.addstr(23, 1, '[B] Back') + stdscr.clrtoeol() + stdscr.refresh() elif current_screen == 'stats': - mvaddstr(1, 1, 'PROTOVAC') - mvaddstr(3, 1, 'Protospace Stats') - mvaddstr(4, 1, '================') + stdscr.addstr(1, 1, 'PROTOVAC') + stdscr.addstr(3, 1, 'Protospace Stats') + stdscr.addstr(4, 1, '================') if stats: - mvaddstr(6 , 1, 'Next meeting: {}'.format(stats['next_meeting'])) - mvaddstr(8 , 1, 'Next clean: {}'.format(stats['next_clean'])) - mvaddstr(10, 1, 'Next class: {}'.format(stats['next_class']['datetime'])) - mvaddstr(11, 1, ' {}'.format(stats['next_class']['name'])) - mvaddstr(13, 1, 'Last class: {}'.format(stats['prev_class']['datetime'])) - mvaddstr(14, 1, ' {}'.format(stats['prev_class']['name'])) - - mvaddstr(16, 1, 'Member count: {} Green: {} Paused / expired: {}'.format( + stdscr.addstr(6 , 1, 'Next meeting: {}'.format(stats['next_meeting'])) + stdscr.addstr(8 , 1, 'Next clean: {}'.format(stats['next_clean'])) + stdscr.addstr(10, 1, 'Next class: {}'.format(stats['next_class']['datetime'])) + stdscr.addstr(11, 1, ' {}'.format(stats['next_class']['name'])) + stdscr.addstr(13, 1, 'Last class: {}'.format(stats['prev_class']['datetime'])) + stdscr.addstr(14, 1, ' {}'.format(stats['prev_class']['name'])) + + stdscr.addstr(16, 1, 'Member count: {} Green: {} Paused / expired: {}'.format( stats['member_count'], stats['green_count'], stats['paused_count'], )) - mvaddstr(18, 1, 'Card scans: {}'.format(stats['card_scans'])) + stdscr.addstr(18, 1, 'Card scans: {}'.format(stats['card_scans'])) else: - mvaddstr(6, 1, 'Loading...') + stdscr.addstr(6, 1, 'Loading...') - mvaddstr(23, 1, '[B] Back') - clrtoeol() - refresh() + stdscr.addstr(23, 1, '[B] Back') + stdscr.clrtoeol() + stdscr.refresh() if not stats: stats = fetch_stats() skip_input = True elif current_screen == 'sign': - mvaddstr(1, 1, 'PROTOVAC') - mvaddstr(3, 1, 'Protospace Sign') - mvaddstr(4, 1, '===============') - mvaddstr(6, 1, 'Send a message to the sign in the welcome room and classroom.') + stdscr.addstr(1, 1, 'PROTOVAC') + stdscr.addstr(3, 1, 'Protospace Sign') + stdscr.addstr(4, 1, '===============') + stdscr.addstr(6, 1, 'Send a message to the sign in the welcome room and classroom.') + stdscr.addstr(7, 1, 'After sending, turn your head right and wait.') if sign_to_send: - mvaddstr(8, 4, sign_to_send) - mvaddstr(23, 1, '[ENTER] Send [ESC] Cancel') + stdscr.addstr(9, 4, sign_to_send) + stdscr.clrtoeol() + stdscr.addstr(23, 1, '[ENTER] Send [ESC] Cancel') else: - mvaddstr(8, 4, '[E] Edit message') - mvaddstr(23, 1, '[B] Back') + stdscr.addstr(9, 4, '[E] Edit message') + stdscr.addstr(23, 1, '[B] Back') + + stdscr.clrtoeol() + stdscr.refresh() - clrtoeol() - refresh() + stdscr.move(23, 79) if skip_input: skip_input = False else: try: - c = wgetch(stdscr) + c = stdscr.getch() except KeyboardInterrupt: - refresh() - endwin() break - if c == KEY_UP: + if c == curses.KEY_UP: pass - elif c == KEY_DOWN: + elif c == curses.KEY_DOWN: pass elif c == 10: # ENTER is pressed pass @@ -135,18 +140,14 @@ while True: if current_screen == 'home': if button == 't': current_screen = 'stats' - clear() elif button == 's': current_screen = 'sign' - clear() elif button == 'd': current_screen = 'debug' - clear() elif current_screen == 'stats': if button == 'b': current_screen = 'home' stats = {} - clear() elif current_screen == 'sign': if sign_to_send: if c == BACKSPACE_KEY: @@ -155,18 +156,25 @@ while True: sign_to_send = '' elif c == ENTER_KEY: if len(sign_to_send) > 1: - mvaddstr(10, 4, 'Sending...') - refresh() + stdscr.addstr(15, 4, 'Sending...') + stdscr.refresh() sign_send(sign_to_send[:-1]) + stdscr.erase() sign_to_send = '' else: if c < 127 and c > 31: sign_to_send = sign_to_send[:-1] + chr(c) + '_' - clear() elif button == 'b': current_screen = 'home' - clear() elif button == 'e': sign_to_send = '_' - clear() + if current_screen != prev_screen: + prev_screen = current_screen + stdscr.erase() + + +curses.nocbreak() +stdscr.keypad(False) +curses.echo() +curses.endwin() diff --git a/simple.py b/simple.py index f3ff77d..56214e5 100755 --- a/simple.py +++ b/simple.py @@ -1,4 +1,4 @@ -#!/home/pi/protovac/env/bin/python +#!/home/tanner/protovac/env/bin/python import time import curses