mirror of
https://github.com/tbabej/taskwiki.git
synced 2025-08-19 15:53:07 +02:00
VimwikiTask: Do not keep reference to a Task object explicitly, always go through cache if the Task is saved
This commit is contained in:
parent
e5b505817a
commit
c1dfff89cd
1 changed files with 14 additions and 10 deletions
|
@ -27,9 +27,9 @@ class VimwikiTask(object):
|
||||||
"""
|
"""
|
||||||
self.cache = cache
|
self.cache = cache
|
||||||
self.tw = cache.tw
|
self.tw = cache.tw
|
||||||
self._task = None
|
|
||||||
self.data = dict(indent='', completed_mark=' ')
|
self.data = dict(indent='', completed_mark=' ')
|
||||||
self._buffer_data = None
|
self._buffer_data = None
|
||||||
|
self.__unsaved_task = None
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
return self.data.get(key)
|
return self.data.get(key)
|
||||||
|
@ -110,7 +110,7 @@ class VimwikiTask(object):
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_task(cls, cache, task):
|
def from_task(cls, cache, task):
|
||||||
self = cls(cache)
|
self = cls(cache)
|
||||||
self._task = task
|
self.data['uuid'] = task['uuid']
|
||||||
self.update_from_task()
|
self.update_from_task()
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
@ -118,23 +118,20 @@ class VimwikiTask(object):
|
||||||
@property
|
@property
|
||||||
def task(self):
|
def task(self):
|
||||||
# Return the corresponding task if alrady set
|
# Return the corresponding task if alrady set
|
||||||
if self._task is not None:
|
|
||||||
return self._task
|
|
||||||
|
|
||||||
# Else try to load it or create a new one
|
# Else try to load it or create a new one
|
||||||
if self['uuid']:
|
if self['uuid']:
|
||||||
try:
|
try:
|
||||||
self._task = self.cache[self['uuid']]
|
return self.cache[self['uuid']]
|
||||||
except Task.DoesNotExist:
|
except Task.DoesNotExist:
|
||||||
self._task = Task(self.tw)
|
self.__unsaved_task = Task(self.tw)
|
||||||
# If task cannot be loaded, we need to remove the UUID
|
# If task cannot be loaded, we need to remove the UUID
|
||||||
vim.command('echom "UUID not found: %s,'
|
vim.command('echom "UUID not found: %s,'
|
||||||
'will be replaced if saved"' % self['uuid'])
|
'will be replaced if saved"' % self['uuid'])
|
||||||
self['uuid'] = None
|
self['uuid'] = None
|
||||||
else:
|
else:
|
||||||
self._task = Task(self.tw)
|
self.__unsaved_task = Task(self.tw)
|
||||||
|
|
||||||
return self._task
|
return self.__unsaved_task
|
||||||
|
|
||||||
@task.setter
|
@task.setter
|
||||||
def task(self, task):
|
def task(self, task):
|
||||||
|
@ -146,7 +143,8 @@ class VimwikiTask(object):
|
||||||
self['uuid'],
|
self['uuid'],
|
||||||
task['uuid']))
|
task['uuid']))
|
||||||
|
|
||||||
self._task = task
|
|
||||||
|
self.data['uuid'] = task['uuid']
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def priority_from_tw_format(self):
|
def priority_from_tw_format(self):
|
||||||
|
@ -183,6 +181,12 @@ class VimwikiTask(object):
|
||||||
self.task['project'] = self['project']
|
self.task['project'] = self['project']
|
||||||
self.task.save()
|
self.task.save()
|
||||||
|
|
||||||
|
# If task was first time saved now, add it to the cache and remove
|
||||||
|
# the temporary reference
|
||||||
|
if self.__unsaved_task is not None:
|
||||||
|
self.cache[self.__unsaved_task['uuid']] = self.__unsaved_task
|
||||||
|
self.__unsaved_task = None
|
||||||
|
|
||||||
# If we saved the task, we need to update. Hooks may have chaned data.
|
# If we saved the task, we need to update. Hooks may have chaned data.
|
||||||
self.update_from_task()
|
self.update_from_task()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue