# Copyright 2024 (c) Anna Schumaker. """A custom StopWatch object for tracking play time.""" import datetime from gi.repository import GObject class StopWatch(GObject.GObject): """A StopWatch object.""" def __init__(self) -> None: """Initialize the StopWatch.""" super().__init__() self._saved = None self._started = None def elapsed_time(self) -> float: """Get the elapsed time (in seconds).""" total = datetime.timedelta() if self._saved is not None: total += self._saved if self._started is not None: total += datetime.datetime.now() - self._started return total.total_seconds() def reset(self) -> None: """Reset the StopWatch.""" self._saved = None self._started = None def start(self) -> None: """Start the StopWatch.""" self._started = datetime.datetime.now() def stop(self) -> None: """Stop the StopWatch.""" if self._started is not None: delta = datetime.datetime.now() - self._started if self._saved is None: self._saved = delta else: self._saved += delta self._started = None