diff --git a/cmdasana.py b/cmdasana.py index 7278cf1..497d1dd 100644 --- a/cmdasana.py +++ b/cmdasana.py @@ -24,50 +24,62 @@ class CmdAsana: except KeyError: return True - def allMyTasks(self): - task_list = [] - for workspace in self.me['workspaces']: - if not self.shouldShowWorkspace(workspace['id']): - continue + def myWorkspaces(self): + return self.me['workspaces'] - tasks = self.client.tasks.find_all(params={ - 'assignee': self.me['id'], - 'workspace': workspace['id'], - 'completed_since': 'now' - }) - task_list += tasks - return task_list + def allMyTasks(self, workspace_id): + return self.client.tasks.find_all(params={ + 'assignee': self.me['id'], + 'workspace': workspace_id, + 'completed_since': 'now' + }) + def completeTask(self, task_id): self.client.tasks.update(task_id, completed=True) def newTask(self): pass + def deleteTask(self): pass -def handleInput(key): - if key in ('q', 'Q'): - raise urwid.ExitMainLoop() + def showDetails(self, task_id): pass -def showDetails(task_id): pass + def replaceBody(self, widget): + self.frame.contents.pop() + self.frame.contents.append((widget, self.frame.options())) -def registerSignals(): - urwid.register_signal(ui.TaskList, 'complete') - urwid.register_signal(ui.TaskEdit, 'complete') + def showWorkspace(self, workspace_id): + task_list = ui.TaskList(self.allMyTasks(workspace_id)) + urwid.connect_signal(task_list, 'complete', self.completeTask) + self.replaceBody(task_list) + def registerSignals(self): + urwid.register_signal(ui.TaskList, 'complete') + urwid.register_signal(ui.TaskEdit, 'complete') + urwid.register_signal(ui.WorkspaceMenu, 'click') + + def handleInput(self, key): + if key in ('q', 'Q'): + raise urwid.ExitMainLoop() + + def render(self): + self.registerSignals() + + workspace_menu = ui.WorkspaceMenu(self.myWorkspaces()) + urwid.connect_signal(workspace_menu, 'click', self.showWorkspace) + + self.frame = urwid.Pile([('pack', workspace_menu), None]) + self.showWorkspace(self.myWorkspaces()[0]['id']) + + loop = urwid.MainLoop(self.frame, + unhandled_input=self.handleInput, + palette=ui.palette + ) + loop.run() def main(): cmdasana = CmdAsana() - registerSignals() - - task_list = ui.TaskList(cmdasana.allMyTasks()) - urwid.connect_signal(task_list, 'complete', cmdasana.completeTask) - - loop = urwid.MainLoop(task_list, - unhandled_input=handleInput, - palette=ui.palette - ) - loop.run() - + cmdasana.render() if __name__ == "__main__": main() diff --git a/ui.py b/ui.py index a73cdd8..5e5c51f 100644 --- a/ui.py +++ b/ui.py @@ -7,8 +7,28 @@ LIST = 'list' palette = [ ('selected', 'standout', ''), + ('selected workspace', 'white', 'dark red'), ] +class WorkspaceMenu(urwid.Columns): + def __init__(self, workspaces): + super(WorkspaceMenu, self).__init__([], dividechars=1) + + for workspace in workspaces: + button = WorkspaceButton(workspace, self.loadWorkspace) + self.contents.append((urwid.AttrMap(button, + None, + focus_map='selected workspace'), + self.options('given', 24))) + + def loadWorkspace(self, widget, workspace_id): + urwid.emit_signal(self, 'click', workspace_id) + +class WorkspaceButton(urwid.Button): + def __init__(self, workspace, onClick): + super(WorkspaceButton, self).__init__(workspace['name']) + urwid.connect_signal(self, 'click', onClick, workspace['id']) + class TaskList(urwid.ListBox): def __init__(self, tasks): self.tasks = tasks