X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Frtm_view.py;h=6a0ab368b0446c0ef08aa1ec147c9fdc30721869;hb=f06f9fe45f3e4c2c800cc0db1ec8873fa6fa4667;hp=22364f1cc97a078b2c0d8b48a6275568ab80a0f5;hpb=9c052e10a8ea601905c4476dd9e452e757f1341f;p=doneit diff --git a/src/rtm_view.py b/src/rtm_view.py index 22364f1..6a0ab36 100644 --- a/src/rtm_view.py +++ b/src/rtm_view.py @@ -129,7 +129,8 @@ class ItemListView(object): LINK_IDX = 6 NOTES_IDX = 7 - def __init__(self, widgetTree): + def __init__(self, widgetTree, errorDisplay): + self._errorDisplay = errorDisplay self._manager = None self._projId = None self._showCompleted = False @@ -195,7 +196,10 @@ class ItemListView(object): self._todoItemTree.append_column(self._dueColumn) self._todoItemTree.append_column(self._linkColumn) self._todoItemTree.append_column(self._notesColumn) - self.reset_task_list(self._projId) + try: + self.reset_task_list(self._projId) + except StandardError, e: + self._errorDisplay.push_exception() self._todoItemTree.set_headers_visible(False) self._nameColumn.set_expand(True) @@ -260,39 +264,46 @@ class ItemListView(object): self._todoItemTree.set_model(self._itemList) def _on_item_select(self, treeView, path, viewColumn): - # @todo See if there is a way to use the new gtk_toolbox.ContextHandler - taskId = self._itemList[path[0]][self.ID_IDX] - - if viewColumn is self._priorityColumn: - pass - elif viewColumn is self._nameColumn: - self._editDialog.enable(self._manager) - try: - self._editDialog.request_task(self._manager, taskId) - finally: - self._editDialog.disable() - self.reset_task_list(self._projId) - elif viewColumn is self._dueColumn: - self._editDialog.enable(self._manager) - try: - self._editDialog.request_task(self._manager, taskId) - finally: - self._editDialog.disable() - self.reset_task_list(self._projId) - elif viewColumn is self._linkColumn: - webbrowser.open(self._manager.get_task_details(taskId)["url"]) - elif viewColumn is self._notesColumn: - pass + try: + # @todo See if there is a way to use the new gtk_toolbox.ContextHandler + taskId = self._itemList[path[0]][self.ID_IDX] + + if viewColumn is self._priorityColumn: + pass + elif viewColumn is self._nameColumn: + self._editDialog.enable(self._manager) + try: + self._editDialog.request_task(self._manager, taskId) + finally: + self._editDialog.disable() + self.reset_task_list(self._projId) + elif viewColumn is self._dueColumn: + self._editDialog.enable(self._manager) + try: + self._editDialog.request_task(self._manager, taskId) + finally: + self._editDialog.disable() + self.reset_task_list(self._projId) + elif viewColumn is self._linkColumn: + webbrowser.open(self._manager.get_task_details(taskId)["url"]) + elif viewColumn is self._notesColumn: + pass + except StandardError, e: + self._errorDisplay.push_exception() def _on_completion_change(self, cell, path): - taskId = self._itemList[path[0]][self.ID_IDX] - self._manager.complete_task(taskId) - self.reset_task_list(self._projId) + try: + taskId = self._itemList[path[0]][self.ID_IDX] + self._manager.complete_task(taskId) + self.reset_task_list(self._projId) + except StandardError, e: + self._errorDisplay.push_exception() class QuickAddView(object): - def __init__(self, widgetTree, addSink): + def __init__(self, widgetTree, errorDisplay, addSink): + self._errorDisplay = errorDisplay self._manager = None self._projId = None self._addSink = addSink @@ -338,53 +349,72 @@ class QuickAddView(object): self._addTaskButton.set_sensitive(not isMeta) def _on_add(self, *args): - name = self._taskNameEntry.get_text() + try: + name = self._taskNameEntry.get_text() - projId = self._projId - taskId = self._manager.add_task(projId, name) + projId = self._projId + taskId = self._manager.add_task(projId, name) - self._taskNameEntry.set_text("") - self._addSink.send((projId, taskId)) + self._taskNameEntry.set_text("") + self._addSink.send((projId, taskId)) + except StandardError, e: + self._errorDisplay.push_exception() def _on_add_edit(self, *args): - name = self._taskNameEntry.get_text() + try: + name = self._taskNameEntry.get_text() - projId = self._projId - taskId = self._manager.add_task(projId, name) + projId = self._projId + taskId = self._manager.add_task(projId, name) - try: - self._editDialog.enable(self._manager) try: - self._editDialog.request_task(self._manager, taskId) + self._editDialog.enable(self._manager) + try: + self._editDialog.request_task(self._manager, taskId) + finally: + self._editDialog.disable() finally: - self._editDialog.disable() - finally: - self._taskNameEntry.set_text("") - self._addSink.send((projId, taskId)) + self._taskNameEntry.set_text("") + self._addSink.send((projId, taskId)) + except StandardError, e: + self._errorDisplay.push_exception() def _on_add_pressed(self, widget): - self._addToEditTimerId = gobject.timeout_add(1000, self._on_add_edit) + try: + self._addToEditTimerId = gobject.timeout_add(1000, self._on_add_edit) + except StandardError, e: + self._errorDisplay.push_exception() def _on_add_released(self, widget): - if self._addToEditTimerId is not None: - gobject.source_remove(self._addToEditTimerId) - self._addToEditTimerId = None + try: + if self._addToEditTimerId is not None: + gobject.source_remove(self._addToEditTimerId) + self._addToEditTimerId = None + except StandardError, e: + self._errorDisplay.push_exception() def _on_paste(self, *args): - entry = self._taskNameEntry.get_text() - entry += self._clipboard.wait_for_text() - self._taskNameEntry.set_text(entry) + try: + entry = self._taskNameEntry.get_text() + entry += self._clipboard.wait_for_text() + self._taskNameEntry.set_text(entry) + except StandardError, e: + self._errorDisplay.push_exception() def _on_clear(self, *args): - self._taskNameEntry.set_text("") + try: + self._taskNameEntry.set_text("") + except StandardError, e: + self._errorDisplay.push_exception() class GtkRtMilk(object): - def __init__(self, widgetTree): + def __init__(self, widgetTree, errorDisplay): """ @note Thread agnostic """ + self._errorDisplay = errorDisplay self._manager = None self._credentials = "", "", "" @@ -392,9 +422,9 @@ class GtkRtMilk(object): self._projectsCombo = widgetTree.get_widget("projectsCombo") self._onListActivateId = 0 - self._itemView = ItemListView(widgetTree) + self._itemView = ItemListView(widgetTree, self._errorDisplay) addSink = coroutines.func_sink(lambda eventData: self._itemView.reset_task_list(eventData[0])) - self._addView = QuickAddView(widgetTree, addSink) + self._addView = QuickAddView(widgetTree, self._errorDisplay, addSink) self._credentialsDialog = gtk_toolbox.LoginWindow(widgetTree) @staticmethod @@ -492,7 +522,7 @@ class GtkRtMilk(object): def _reset_task_list(self): projectName = self._get_project() - projId = self._manager.lookup_project(projectName) + projId = self._manager.lookup_project(projectName)["id"] self._addView.reset_task_list(projId) self._itemView.reset_task_list(projId) @@ -501,4 +531,7 @@ class GtkRtMilk(object): return currentProjectName def _on_list_activate(self, *args): - self._reset_task_list() + try: + self._reset_task_list() + except StandardError, e: + self._errorDisplay.push_exception()