emmental/emmental/audio/stopwatch.py

43 lines
1.2 KiB
Python

# 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