from PyQt5 import QtGui from typing import Optional import math import re import 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 gui.color.short_duration elif minutes < 60: return gui.color.medium_duration else: return gui.color.long_duration