diff --git a/cmdasana.py b/cmdasana.py index bf91608..9d170c7 100755 --- a/cmdasana.py +++ b/cmdasana.py @@ -130,6 +130,9 @@ class CmdAsana: def updateTask(self, task_id, name): self.client.tasks.update(task_id, name=name) + + def updateDetails(self, task_id, details): + self.client.tasks.update(task_id, notes=details) def addComment(self, task_id, comment): self.client.stories.create_on_task(task_id, {"text": comment}) @@ -178,8 +181,7 @@ class CmdAsana: task = self.client.tasks.find_by_id(task_id) stories = self.client.stories.find_by_task(task_id) task_details = ui.TaskDetails(task, stories) - urwid.connect_signal(task_details, 'comment', self.addComment) - urwid.connect_signal(task_details, 'loadproject', self.showProject) + self.connectDetailsSignals(task_details) self.replaceBody(task_details) def registerSignals(self): @@ -187,18 +189,28 @@ class CmdAsana: 'complete', 'newtask', 'updatetask', - 'details' + 'details', ]) urwid.register_signal(ui.TaskEdit, [ 'complete', 'newtask', 'updatetask', - 'details' + 'details', + ]) + + urwid.register_signal(ui.TaskDetails, [ + 'comment', + 'loadproject', + 'updatedescription', + 'updatetask', ]) - urwid.register_signal(ui.TaskDetails, ['comment', 'loadproject']) urwid.register_signal(ui.CommentEdit, ['comment']) + urwid.register_signal(ui.DescriptionEdit, ['updatedescription']) + + urwid.register_signal(ui.TaskNameEdit, 'updatetask') + urwid.register_signal(ui.WorkspaceMenu, 'click') urwid.register_signal(ui.ProjectList, 'loadproject') @@ -215,6 +227,12 @@ class CmdAsana: urwid.connect_signal(task_list, 'updatetask', self.updateTask) urwid.connect_signal(task_list, 'details', self.showDetails) + def connectDetailsSignals(self, task_details): + urwid.connect_signal(task_details, 'comment', self.addComment) + urwid.connect_signal(task_details, 'loadproject', self.showProject) + urwid.connect_signal(task_details, 'updatedescription', self.updateDetails) + urwid.connect_signal(task_details, 'updatetask', self.updateTask) + def handleInput(self, key): if key in ('q', 'Q'): raise urwid.ExitMainLoop() diff --git a/ui.py b/ui.py index 376171d..6346129 100644 --- a/ui.py +++ b/ui.py @@ -10,6 +10,7 @@ palette = [ ('selected', 'standout', ''), ('selected workspace', 'standout,bold', ''), ('header', 'bold,light green', ''), + ('secondary', 'light gray', ''), ('task', 'light green', ''), ('section', 'white', 'dark green'), ('workspace', 'white', 'dark blue'), @@ -193,13 +194,40 @@ class TaskEdit(urwid.Edit): class CommentEdit(urwid.Edit): def __init__(self, task): self.task = task - super(CommentEdit, self).__init__('Add a comment:\n') + super(CommentEdit, self).__init__(('secondary', 'Add a comment:\n')) def keypress(self, size, key): if key != 'enter': return super(CommentEdit, self).keypress(size, key) urwid.emit_signal(self, 'comment', self.task['id'], self.edit_text) +class TaskNameEdit(urwid.Edit): + def __init__(self, task): + self.task = task + super(TaskNameEdit, self).__init__(('secondary', + '#' + str(task['id']) + " "), + task['name']) + + def keypress(self, size, key): + if key in ('enter', 'esc', 'up', 'down'): + if (self.edit_text != self.task['name']): + urwid.emit_signal(self, 'updatetask', self.task['id'], + self.edit_text) + return super(TaskNameEdit, self).keypress(size, key) + +class DescriptionEdit(urwid.Edit): + def __init__(self, task): + self.task = task + super(DescriptionEdit, self).__init__(('secondary', 'Description:\n'), + task['notes'], + multiline=True) + + def keypress(self, size, key): + if key != 'esc': + return super(DescriptionEdit, self).keypress(size, key) + urwid.emit_signal(self, 'updatedescription', self.task['id'], + self.edit_text) + class TaskDetails(urwid.Pile): def __init__(self, task, stories): self.task = task @@ -208,23 +236,30 @@ class TaskDetails(urwid.Pile): comment_edit = CommentEdit(task) urwid.connect_signal(comment_edit, 'comment', self.comment) + description_edit = DescriptionEdit(task) + urwid.connect_signal(description_edit, 'updatedescription', + self.updateDescription) + + task_name_edit = TaskNameEdit(task) + urwid.connect_signal(task_name_edit, 'updatetask', self.updateTask) + projects = [('pack', ProjectIcon(project, self.loadProject)) for project in task['projects']] if task['assignee']: assignee = urwid.Text('Assigned to: ' + task['assignee']['name']) else: - assignee = urwid.Text('(not assigned)') + assignee = urwid.Text(('secondary', '(not assigned)')) body = projects + \ [ ('pack', urwid.Divider('=')), - ('pack', urwid.Text(('header', task['name'] + \ - " #" + str(task['id'])))), + ('pack', task_name_edit), ('pack', assignee), ('pack', urwid.Divider('-')), - ('pack', urwid.Text(task['notes'])), + ('pack', description_edit), + ('pack', urwid.Divider('-')), ] + \ [('pack', urwid.Text('[' + story['created_by']['name'] + '] ' + \ story['text'])) for story in stories] + \ @@ -237,5 +272,11 @@ class TaskDetails(urwid.Pile): def comment(self, task_id, comment): urwid.emit_signal(self, 'comment', task_id, comment) + def updateDescription(self, task_id, description): + urwid.emit_signal(self, 'updatedescription', task_id, description) + + def updateTask(self, task_id, name): + urwid.emit_signal(self, 'updatetask', task_id, name) + def loadProject(self, project_id): urwid.emit_signal(self, 'loadproject', project_id)