@@ -444,6 +444,14 @@ def _do_save_volume(self, config_string):
444
444
self .PROFILE_FROM_USER = True
445
445
return ret_string
446
446
447
+ def _stop_delay_thread (self ):
448
+ if self .delay_thread is not None :
449
+ try :
450
+ self .delay_thread .cancel ()
451
+ except :
452
+ pass
453
+ self .delay_thread = None
454
+
447
455
def _is_in_playback_token (self , a_string ):
448
456
for a_token in self ._playback_token_tuple :
449
457
if a_token in a_string :
@@ -511,6 +519,7 @@ def updateStatus(self, *args):
511
519
new_input = self .oldUserInput ['Title' ]
512
520
self .outputStream .write (msg = new_input , counter = '' )
513
521
self .playback_is_on = True
522
+ self ._stop_delay_thread ()
514
523
if 'AO: [' in subsystemOut :
515
524
with self .status_update_lock :
516
525
if version_info > (3 , 0 ):
@@ -535,14 +544,23 @@ def updateStatus(self, *args):
535
544
#logger.error("***** icy_entry")
536
545
title = self ._format_title_string (subsystemOut )
537
546
ok_to_display = False
547
+ if not self .playback_is_on :
548
+ if logger .isEnabledFor (logging .INFO ):
549
+ logger .info ('*** updateStatus(): Start of playback detected (Icy-Title received) ***' )
550
+ self .playback_is_on = True
538
551
if title [len (self .icy_title_prefix ):].strip ():
552
+ #self._stop_delay_thread()
553
+ #logger.error("***** updating title")
539
554
self .oldUserInput ['Title' ] = title
540
555
# make sure title will not pop-up while Volume value is on
541
556
if self .delay_thread is None :
542
557
ok_to_display = True
543
558
if ok_to_display and self .playback_is_on :
544
559
string_to_show = self .title_prefix + title
545
560
self .outputStream .write (msg = string_to_show , counter = '' )
561
+ else :
562
+ if logger .isEnabledFor (logging .debug ):
563
+ logger .debug ('***** Title change inhibited: ok_to_display = {0}, playbabk_is_on = {1}' .format (ok_to_display , self .playback_is_on ))
546
564
else :
547
565
ok_to_display = True
548
566
if (logger .isEnabledFor (logging .INFO )):
@@ -560,10 +578,14 @@ def updateStatus(self, *args):
560
578
else :
561
579
for a_token in self .icy_audio_tokens .keys ():
562
580
if a_token in subsystemOut :
563
- logger .error (' DE token = "{}"' .format (a_token ))
564
- logger .error (' DE icy_audio_tokens[a_token] = "{}"' .format (self .icy_audio_tokens [a_token ]))
581
+ if not self .playback_is_on :
582
+ if logger .isEnabledFor (logging .INFO ):
583
+ logger .info ('*** updateStatus(): Start of playback detected (Icy audio token received) ***' )
584
+ self .playback_is_on = True
585
+ #logger.error(' DE token = "{}"'.format(a_token))
586
+ #logger.error(' DE icy_audio_tokens[a_token] = "{}"'.format(self.icy_audio_tokens[a_token]))
565
587
a_str = subsystemOut .split (a_token )
566
- logger .error (' DE str = "{}"' .format (a_str ))
588
+ # logger.error(' DE str = "{}"'.format(a_str))
567
589
with self .status_update_lock :
568
590
if self .icy_audio_tokens [a_token ] == 'icy-br' :
569
591
self ._icy_data [self .icy_audio_tokens [a_token ]] = a_str [1 ].replace ('kbit/s' , '' )
@@ -742,7 +764,7 @@ def updateWinVLCStatus(self, *args):
742
764
except :
743
765
pass
744
766
if (not self .playback_is_on ) and (logger .isEnabledFor (logging .INFO )):
745
- logger .info ('*** updateStatus (): Start of playback detected ***' )
767
+ logger .info ('*** updateWinVLCStatus (): Start of playback detected ***' )
746
768
#if self.outputStream.last_written_string.startswith('Connecting to'):
747
769
if self .oldUserInput ['Title' ] == '' :
748
770
new_input = 'Playing: "{}"' .format (self .name )
@@ -761,6 +783,10 @@ def updateWinVLCStatus(self, *args):
761
783
elif self ._is_icy_entry (subsystemOut ):
762
784
if stop ():
763
785
break
786
+ if not self .playback_is_on :
787
+ if logger .isEnabledFor (logging .INFO ):
788
+ logger .info ('*** updateWinVLCStatus(): Start of playback detected (Icy-Title received) ***' )
789
+ self .playback_is_on = True
764
790
765
791
#logger.error("***** icy_entry")
766
792
title = self ._format_title_string (subsystemOut )
@@ -792,10 +818,14 @@ def updateWinVLCStatus(self, *args):
792
818
break
793
819
for a_token in self .icy_audio_tokens .keys ():
794
820
if a_token in subsystemOut :
795
- logger .error (' DE token = "{}"' .format (a_token ))
796
- logger .error (' DE icy_audio_tokens[a_token] = "{}"' .format (self .icy_audio_tokens [a_token ]))
821
+ if not self .playback_is_on :
822
+ if logger .isEnabledFor (logging .INFO ):
823
+ logger .info ('*** updateWinVLCStatus(): Start of playback detected (Icy audio token received) ***' )
824
+ self .playback_is_on = True
825
+ #logger.error(' DE token = "{}"'.format(a_token))
826
+ #logger.error(' DE icy_audio_tokens[a_token] = "{}"'.format(self.icy_audio_tokens[a_token]))
797
827
a_str = subsystemOut .split (a_token )
798
- logger .error (' DE str = "{}"' .format (a_str ))
828
+ # logger.error(' DE str = "{}"'.format(a_str))
799
829
with self .status_update_lock :
800
830
if self .icy_audio_tokens [a_token ] == 'icy-br' :
801
831
self ._icy_data [self .icy_audio_tokens [a_token ]] = a_str [1 ].replace ('kbit/s' , '' )
@@ -988,23 +1018,24 @@ def _set_mpv_playback_is_on(self, stop):
988
1018
989
1019
def threadUpdateTitle (self , delay = 1 ):
990
1020
if self .oldUserInput ['Title' ] != '' :
991
- try :
992
- self .delay_thread .cancel ()
993
- except :
994
- pass
1021
+ self ._stop_delay_thread ()
995
1022
try :
996
1023
self .delay_thread = threading .Timer (delay ,
997
1024
self .updateTitle ,
998
1025
[ self .outputStream ,
999
- self . title_prefix + self . _format_title_string ( self . oldUserInput [ 'Title' ]) ]
1026
+ None ]
1000
1027
)
1001
1028
self .delay_thread .start ()
1002
1029
except :
1003
1030
if (logger .isEnabledFor (logging .DEBUG )):
1004
1031
logger .debug ("delay thread start failed" )
1005
1032
1006
1033
def updateTitle (self , * arg , ** karg ):
1007
- arg [0 ].write (msg = arg [1 ])
1034
+ self ._stop_delay_thread ()
1035
+ if arg [1 ]:
1036
+ arg [0 ].write (msg = arg [1 ])
1037
+ else :
1038
+ arg [0 ].write (msg = self .title_prefix + self ._format_title_string (self .oldUserInput ['Title' ]))
1008
1039
1009
1040
def _is_icy_entry (self , a_string ):
1010
1041
#logger.error("**** a_string = {}".format(a_string))
@@ -1044,6 +1075,7 @@ def play(self, name, streamUrl, encoding = ''):
1044
1075
self .show_volume = True
1045
1076
self .title_prefix = ''
1046
1077
self .playback_is_on = False
1078
+ self .delay_thread = None
1047
1079
self .outputStream .write (msg = 'Station: "{}" - Opening connection...' .format (name ), counter = '' )
1048
1080
if logger .isEnabledFor (logging .INFO ):
1049
1081
logger .info ('Selected Station: "{}"' .format (name ))
@@ -1130,11 +1162,7 @@ def close(self):
1130
1162
self .connection_timeout_thread .join ()
1131
1163
except :
1132
1164
pass
1133
- if self .delay_thread is not None :
1134
- try :
1135
- self .delay_thread .cancel ()
1136
- except :
1137
- pass
1165
+ self ._stop_delay_thread ()
1138
1166
if self .process is not None :
1139
1167
if platform .startswith ('win' ):
1140
1168
try :
@@ -1165,11 +1193,7 @@ def toggleMute(self):
1165
1193
self .muted = not self .muted
1166
1194
self ._mute ()
1167
1195
if self .muted :
1168
- if self .delay_thread is not None :
1169
- try :
1170
- self .delay_thread .cancel ()
1171
- except :
1172
- pass
1196
+ self ._stop_delay_thread ()
1173
1197
self .title_prefix = '[Muted] '
1174
1198
self .show_volume = False
1175
1199
else :
@@ -1691,7 +1715,6 @@ class VlcPlayer(Player):
1691
1715
WIN = False
1692
1716
if platform .startswith ('win' ):
1693
1717
WIN = True
1694
- logger .error ('DE WIN = {}' .format (WIN ))
1695
1718
PLAYER_CMD = "cvlc"
1696
1719
if WIN :
1697
1720
# TODO: search and finde vlc.exe
@@ -1708,8 +1731,6 @@ class VlcPlayer(Player):
1708
1731
else :
1709
1732
executable_found = False
1710
1733
1711
- print ('executable: {}' .format (REAL_PLAYER_CMD ))
1712
-
1713
1734
if executable_found :
1714
1735
""" items of this tupple are considered icy-title
1715
1736
and get displayed after first icy-title is received """
@@ -1734,7 +1755,7 @@ class VlcPlayer(Player):
1734
1755
max_volume = 512
1735
1756
1736
1757
""" When found in station transmission, playback is on """
1737
- _playback_token_tuple = ('main audio ' , 'Content-Type: audio' )
1758
+ _playback_token_tuple = ('main audio ' , 'Content-Type: audio' , ' Segment #' )
1738
1759
1739
1760
""" Windows only variables """
1740
1761
_vlc_stdout_log_file = ''
@@ -1951,7 +1972,6 @@ def _req(self, msg, ret_function=None, full=True):
1951
1972
try :
1952
1973
while (True ):
1953
1974
received = (sock .recv (4096 )).decode ()
1954
- #print('received: "{}"'.format(received))
1955
1975
response = response + received
1956
1976
if full :
1957
1977
if response .count ("\r \n " ) > 1 :
@@ -1963,7 +1983,6 @@ def _req(self, msg, ret_function=None, full=True):
1963
1983
break
1964
1984
except :
1965
1985
response = response + received
1966
- pass
1967
1986
sock .close ()
1968
1987
except :
1969
1988
pass
0 commit comments