From 80ceab3620cc09b10612991ac982ea42745c2a07 Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 10 May 2020 15:10:13 +0200 Subject: Allows decimals in durations --- src/gui/tasks/duration.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/gui/tasks/duration.py b/src/gui/tasks/duration.py index d1b7106..e863914 100644 --- a/src/gui/tasks/duration.py +++ b/src/gui/tasks/duration.py @@ -4,27 +4,35 @@ import math def format(minutes: int): if minutes >= 60 * 24: - return '' + str(math.floor(minutes / 60 / 24)) + 'd' + return '' + format_decimal(minutes / 60 / 24) + 'd' elif minutes >= 60: - return '' + str(math.floor(minutes / 60)) + 'h' + 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+)([mhd])$', duration.strip()) + result = re.match('^(\d+)(\.(\d+))?([mhd])$', duration.strip()) if result: n = int(result.group(1)) - unit = result.group(2) + 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 n + return math.floor(num) elif unit == 'h': - return n * 60 + return math.floor(num * 60) elif unit == 'd': - return n * 60 * 24 + return math.floor(num * 60 * 24) else: return None else: -- cgit v1.2.3