Preliminary clockify support

This commit is contained in:
3wc
2025-08-07 12:02:35 +01:00
parent db6d7ac640
commit fb49a24ae1
10 changed files with 273 additions and 56 deletions

View File

@ -0,0 +1,32 @@
from textual.app import ComposeResult
from textual.containers import VerticalScroll
from textual.screen import Screen
from textual.widgets import DataTable, Header, Footer
from hamstertools.db import HamsterActivity, ClockifyProject, HamsterClockifyMapping
class ClockifyMappingScreen(Screen):
"""Screen for managing Clockify activity-project mappings"""
BINDINGS = [("q", "quit", "Quit")]
def compose(self) -> ComposeResult:
yield Header()
yield VerticalScroll(DataTable())
yield Footer()
def on_mount(self) -> None:
table = self.query_one(DataTable)
table.add_columns("Hamster Activity", "Clockify Project")
# Query all mappings
mappings = (HamsterClockifyMapping
.select()
.join(HamsterActivity)
.join(ClockifyProject))
for mapping in mappings:
activity = f"{mapping.hamster_activity.category.name} » {mapping.hamster_activity.name}"
project = mapping.clockify_project.name
table.add_row(activity, project)

View File

@ -0,0 +1,24 @@
from textual.app import ComposeResult
from textual.containers import VerticalScroll
from textual.screen import Screen
from textual.widgets import DataTable, Header, Footer
from hamstertools.db import ClockifyProject
class ClockifyProjectScreen(Screen):
"""Screen for listing Clockify projects"""
BINDINGS = [("q", "quit", "Quit")]
def compose(self) -> ComposeResult:
yield Header()
yield VerticalScroll(DataTable())
yield Footer()
def on_mount(self) -> None:
table = self.query_one(DataTable)
table.add_columns("ID", "Name", "Workspace ID")
for project in ClockifyProject.select():
table.add_row(project.clockify_id, project.name, project.workspace_id)

View File

@ -14,7 +14,7 @@ from .tags import TagList
class HamsterScreen(Screen):
BINDINGS = [
("c", "show_tab('categories')", "Categories"),
("g", "show_tab('categories')", "Categories"),
("a", "show_tab('activities')", "Activities"),
("t", "show_tab('tags')", "Tags"),
]

View File

@ -1,14 +1,11 @@
from peewee import JOIN, fn
from textual import on
from textual.app import ComposeResult
from textual.binding import Binding
from textual.containers import Horizontal, Vertical
from textual.coordinate import Coordinate
from textual.events import DescendantBlur
from textual.screen import ModalScreen
from textual.widgets import DataTable, Input, Label
from textual_autocomplete import AutoComplete, Dropdown
from hamstertools.db import HamsterFactTag, HamsterTag
from hamstertools.screens.list import ListPane