1+ import time
2+ from typing import Optional
13from PyQt6 .QtWidgets import QToolBar , QPushButton , QSlider
2- from PyQt6 .QtCore import Qt , QTimer , QThread , pyqtSignal
4+ from PyQt6 .QtCore import Qt , QThread , pyqtSignal
35from core_functions .Reciters import RecitersManager
46from utils .audio_player import AudioPlayer
57from utils .const import data_folder
68
79class 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
3431class 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