diff --git a/dwtt b/dwtt index ce63424..cd583b5 100755 --- a/dwtt +++ b/dwtt @@ -54,40 +54,49 @@ def main(argv): break cmd = Command(cmdline) res = processCommand(cmd, ds) - if type(res).__name__ == 'bool': - if not res: - break - elif type(res).__name__ == 'str': - # todo: move to GUI - print "Error:", res - else: - print "Unknown return type '%s'" % type(res).__name__ + if not res.keepwindow: + break + +class Result: + def __init__(self): + self.keepwindow = False + self.error = '' + self.message = '' + self.formatted = '' def processStart(cmd, store): + res = Result() processOut(cmd, store) task = store.getTaskByShortName(cmd.argstr) if task is None: parent = store.getParentTaskByShortName(cmd.argstr) if parent is None: - return 'Could not find task "%s"' % \ + res.error = 'Could not find task "%s"' % \ (':'.join(cmd.argstr.split(':')[:-1])) + res.keepwindow = True + return res taskid = store.createTask(cmd.argstr.split(':')[-1], '', parent.taskid) else: taskid = task.taskid store.updateCurrentTask(TaskRef(taskid, cmd.time)) - return False + return res def processOut(cmd, store): + res = Result() ct = store.getCurrentTask() - if ct is not None: - seconds = (cmd.time - ct.time).seconds - if seconds > 0: - store.addTime(cmd.time.strftime('%Y-%m-%d'), ct.taskid, seconds) - store.clearCurrentTask() - return False - return 'No current task defined' + if ct is None: + res.error = 'No current task defined' + res.keepwindow = True + return res + seconds = (cmd.time - ct.time).seconds + if seconds > 0: + store.addTime(cmd.time.strftime('%Y-%m-%d'), ct.taskid, seconds) + store.clearCurrentTask() + return res def processTask(cmd, store): + res = Result() + res.keepwindow = True parts = cmd.argstr.split(',', 1) fullname = parts[0].strip() longname = '' if len(parts) < 2 else parts[1].strip() @@ -96,17 +105,22 @@ def processTask(cmd, store): if task is not None: # the task already exists, update it store.updateTask(task.taskid, nameparts[-1], longname) - return False + res.message = 'Task "%s" updated' % fullname + return res if len(nameparts) > 1: parenttask = store.getParentTaskByShortName(fullname) if parenttask is None: - return 'Parent task not found' + res.error = 'Parent task of "%s" not found' % fullname + return res store.createTask(nameparts[-1].strip(), longname, parenttask.taskid) else: store.createTask(nameparts[-1].strip(), longname, None) - return False + res.message = 'Task "%s" created' % fullname + return res def processStatus(cmd, store): + res = Result() + res.keepwindow = True now = datetime.now() monday = now - timedelta(now.weekday()) sunday = monday + timedelta(6) @@ -119,7 +133,7 @@ def processStatus(cmd, store): print store.getTaskPath(task) + ':' hours = round(float(ent.seconds) / (60 * 60), 1) print ' %s: %0.1f' % (ent.date, hours) - return False + return res COMMAND_HANDLERS = { 'start' : processStart, @@ -132,8 +146,10 @@ COMMAND_HANDLERS = { def processCommand(cmd, store): if cmd.command in COMMAND_HANDLERS: return COMMAND_HANDLERS[cmd.command](cmd, store) - # todo: error on command not found - return False + res = Result() + res.error = 'Unknown command: %s' % cmd.command + res.keepwindow = True + return res if __name__ == "__main__": main(sys.argv)