aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tasks/duration.py
blob: e863914c7ad782393a031d3475e02b89542b24a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import re
from typing import Optional
import math

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