33# Copyright (C) 2018-2024 GoSecure Inc.
44# Licensed under the GPLv3 or later.
55#
6+ import datetime
67import logging
78
89from PySide6 .QtCore import Qt , Signal
@@ -23,11 +24,14 @@ class ReplayBar(QWidget):
2324 seek = Signal (float )
2425 speedChanged = Signal (int )
2526
26- def __init__ (self , duration : float , parent : QWidget = None ):
27+ def __init__ (self , duration : float , referenceTime : int , parent : QWidget = None ):
2728 super ().__init__ (parent )
2829
2930 self .log = logging .getLogger (LOGGER_NAMES .PLAYER )
30-
31+
32+ # absolute capture starting point
33+ self .referenceTime = referenceTime
34+
3135 # pretty display capture duration
3236 self .duration = duration
3337 self .duration_hours = int (self .duration // 3600 )
@@ -52,6 +56,7 @@ def __init__(self, duration: float, parent: QWidget = None):
5256 self .timeSlider .valueChanged .connect (self .onSeek )
5357
5458 self .timeLabel = QLabel (self .formatTimeLabel (0 ))
59+ self .absoluteDateTimeLabel = QLabel (self .formatAbsoluteDateTimeLabel (0 ))
5560
5661 self .speedLabel = QLabel ("Speed: 1x" )
5762
@@ -74,6 +79,7 @@ def __init__(self, duration: float, parent: QWidget = None):
7479 horizontal .addWidget (self .button )
7580 horizontal .addWidget (self .timeSlider )
7681 horizontal .addWidget (self .timeLabel )
82+ horizontal .addWidget (self .absoluteDateTimeLabel )
7783 vertical .addLayout (horizontal )
7884
7985 self .setLayout (vertical )
@@ -101,8 +107,9 @@ def onSpeedChanged(self):
101107 def onTimeChanged (self , currentTime : float ):
102108 if currentTime >= self .duration :
103109 currentTime = self .duration
104-
110+
105111 self .timeLabel .setText (self .formatTimeLabel (currentTime ))
112+ self .absoluteDateTimeLabel .setText (self .formatAbsoluteDateTimeLabel (currentTime ))
106113
107114 def formatTimeLabel (self , current : float ) -> str :
108115 hours = int (current // 3600 )
@@ -114,3 +121,10 @@ def formatTimeLabel(self, current: float) -> str:
114121 hours , minutes , seconds , self .duration_pretty )
115122 else :
116123 return "{:02d}:{:02d} / {}" .format (minutes , seconds , self .duration_pretty )
124+
125+ def formatAbsoluteDateTimeLabel (self , current : int ) -> str :
126+ current = current * 1000
127+ epoch_time = (self .referenceTime + current )
128+ formatted_time = datetime .datetime .fromtimestamp (epoch_time / 1000 , tz = datetime .timezone .utc ).strftime ('%Y-%m-%d %H:%M:%S UTC' )
129+
130+ return formatted_time
0 commit comments