aboutsummaryrefslogtreecommitdiff
path: root/roku_tui.py
diff options
context:
space:
mode:
authorBenjamin Winston2022-06-15 23:00:54 -0400
committerBenjamin Winston2022-06-15 23:00:54 -0400
commit8f4a94345ddfa949bd89c8cd2906809ac57e5aa2 (patch)
tree77c4ac1eb48eec618399b8fed1d23455237d2e0c /roku_tui.py
parent763f45b98114e0c3d136a11f84b14730688432c1 (diff)
allow key override in roku.config
Diffstat (limited to 'roku_tui.py')
-rwxr-xr-xroku_tui.py65
1 files changed, 48 insertions, 17 deletions
diff --git a/roku_tui.py b/roku_tui.py
index 5312631..60b58ca 100755
--- a/roku_tui.py
+++ b/roku_tui.py
@@ -7,12 +7,33 @@ from configparser import ConfigParser
from pathlib import Path
import xml.etree.ElementTree as ET
+defaults = { "back": "b",
+ "home": "h",
+ "instantreplay": "r",
+ "info": "*",
+ "up": "KEY_UP",
+ "down": "KEY_DOWN",
+ "left": "KEY_LEFT",
+ "right": "KEY_RIGHT",
+ "select": "\n",
+ "rev": "<",
+ "fwd": ">",
+ "play": "p" }
+
+def keymap_override(keymap):
+ ret = keymap
+ for key, val in defaults.items():
+ if key not in ret.keys():
+ ret[key] = val
+ return ret
+
class RokuConfig:
def __init__(self, config_file):
config = ConfigParser()
config.read(config_file)
self.ip = config['general']['roku_ip']
+ self.keymap = keymap_override(config["keymap"])
class RemoteKey:
@@ -25,34 +46,44 @@ class RemoteKey:
class RokuRemote:
- def __init__(self, ip):
- self.base_url = 'http://{}:8060/'.format(ip)
+ def __init__(self, config):
+ self.base_url = 'http://{}:8060/'.format(config.ip)
+ self.keymap = config.keymap
self.setup_keys()
def setup_keys(self):
self.keys = {}
# first row
- self.keys['b'] = RemoteKey('b', 'Back', 'keypress/back', 1, 1)
- self.keys['h'] = RemoteKey('h', 'Home', 'keypress/home', 1, 10)
+ for key, val in self.keymap.items():
+ self.__setattr__(key, val)
+
+ self.keys[self.back] = RemoteKey(self.back, 'Back', 'keypress/back', 1, 1)
+ self.keys[self.home] = RemoteKey(self.home, 'Home', 'keypress/home', 1, 10)
# second row
- self.keys['r'] = RemoteKey('r', 'Repl', 'keypress/instantreplay', 13, 1)
- self.keys['*'] = RemoteKey('*', 'Star', 'keypress/info', 13, 10)
+ self.keys[self.instantreplay] = RemoteKey(self.instantreplay, 'Repl', 'keypress/instantreplay', 13, 1)
+ self.keys[self.info] = RemoteKey(self.info, 'Star', 'keypress/info', 13, 10)
# arrow keys
- self.keys['KEY_UP'] = RemoteKey('KEY_UP', '^', 'keypress/up', 4, 7)
- self.keys['KEY_LEFT'] = RemoteKey('KEY_LEFT', '<', 'keypress/left', 7, 1)
- self.keys['\n'] = RemoteKey('\n', 'OK!', 'keypress/select', 7, 6)
- self.keys['KEY_RIGHT'] = RemoteKey('KEY_RIGHT', '>', 'keypress/right', 7, 13)
- self.keys['KEY_DOWN'] = RemoteKey('KEY_DOWN', 'v', 'keypress/down', 10, 7)
+ self.keys[self.up] = RemoteKey(self.up, '^', 'keypress/up', 4, 7)
+ self.keys[self.left] = RemoteKey(self.left, '<', 'keypress/left', 7, 1)
+ self.keys[self.select] = RemoteKey(self.select, 'OK!', 'keypress/select', 7, 6)
+ self.keys[self.right] = RemoteKey(self.right, '>', 'keypress/right', 7, 13)
+ self.keys[self.down] = RemoteKey(self.down, 'v', 'keypress/down', 10, 7)
# third row
- self.keys['<'] = RemoteKey('<', '<<', 'keypress/rev', 16, 1)
- self.keys['p'] = RemoteKey('p', 'P', 'keypress/play', 16, 7)
- self.keys['>'] = RemoteKey('>', '>>', 'keypress/fwd', 16, 12)
+ self.keys[self.rev] = RemoteKey(self.rev, '<<', 'keypress/rev', 16, 1)
+ self.keys[self.play] = RemoteKey(self.play, 'P', 'keypress/play', 16, 7)
+ self.keys[self.fwd] = RemoteKey(self.fwd, '>>', 'keypress/fwd', 16, 12)
+
+ for key, val in self.keymap.items():
+ if val not in self.keys:
+ self.keys[val] = RemoteKey(key, "", f"keypress/{key}", 0, 0)
def draw_key(stdscr, key, pressed=False):
+ if key.x == 0 and key.y == 0:
+ return
color = 1 if not pressed else 2
draw_rect_key(stdscr, key.y, key.x, key.label, color)
@@ -143,8 +174,8 @@ def help_toggle(stdscr):
def remote_loop(stdscr, remote):
while 1:
# draw all the keys
- for k in remote.keys:
- draw_key(stdscr, remote.keys[k])
+ for key in remote.keys.values():
+ draw_key(stdscr, key)
# listen for an input
c = stdscr.getkey()
@@ -165,7 +196,7 @@ def main(stdscr, config):
stdscr.clear()
# create the remote
- remote = RokuRemote(config.ip)
+ remote = RokuRemote(config)
status(stdscr)