Got progress and track length indicators working.

This commit is contained in:
The Wobbler 2024-12-21 20:50:09 +01:00
parent 24d589b172
commit bd69ddbcde
4 changed files with 42 additions and 3 deletions

View file

@ -7,6 +7,10 @@ PROGRESS_UPDATE_INTERVAL = 1000 // PROGRESS_UPDATE_RATE
class GUICommunication:
"""
Class handling events that are a bit more complex.
"""
def __init__(self, app):
self.app = app
@ -34,11 +38,15 @@ class GUICommunication:
self.app.player.seek(self.track_control.track_progress_slider.value())
def on_track_start(self):
duration = self.app.player.playing_track.duration
self.track_control.track_progress_slider.setRange(
0,
self.app.player.playing_track.duration
duration
)
self.track_control.track_length_indicator.setText(self.app.utils.format_time(duration))
self.update_progress()
def update_progress(self):
@ -52,5 +60,7 @@ class GUICommunication:
progress = track_duration - remaining
self.track_control.progress_indicator.setText(self.app.utils.format_time(progress))
self.track_control.track_progress_slider.setValue(progress)

View file

@ -2,6 +2,7 @@
import sys
from PyQt6.QtWidgets import QApplication
from utils import Utils
from wobuzz.player.player import Player
from gui import GUI
from gui_communication import GUICommunication
@ -11,6 +12,8 @@ class Wobuzz:
def __init__(self):
self.qt_app = QApplication([])
self.utils = Utils(self)
self.player = Player(self, sys.argv[1:])
self.gui = GUI(self)
self.gui_communication = GUICommunication(self)

View file

@ -21,8 +21,8 @@ class TrackControl(QToolBar):
icon = QIcon.fromTheme(QIcon.ThemeIcon.MediaSkipForward)
self.next_button = self.addAction(icon, "Next")
self.current_position_indicator = QLabel("0:00")
self.addWidget(self.current_position_indicator)
self.progress_indicator = QLabel("0:00")
self.addWidget(self.progress_indicator)
self.track_progress_slider = QSlider(Qt.Orientation.Horizontal, self)
self.addWidget(self.track_progress_slider)

26
wobuzz/utils.py Normal file
View file

@ -0,0 +1,26 @@
#!/usr/bin/python3
class Utils:
def __init__(self, app):
self.app = app
print(self.format_time(4656))
def format_time(self, ms):
seconds = int(ms / 1000) % 60
minutes = int(ms / (1000 * 60)) % 60
hours = int(ms / (1000 * 60 * 60))
seconds_str, minutes_str, hours_str = ("",) * 3 # create empty strings
if hours > 0:
hours_str = f"{hours}:"
minutes_str = f"{minutes}:".zfill(2)
seconds_str = f"{seconds}".zfill(2)
output = hours_str + minutes_str + seconds_str
return output