From 90abf780af063fbeaa7b24e89ae0e677b5d742d0 Mon Sep 17 00:00:00 2001 From: Aaron Gutierrez Date: Tue, 21 Jul 2015 21:46:48 -0700 Subject: [PATCH] Added project lists --- cmdasana.py | 24 ++++++++++++++++++++---- ui.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/cmdasana.py b/cmdasana.py index 51e5804..7df5d10 100755 --- a/cmdasana.py +++ b/cmdasana.py @@ -72,8 +72,15 @@ class CmdAsana: 'workspace': workspace_id, 'completed_since': 'now' }) + + def allMyProjects(self): + return self.client.projects.find_by_workspace(self.workspace_id, + page_size=None) + def projectTasks(self, project_id): - return self.client.tasks.find_by_project(project_id) + return self.client.tasks.find_by_project(project_id, params={ + 'completed_since': 'now' + }) def completeTask(self, task_id): self.client.tasks.update(task_id, completed=True) @@ -98,7 +105,7 @@ class CmdAsana: self.frame.contents.append((widget, self.frame.options())) self.frame.focus_position = 0 - def showWorkspace(self, workspace_id): + def showMyTasks(self, workspace_id): task_list = ui.TaskList(self.allMyTasks(workspace_id)) self.connectTaskListSignals(task_list) self.replaceBody(task_list) @@ -109,6 +116,12 @@ class CmdAsana: self.connectTaskListSignals(task_list) self.replaceBody(task_list) + def showProjectList(self, workspace_id): + self.workspace_id = workspace_id + project_list = ui.ProjectList(self.allMyProjects()) + urwid.connect_signal(project_list, 'loadproject', self.showProject) + self.replaceBody(project_list) + def loadDetails(self, task_id): task = self.client.tasks.find_by_id(task_id) stories = self.client.stories.find_by_task(task_id) @@ -138,6 +151,8 @@ class CmdAsana: urwid.register_signal(ui.WorkspaceMenu, 'click') + urwid.register_signal(ui.ProjectList, 'loadproject') + def clearSignals(self, widget): urwid.disconnect_signal(widget, 'complete', self.completeTask) urwid.disconnect_signal(widget, 'newtask', self.newTask) @@ -159,13 +174,14 @@ class CmdAsana: self.registerSignals() workspace_menu = ui.WorkspaceMenu(self.myWorkspaces()) - urwid.connect_signal(workspace_menu, 'click', self.showWorkspace) + urwid.connect_signal(workspace_menu, 'click', self.showProjectList) self.frame = urwid.Pile([ ('pack', urwid.AttrMap(workspace_menu, 'workspace')), None ]) - self.showWorkspace(self.myWorkspaces()[0]['id']) + #self.showWorkspace(self.myWorkspaces()[0]['id']) + self.showProjectList(self.myWorkspaces()[0]['id']) loop = urwid.MainLoop(self.frame, unhandled_input=self.handleInput, diff --git a/ui.py b/ui.py index 1d8227b..6ea5a4d 100644 --- a/ui.py +++ b/ui.py @@ -1,5 +1,6 @@ # -*- coding: latin-1 -*- import urwid +import sys # TaskEdit modes EDIT = 'edit' @@ -41,6 +42,41 @@ class WorkspaceButton(urwid.Button): super(WorkspaceButton, self).__init__(workspace['name']) urwid.connect_signal(self, 'click', onClick, workspace['id']) +class ProjectIcon(urwid.SelectableIcon): + def __init__(self, project, onClick): + self.project = project + self.onClick = onClick + super(ProjectIcon, self).__init__(project['name']) + + def keypress(self, size, key): + if key in ('enter', 'left', 'l'): + self.onClick(self.project['id']) + else: + return super(ProjectIcon, self).keypress(size, key) + +class ProjectList(urwid.ListBox): + def __init__(self, projects): + self.projects = projects + + project_widgets = [ProjectIcon(project, self.loadProject) + for project in projects] + + body = urwid.SimpleFocusListWalker(project_widgets) + + super(ProjectList, self).__init__(body) + + def keypress(self, size, key): + if key == 'j': + key = 'down' + elif key == 'k': + key = 'up' + + return super(ProjectList, self).keypress(size, key) + + def loadProject(self, project_id): + urwid.emit_signal(self, 'loadproject', project_id) + + class TaskList(urwid.ListBox): def __init__(self, tasks): self.tasks = tasks