This repository has been archived on 2022-12-29. You can view files and clone it, but cannot push or open issues or pull requests.
zeropod/__main__.py

87 lines
2.6 KiB
Python

import os
import signal
import time
from traceback import print_exc
from importlib import import_module
from icecream import ic
from menu import Menu, MenuItem, MenuType
from cinput import ControlInput
from graphics import Graphics
menu_config = [
MenuItem("Apps",
MenuType.SUB_MENU,
{"sub_menu": [
MenuItem("Chess Game",
MenuType.PLUGIN,
{"plugin": "chess",
"arg": "game"}),
MenuItem("Chess Puzzles",
MenuType.PLUGIN,
{"plugin": "chess",
"arg": "puzzles"}),
MenuItem("Cube Timer",
MenuType.PLUGIN,
{"plugin": "cube",
"arg": None}),
]}),
MenuItem("Information",
MenuType.PLUGIN,
{"plugin": "info",
"arg": None}),
MenuItem("Config",
MenuType.SUB_MENU,
{"sub_menu": [
MenuItem("Brightness",
MenuType.PLUGIN,
{"plugin": "config",
"arg": "brightness"}),
MenuItem("Wifi",
MenuType.PLUGIN,
{"plugin": "config",
"arg": "wifi"}),
]}),
MenuItem("Reboot",
MenuType.EXIT_CMD,
{"command": "sudo reboot"}),
MenuItem("Shutdown",
MenuType.EXIT_CMD,
{"command": "sudo shutdown now"})]
cinput = ControlInput()
graphics = Graphics()
menu = Menu(menu_config, cinput, graphics)
def program_exit(*_):
graphics.clear()
graphics.show()
os._exit(0)
signal.signal(signal.SIGINT, program_exit)
signal.signal(signal.SIGTERM, program_exit)
try:
while True:
item = menu.get_selection()
if item.menu_type == MenuType.PLUGIN:
try:
graphics.clear()
graphics.text("Loading...", 0, 0, 1)
graphics.show()
ic(item)
plugin = import_module("plugin." + item.data["plugin"])
ic(plugin)
plugin.execute(cinput, graphics, item.data["arg"])
except:
print_exc()
graphics.clear()
graphics.text("Plugin error!", 0, 0, 1)
graphics.show()
time.sleep(3)
elif item.menu_type == MenuType.EXIT_CMD:
os.system(item.data["command"])
program_exit()
except:
print_exc()
program_exit()