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