Skip to content

Commit

Permalink
Add support for STATUS property
Browse files Browse the repository at this point in the history
Some tasks don't have the COMPLETED property set. Instead, status is
used.
  • Loading branch information
untitaker committed Mar 31, 2015
1 parent e85bf6d commit 9b863d5
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 13 deletions.
13 changes: 10 additions & 3 deletions todoman/__init__.py
Expand Up @@ -80,9 +80,16 @@ def main():
else: # "list" or nothing.
# TODO: skip entries complete over two days ago
for index, todo in enumerate(database.todos):
if not todo.completed or \
todo.completed + timedelta(days=7) >= datetime.now(tzlocal()):
print("{:2d} {}".format(index + 1, formatter.compact(todo)))
try:
if not todo.is_completed or (
todo.completed_at and
todo.completed_at + timedelta(days=7) >=
datetime.now(tzlocal())
):
print("{:2d} {}"
.format(index + 1, formatter.compact(todo)))
except Exception as e:
print("Error while showing {}: {}".format(todo.filename, e))

if __name__ == "__main__":
main()
41 changes: 31 additions & 10 deletions todoman/model.py
Expand Up @@ -56,6 +56,30 @@ def _set_field(self, name, value, force=False):
logger.debug("Setting field %s to %s.", name, value)
self.todo.add(name, value)

@property
def status(self):
return self.todo.get('status', 'NEEDS-ACTION')

@status.setter
def status(self, value):
self._set_field('status', value)

@property
def is_completed(self):
return self.completed_at or self.status in ('CANCELLED', 'COMPLETED')

@is_completed.setter
def is_completed(self, val):
if val:
self.completed_at = self._normalize_datetime(datetime.now())
self.percent_complete = 100
self.status = 'COMPLETED'
else:
for name in ['completed', 'percent-complete']:
if name in self.todo:
del(self.todo[name])
self.status = 'NEEDS-ACTION'

@property
def summary(self):
return self.todo.get('summary', "")
Expand Down Expand Up @@ -95,14 +119,14 @@ def due(self, due):
self._set_field('due', due)

@property
def completed(self):
def completed_at(self):
if self.todo.get('completed', None) is None:
return None
else:
return self._normalize_datetime(self.todo.decoded('completed'))

@completed.setter
def completed(self, completed):
@completed_at.setter
def completed_at(self, completed):
self._set_field('completed', completed)

@property
Expand All @@ -125,14 +149,11 @@ def priority(self, priority):
def uid(self):
return self.todo.get('uid')

def complete(self):
self.completed = self._normalize_datetime(datetime.now())
self.percent_complete = 100
def undo(self): # XXX: Deprecate
self.is_completed = False

def undo(self):
for name in ['completed', 'percent-complete']:
if name in self.todo:
del(self.todo[name])
def complete(self): # XXX: Deprecate
self.is_completed = True

def _normalize_datetime(self, x):
'''
Expand Down

0 comments on commit 9b863d5

Please sign in to comment.