43 lines
1.2 KiB
Python
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
|