Skip to content

Commit bc4a29c

Browse files
Optmize AudioPlayerThread in toolbar.
1 parent 8742698 commit bc4a29c

File tree

1 file changed

+17
-30
lines changed

1 file changed

+17
-30
lines changed

ui/widgets/toolbar.py

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,46 @@
1+
import time
2+
from typing import Optional
13
from PyQt6.QtWidgets import QToolBar, QPushButton, QSlider
2-
from PyQt6.QtCore import Qt, QTimer, QThread, pyqtSignal
4+
from PyQt6.QtCore import Qt, QThread, pyqtSignal
35
from core_functions.Reciters import RecitersManager
46
from utils.audio_player import AudioPlayer
57
from utils.const import data_folder
68

79
class AudioPlayerThread(QThread):
8-
audio_status_changed = pyqtSignal(str)
9-
10-
def __init__(self, player, reciters, parent=None):
10+
statusChanged = pyqtSignal()
11+
def __init__(self, player: AudioPlayer, parent: Optional[object]=None):
1112
super().__init__(parent)
1213
self.player = player
13-
self.reciters = reciters
1414
self.url = None
1515

1616
def run(self):
1717
if self.url:
1818
if self.player.source != self.url or self.player.is_stopped():
1919
self.player.load_audio(self.url)
2020
self.player.play()
21-
self.audio_status_changed.emit("إيقاف مؤقت")
22-
23-
def pause_audio(self):
24-
self.player.pause()
25-
self.audio_status_changed.emit("استماع الآية الحالية")
26-
27-
def stop_audio(self):
28-
self.player.stop()
29-
self.audio_status_changed.emit("استماع الآية الحالية")
21+
self.statusChanged.emit()
3022

31-
def set_audio_url(self, url):
23+
while self.player.is_playing():
24+
time.sleep(0.1)
25+
else:
26+
self.statusChanged.emit()
27+
28+
def set_audio_url(self, url: str):
3229
self.url = url
3330

3431
class AudioToolBar(QToolBar):
35-
def __init__(self, parent=None):
32+
def __init__(self, parent: Optional[object]=None):
3633
super().__init__(parent)
3734
self.parent = parent
3835
self.player = AudioPlayer()
3936
self.reciters = RecitersManager(data_folder / "quran" / "reciters.db")
4037

4138
self.play_pause_button = self.create_button("استماع الآية الحالية", self.toggle_play_pause)
4239
self.stop_button = self.create_button("إقاف", self.stop_audio)
43-
4440
self.volume_slider = self.create_slider(0, 100, 50, self.change_volume)
4541

46-
self.timer = QTimer(self)
47-
self.timer.timeout.connect(self.check_audio_status)
48-
self.timer.start(500)
49-
50-
self.audio_thread = AudioPlayerThread(self.player, self.reciters)
51-
self.audio_thread.audio_status_changed.connect(self.update_play_pause_button_text)
42+
self.audio_thread = AudioPlayerThread(self.player, self.parent)
43+
self.audio_thread.statusChanged.connect(self.update_play_pause_button_text)
5244

5345
def create_button(self, text, callback):
5446
button = QPushButton(text)
@@ -68,24 +60,19 @@ def create_slider(self, min_value, max_value, default_value, callback):
6860

6961
def toggle_play_pause(self):
7062
if self.player.is_playing():
71-
self.audio_thread.pause_audio()
63+
self.player.pause()
7264
else:
7365
ayah_info = self.parent.get_current_ayah_info()
7466
url = self.reciters.get_url(68, ayah_info[0], ayah_info[3])
7567
self.audio_thread.set_audio_url(url)
7668
self.audio_thread.start()
7769

78-
self.update_play_pause_button_text()
79-
8070
def stop_audio(self):
81-
self.audio_thread.stop_audio()
71+
self.player.stop()
8272

8373
def change_volume(self, value):
8474
self.player.set_volume(value / 100)
8575

86-
def check_audio_status(self):
87-
self.update_play_pause_button_text()
88-
8976
def update_play_pause_button_text(self):
9077
label = "إيقاف مؤقت" if self.player.is_playing() else "استماع الآية الحالية"
9178
self.play_pause_button.setText(label)

0 commit comments

Comments
 (0)