diff options
Diffstat (limited to 'todo/gui/tasks/duration.py')
-rw-r--r-- | todo/gui/tasks/duration.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/todo/gui/tasks/duration.py b/todo/gui/tasks/duration.py new file mode 100644 index 0000000..81db661 --- /dev/null +++ b/todo/gui/tasks/duration.py @@ -0,0 +1,50 @@ +from PyQt5 import QtGui +from typing import Optional +import math +import re + +import todo.gui.color + +def format(minutes: int): + if minutes >= 60 * 24: + return "" + format_decimal(minutes / 60 / 24) + "d" + elif minutes >= 60: + return "" + format_decimal(minutes / 60) + "h" + elif minutes > 0: + return "" + str(minutes) + "m" + else: + return "" + +def format_decimal(d: float) -> str: + return "{0:.2g}".format(d) + +def parse(duration: str) -> Optional[int]: + duration = duration.strip() + if duration: + result = re.match("^(\d+)(\.(\d+))?([mhd])$", duration.strip()) + if result: + n = int(result.group(1)) + if result.group(3): + d = int(result.group(3)) * pow(10, -1 * len(result.group(3))) + else: + d = 0 + num = n + d + unit = result.group(4) + if unit == "m": + return math.floor(num) + elif unit == "h": + return math.floor(num * 60) + elif unit == "d": + return math.floor(num * 60 * 24) + else: + return None + else: + return 0 + +def color(minutes: int): + if minutes <= 15: + return todo.gui.color.short_duration + elif minutes < 60: + return todo.gui.color.medium_duration + else: + return todo.gui.color.long_duration |