From: Ed Page Date: Sat, 18 Apr 2009 21:07:41 +0000 (-0500) Subject: Bug fixes for file_backend, api changes, etc X-Git-Url: http://git.maemo.org/git/?p=doneit;a=commitdiff_plain;h=ccf52734bb6a0193b5f6e2cdf7d1c42a630e8d1d Bug fixes for file_backend, api changes, etc --- diff --git a/src/cache_backend.py b/src/cache_backend.py index 1bee9e8..bc0d6be 100644 --- a/src/cache_backend.py +++ b/src/cache_backend.py @@ -1,4 +1,9 @@ -class CacheBackend(object): +""" +@todo Write and eager cache which will then, combined with file_backend, will be the basis of sync +""" + + +class LazyCacheBackend(object): def __init__(self, backend): self._backend = backend @@ -15,8 +20,9 @@ class CacheBackend(object): self._backend.load() def add_project(self, name): - self._backend.add_project(name) + projId = self._backend.add_project(name) self._invalidate_projects() + return projId def set_project_name(self, projId, name): self._backend.set_project_name(projId, name) @@ -61,9 +67,10 @@ class CacheBackend(object): return self._items[projId][taskId] def add_task(self, projId, taskName): - self._backend.add_task(projId, taskName) + taskId = self._backend.add_task(projId, taskName) self._invalidate_projects_tasks(projId) self._invalidate_metaprojects_tasks() + return taskId def set_project(self, taskId, newProjId): self._backend.set_project(taskId, newProjId) @@ -89,8 +96,9 @@ class CacheBackend(object): self._invalidate_task(taskId) def add_note(self, taskId, noteTitle, noteBody): - self._backend.add_note(taskId, noteTitle, noteBody) + noteId = self._backend.add_note(taskId, noteTitle, noteBody) self._invalidate_task(taskId) + return noteId def update_note(self, noteId, noteTitle, noteBody): self._backend.update_note(noteId, noteTitle, noteBody) diff --git a/src/file_backend.py b/src/file_backend.py index 7ff2627..e846f98 100644 --- a/src/file_backend.py +++ b/src/file_backend.py @@ -37,6 +37,9 @@ class FileBackend(object): } assert projId not in self._projects, "How did uuid %r repeat?" % projId self._projects[projId] = projDetails + if projId not in self._items: + self._items[projId] = {} + return projId def set_project_name(self, projId, name): projDetails = self._projects[projId] @@ -44,7 +47,7 @@ class FileBackend(object): def set_project_visibility(self, projId, visibility): projDetails = self._projects[projId] - projDetails["isVisible"] = False + projDetails["isVisible"] = visibility def get_projects(self): return self._projects.itervalues() @@ -68,17 +71,15 @@ class FileBackend(object): return self._locations.itervalues() def get_tasks_with_details(self, projId): - return ( - taskDetails - for taskDetails in self._items - if taskDetails["projId"] == projId - ) + return self._items[projId] def get_task_details(self, taskId): - return self._items[taskId] + projId, partialTaskId = self._unpack_ids(taskId) + return self._items[projId][taskId] def add_task(self, projId, taskName): - taskId = uuid.uuid4().hex + partialTaskId = uuid.uuid4().hex + taskId = self._pack_ids(projId, partialTaskId) assert taskId not in self._items, "How did uuid %r repeat?" % taskId taskDetails = { "id": taskId, @@ -93,30 +94,37 @@ class FileBackend(object): "estimate": toolbox.Optional(), "notes": {}, } - self._items[taskId] = taskDetails + self._items[projId][taskId] = taskDetails + return taskId def set_project(self, taskId, newProjId): - taskDetails = self._items[taskId] + projId, partialTaskId = self._unpack_ids(taskId) + taskDetails = self._items[projId][taskId] taskDetails["projId"] = newProjId def set_name(self, taskId, name): - taskDetails = self._items[taskId] + projId, partialTaskId = self._unpack_ids(taskId) + taskDetails = self._items[projId][taskId] taskDetails["name"] = name def set_duedate(self, taskId, dueDate): - taskDetails = self._items[taskId] + projId, partialTaskId = self._unpack_ids(taskId) + taskDetails = self._items[projId][taskId] taskDetails["dueDate"] = dueDate def set_priority(self, taskId, priority): - taskDetails = self._items[taskId] + projId, partialTaskId = self._unpack_ids(taskId) + taskDetails = self._items[projId][taskId] taskDetails["priority"] = priority def complete_task(self, taskId): - taskDetails = self._items[taskId] + projId, partialTaskId = self._unpack_ids(taskId) + taskDetails = self._items[projId][taskId] taskDetails["isCompleted"] = True taskDetails["completionDate"] = toolbox.Optional(datetime.datetime.now()) def add_note(self, taskId, noteTitle, noteBody): + projId, partialTaskId = self._unpack_ids(taskId) partialNoteId = uuid.uuid4().hex noteId = self._pack_ids(taskId, partialNoteId) note = { @@ -124,17 +132,20 @@ class FileBackend(object): "title": noteTitle, "body": noteBody, } - assert noteId not in self._items[taskId]["notes"] - self._items[taskId]["notes"][noteId] = note + assert noteId not in self._items[projId][taskId]["notes"] + self._items[projId][taskId]["notes"][noteId] = note + return noteId def update_note(self, noteId, noteTitle, noteBody): taskId, partialNoteId = self._unpack_ids(noteId) - self._items[taskId]["notes"][noteId]["title"] = noteTitle - self._items[taskId]["notes"][noteId]["body"] = noteBody + projId, partialTaskId = self._unpack_ids(taskId) + self._items[projId][taskId]["notes"][noteId]["title"] = noteTitle + self._items[projId][taskId]["notes"][noteId]["body"] = noteBody def delete_note(self, noteId): taskId, partialNoteId = self._unpack_ids(noteId) - del self._items[taskId]["notes"][noteId] + projId, partialTaskId = self._unpack_ids(taskId) + del self._items[projId][taskId]["notes"][noteId] @staticmethod def _pack_ids(*ids): diff --git a/src/rtm_view.py b/src/rtm_view.py index 7fad71f..158e569 100644 --- a/src/rtm_view.py +++ b/src/rtm_view.py @@ -487,7 +487,7 @@ class GtkRtMilk(object): while True: try: self._manager = rtm_backend.RtmBackend(*credentials) - self._manager = cache_backend.CacheBackend(self._manager) + self._manager = cache_backend.LazyCacheBackend(self._manager) self._credentials = credentials return # Login succeeded except rtm_api.AuthStateMachine.NoData: diff --git a/support/builddeb.py b/support/builddeb.py index 77ff514..148f3c1 100755 --- a/support/builddeb.py +++ b/support/builddeb.py @@ -13,6 +13,7 @@ __changelog__ = '''\ 0.3.1 * Fixed bug where if you had no backend enabled, you couldn't enable a backend (Now hit "Connect" in the "File" menu) * Fixed some polish bugs with the popup calendar + * Caching added to RTM backend 0.3.0 * Initial Release