aboutsummaryrefslogtreecommitdiff
path: root/todo/gui/tasks/duration.py
diff options
context:
space:
mode:
Diffstat (limited to 'todo/gui/tasks/duration.py')
-rw-r--r--todo/gui/tasks/duration.py50
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