from textual.app import App from hamstertools import clockify from .db import db from .screens.hamster import HamsterScreen from .screens.kimai import KimaiScreen from .screens.clockify.projects import ClockifyProjectScreen class HamsterToolsApp(App): CSS_PATH = "app.tcss" BINDINGS = [ ("h", "switch_mode('hamster')", "Hamster"), ("q", "quit", "Quit"), ] def __init__(self, kimai_api=None, clockify_api=None): self.add_mode("hamster", HamsterScreen()) if kimai_api is not None: self.kimai_api = kimai_api self.add_mode("kimai", KimaiScreen()) if clockify_api is not None: self.clockify_api = clockify_api self.add_mode("clockify", ClockifyProjectScreen()) super().__init__() def on_mount(self) -> None: self.switch_mode("hamster") async def action_quit(self) -> None: db.close() self.exit() class HamsterToolsAppKimai(HamsterToolsApp): BINDINGS = HamsterToolsApp.BINDINGS + [ ("k", "switch_mode('kimai')", "Kimai"), ] def __init__(self, kimai_api): self.kimai_api = kimai_api self.add_mode("kimai", KimaiScreen()) super().__init__() class HamsterToolsAppClockify(HamsterToolsApp): BINDINGS = HamsterToolsApp.BINDINGS + [ ("c", "switch_mode('clockify_projects')", "Clockify"), ] def __init__(self, clockify_api): self.clockify_api = clockify_api self.add_mode("clockify_projects", ClockifyProjectScreen()) super().__init__()