Add Protospace class list
This commit is contained in:
parent
0348e715cb
commit
83c41831af
107
main.py
107
main.py
|
@ -2,11 +2,19 @@
|
||||||
|
|
||||||
import curses
|
import curses
|
||||||
import requests
|
import requests
|
||||||
|
import pytz
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
ENTER_KEY = 10
|
ENTER_KEY = 10
|
||||||
BACKSPACE_KEY = 263
|
BACKSPACE_KEY = 263
|
||||||
ESCAPE_KEY = 27
|
ESCAPE_KEY = 27
|
||||||
|
|
||||||
|
TIMEZONE_CALGARY = pytz.timezone('America/Edmonton')
|
||||||
|
|
||||||
|
def format_date(datestr):
|
||||||
|
d = datetime.strptime(datestr, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=pytz.UTC)
|
||||||
|
d = d.astimezone(TIMEZONE_CALGARY)
|
||||||
|
return d.strftime('%a %b %-d, %Y %-I:%M %p')
|
||||||
|
|
||||||
def sign_send(to_send):
|
def sign_send(to_send):
|
||||||
try:
|
try:
|
||||||
|
@ -25,6 +33,14 @@ def fetch_stats():
|
||||||
except:
|
except:
|
||||||
return 'Error.'
|
return 'Error.'
|
||||||
|
|
||||||
|
def fetch_classes():
|
||||||
|
try:
|
||||||
|
r = requests.get('https://api.my.protospace.ca/sessions/', timeout=5)
|
||||||
|
r.raise_for_status()
|
||||||
|
return r.json()
|
||||||
|
except:
|
||||||
|
return 'Error.'
|
||||||
|
|
||||||
skip_input = False
|
skip_input = False
|
||||||
current_screen = 'home'
|
current_screen = 'home'
|
||||||
prev_screen = current_screen
|
prev_screen = current_screen
|
||||||
|
@ -44,6 +60,8 @@ curses.curs_set(0)
|
||||||
|
|
||||||
sign_to_send = ''
|
sign_to_send = ''
|
||||||
stats = {}
|
stats = {}
|
||||||
|
classes = {}
|
||||||
|
classes_start = 0
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
if current_screen == 'home':
|
if current_screen == 'home':
|
||||||
|
@ -56,14 +74,14 @@ while True:
|
||||||
|
|
||||||
stdscr.addstr(9, 4, '[T] Stats')
|
stdscr.addstr(9, 4, '[T] Stats')
|
||||||
stdscr.addstr(11, 4, '[S] Sign')
|
stdscr.addstr(11, 4, '[S] Sign')
|
||||||
#stdscr.addstr(8, 4, '[C] Classes')
|
stdscr.addstr(13, 4, '[C] Classes')
|
||||||
#stdscr.addstr(10, 4, '[F] Forum')
|
#stdscr.addstr(10, 4, '[F] Forum')
|
||||||
|
|
||||||
stdscr.addstr(23, 1, ' Copyright (c) 1985 Bikeshed Computer Systems Corp.')
|
stdscr.addstr(23, 1, ' Copyright (c) 1985 Bikeshed Computer Systems Corp.')
|
||||||
stdscr.clrtoeol()
|
stdscr.clrtoeol()
|
||||||
stdscr.refresh()
|
stdscr.refresh()
|
||||||
elif current_screen == 'debug':
|
elif current_screen == 'debug':
|
||||||
stdscr.addstr(1, 1, 'PROTOVAC')
|
stdscr.addstr(0, 1, 'PROTOVAC')
|
||||||
stdscr.addstr(3, 1, 'Debug Mode')
|
stdscr.addstr(3, 1, 'Debug Mode')
|
||||||
stdscr.addstr(4, 1, '==========')
|
stdscr.addstr(4, 1, '==========')
|
||||||
stdscr.addstr(6, 1, str.format('Character pressed = {0}', c))
|
stdscr.addstr(6, 1, str.format('Character pressed = {0}', c))
|
||||||
|
@ -73,25 +91,25 @@ while True:
|
||||||
stdscr.clrtoeol()
|
stdscr.clrtoeol()
|
||||||
stdscr.refresh()
|
stdscr.refresh()
|
||||||
elif current_screen == 'stats':
|
elif current_screen == 'stats':
|
||||||
stdscr.addstr(1, 1, 'PROTOVAC')
|
stdscr.addstr(0, 1, 'PROTOVAC')
|
||||||
stdscr.addstr(3, 1, 'Protospace Stats')
|
stdscr.addstr(2, 1, 'Protospace Stats')
|
||||||
stdscr.addstr(4, 1, '================')
|
stdscr.addstr(3, 1, '================')
|
||||||
if stats:
|
if stats:
|
||||||
stdscr.addstr(6 , 1, 'Next meeting: {}'.format(stats['next_meeting']))
|
stdscr.addstr(5 , 1, 'Next meeting: {}'.format(format_date(stats['next_meeting'])))
|
||||||
stdscr.addstr(8 , 1, 'Next clean: {}'.format(stats['next_clean']))
|
stdscr.addstr(7 , 1, 'Next clean: {}'.format(format_date(stats['next_clean'])))
|
||||||
stdscr.addstr(10, 1, 'Next class: {}'.format(stats['next_class']['datetime']))
|
stdscr.addstr(9, 1, 'Next class: {}'.format(stats['next_class']['name']))
|
||||||
stdscr.addstr(11, 1, ' {}'.format(stats['next_class']['name']))
|
stdscr.addstr(10, 1, ' {}'.format(format_date(stats['next_class']['datetime'])))
|
||||||
stdscr.addstr(13, 1, 'Last class: {}'.format(stats['prev_class']['datetime']))
|
stdscr.addstr(12, 1, 'Last class: {}'.format(stats['prev_class']['name']))
|
||||||
stdscr.addstr(14, 1, ' {}'.format(stats['prev_class']['name']))
|
stdscr.addstr(13, 1, ' {}'.format(format_date(stats['prev_class']['datetime'])))
|
||||||
|
|
||||||
stdscr.addstr(16, 1, 'Member count: {} Green: {} Paused / expired: {}'.format(
|
stdscr.addstr(15, 1, 'Member count: {} Green: {} Paused / expired: {}'.format(
|
||||||
stats['member_count'],
|
stats['member_count'],
|
||||||
stats['green_count'],
|
stats['green_count'],
|
||||||
stats['paused_count'],
|
stats['paused_count'],
|
||||||
))
|
))
|
||||||
stdscr.addstr(18, 1, 'Card scans: {}'.format(stats['card_scans']))
|
stdscr.addstr(17, 1, 'Card scans: {}'.format(stats['card_scans']))
|
||||||
else:
|
else:
|
||||||
stdscr.addstr(6, 1, 'Loading...')
|
stdscr.addstr(5, 1, 'Loading...')
|
||||||
|
|
||||||
stdscr.addstr(23, 1, '[B] Back')
|
stdscr.addstr(23, 1, '[B] Back')
|
||||||
stdscr.clrtoeol()
|
stdscr.clrtoeol()
|
||||||
|
@ -99,20 +117,52 @@ while True:
|
||||||
|
|
||||||
if not stats:
|
if not stats:
|
||||||
stats = fetch_stats()
|
stats = fetch_stats()
|
||||||
|
stdscr.erase()
|
||||||
|
skip_input = True
|
||||||
|
elif current_screen == 'classes':
|
||||||
|
stdscr.addstr(0, 1, 'PROTOVAC')
|
||||||
|
stdscr.addstr(2, 1, 'Protospace Classes')
|
||||||
|
stdscr.addstr(3, 1, '==================')
|
||||||
|
if classes:
|
||||||
|
classes_in_view = classes['results'][classes_start:6+classes_start]
|
||||||
|
lines = []
|
||||||
|
for session in classes_in_view:
|
||||||
|
lines.append(session['course_data']['name'])
|
||||||
|
lines.append('{} Instructor: {} Cost: {} Students: {}'.format(
|
||||||
|
format_date(session['datetime']),
|
||||||
|
'Protospace' if session['course_data']['id'] in [413, 317, 273] else session['instructor_name'],
|
||||||
|
'Free' if session['cost'] == '0.00' else '$' + session['cost'],
|
||||||
|
str(session['student_count']) + (' / ' + str(session['max_students']) if session['max_students'] else ''),
|
||||||
|
))
|
||||||
|
lines.append('')
|
||||||
|
|
||||||
|
offset = 5
|
||||||
|
for num, line in enumerate(lines):
|
||||||
|
stdscr.addstr(num + offset, 1, line)
|
||||||
|
else:
|
||||||
|
stdscr.addstr(5, 1, 'Loading...')
|
||||||
|
|
||||||
|
stdscr.addstr(23, 1, '[B] Back [J] Down [K] Up')
|
||||||
|
stdscr.clrtoeol()
|
||||||
|
stdscr.refresh()
|
||||||
|
|
||||||
|
if not classes:
|
||||||
|
classes = fetch_classes()
|
||||||
|
stdscr.erase()
|
||||||
skip_input = True
|
skip_input = True
|
||||||
elif current_screen == 'sign':
|
elif current_screen == 'sign':
|
||||||
stdscr.addstr(1, 1, 'PROTOVAC')
|
stdscr.addstr(0, 1, 'PROTOVAC')
|
||||||
stdscr.addstr(3, 1, 'Protospace Sign')
|
stdscr.addstr(2, 1, 'Protospace Sign')
|
||||||
stdscr.addstr(4, 1, '===============')
|
stdscr.addstr(3, 1, '===============')
|
||||||
stdscr.addstr(6, 1, 'Send a message to the sign in the welcome room and classroom.')
|
stdscr.addstr(5, 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.')
|
stdscr.addstr(6, 1, 'After sending, turn your head right and wait.')
|
||||||
|
|
||||||
if sign_to_send:
|
if sign_to_send:
|
||||||
stdscr.addstr(9, 4, sign_to_send)
|
stdscr.addstr(8, 4, sign_to_send)
|
||||||
stdscr.clrtoeol()
|
stdscr.clrtoeol()
|
||||||
stdscr.addstr(23, 1, '[ENTER] Send [ESC] Cancel')
|
stdscr.addstr(23, 1, '[ENTER] Send [ESC] Cancel')
|
||||||
else:
|
else:
|
||||||
stdscr.addstr(9, 4, '[E] Edit message')
|
stdscr.addstr(8, 4, '[E] Edit message')
|
||||||
stdscr.addstr(23, 1, '[B] Back')
|
stdscr.addstr(23, 1, '[B] Back')
|
||||||
|
|
||||||
stdscr.clrtoeol()
|
stdscr.clrtoeol()
|
||||||
|
@ -142,18 +192,33 @@ while True:
|
||||||
current_screen = 'stats'
|
current_screen = 'stats'
|
||||||
elif button == 's':
|
elif button == 's':
|
||||||
current_screen = 'sign'
|
current_screen = 'sign'
|
||||||
|
elif button == 'c':
|
||||||
|
current_screen = 'classes'
|
||||||
elif button == 'd':
|
elif button == 'd':
|
||||||
current_screen = 'debug'
|
current_screen = 'debug'
|
||||||
elif current_screen == 'stats':
|
elif current_screen == 'stats':
|
||||||
if button == 'b':
|
if button == 'b':
|
||||||
current_screen = 'home'
|
current_screen = 'home'
|
||||||
stats = {}
|
stats = {}
|
||||||
|
elif current_screen == 'classes':
|
||||||
|
if button == 'b':
|
||||||
|
current_screen = 'home'
|
||||||
|
classes = {}
|
||||||
|
classes_start = 0
|
||||||
|
elif button == 'j':
|
||||||
|
classes_start += 1
|
||||||
|
stdscr.erase()
|
||||||
|
elif button == 'k':
|
||||||
|
if classes_start > 0:
|
||||||
|
classes_start -= 1
|
||||||
|
stdscr.erase()
|
||||||
elif current_screen == 'sign':
|
elif current_screen == 'sign':
|
||||||
if sign_to_send:
|
if sign_to_send:
|
||||||
if c == BACKSPACE_KEY:
|
if c == BACKSPACE_KEY:
|
||||||
sign_to_send = sign_to_send[:-2] + '_'
|
sign_to_send = sign_to_send[:-2] + '_'
|
||||||
elif c == ESCAPE_KEY:
|
elif c == ESCAPE_KEY:
|
||||||
sign_to_send = ''
|
sign_to_send = ''
|
||||||
|
stdscr.erase()
|
||||||
elif c == ENTER_KEY:
|
elif c == ENTER_KEY:
|
||||||
if len(sign_to_send) > 1:
|
if len(sign_to_send) > 1:
|
||||||
stdscr.addstr(15, 4, 'Sending...')
|
stdscr.addstr(15, 4, 'Sending...')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user