From 3ec7f5c18a8817bc949569411a711ff58f1661f2 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Thu, 16 May 2024 16:58:07 +0200 Subject: [PATCH] Improve duration display --- agenda/types.py | 20 ++++++++++++++++++++ templates/index.html | 5 +++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/agenda/types.py b/agenda/types.py index b1bca73..86ea7f9 100644 --- a/agenda/types.py +++ b/agenda/types.py @@ -268,6 +268,26 @@ class Event: else None ) + def display_duration(self) -> str | None: + """Duration for display.""" + if self.end_as_date != self.as_date or not self.has_time: + return None + + assert isinstance(self.date, datetime.datetime) + assert isinstance(self.end_date, datetime.datetime) + + secs: int = int((self.end_date - self.date).total_seconds()) + + hours: int = secs // 3600 + mins: int = (secs % 3600) // 60 + + if mins == 0: + return f"{hours:d}h" + if hours == 0: + return f"{mins:d} mins" + + return f"{hours:d}h {mins:02d} mins" + def delta_days(self, today: datetime.date) -> str: """Return number of days from today as a string.""" delta = (self.as_date - today).days diff --git a/templates/index.html b/templates/index.html index d930606..9b719a3 100644 --- a/templates/index.html +++ b/templates/index.html @@ -174,9 +174,10 @@
{% if event.end_date %} - {% if event.end_as_date == event.as_date and event.has_time %} + {% set duration = event.display_duration() %} + {% if duration %} end: {{event.end_date.strftime("%H:%M") }} - (duration: {{event.end_date - event.date}}) + (duration: {{duration}}) {% elif event.end_date != event.date %} {{event.end_date}} {% endif %}