import urwid from threading import Thread from asana_service import AsanaService from ui.task_list import MyTasks, TaskList from ui.task_details import TaskDetails class Ui(object): nav_stack = [] def __init__(self, asana_service, update): self.asana_service = asana_service self.update = update def my_tasks(self): self.nav_stack.append(('mytasks', None)) def runInThread(): tasks = self.asana_service.get_my_tasks() self.update(MyTasks(tasks, self.task_details).component()) thread = Thread(target=runInThread()) thread.start() def task_details(self, id): self.nav_stack.append(('task', id)) def runInThread(): task = self.asana_service.get_task(id) stories = self.asana_service.get_stories(id) self.update(TaskDetails(task, stories, self.task_details, self.task_list, None, None, None).component()) thread = Thread(target=runInThread()) thread.start() def task_list(self, id): self.nav_stack.append(('project', id)) def runInThread(): project = self.asana_service.get_project(id) tasks = self.asana_service.get_tasks(id) self.update(TaskList(tasks, project.name(), self.task_details ).component()) thread = Thread(target=runInThread()) thread.run() def go_back(self): if len(self.nav_stack) < 2: return self.nav_stack.pop() (location, id) = self.nav_stack.pop() if location == 'mytasks': self.my_tasks() elif location == 'task': self.task_details(id) elif location == 'project': self.task_list(id) def loading(): return urwid.Overlay( urwid.BigText('Loading...', urwid.font.HalfBlock5x4Font()), urwid.SolidFill('#'), 'center', 'pack', 'middle', 'pack' )