Skip to content

Commit faab5e7

Browse files
committed
- saveCurrentPlaylist: remove trailing commas
- saveCurrentPlaylist: adding report_success argument to suppress pop up window (if False) - adding update_bitrate function: it will update the bitrate in a station's buffering field if new bitrate is other than 128 and mplayer is installed and will silently save the playlist (if not in online browser)
1 parent 42de00b commit faab5e7

File tree

3 files changed

+67
-12
lines changed

3 files changed

+67
-12
lines changed

pyradio/config.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -936,19 +936,16 @@ def _format_playlist_row(self, a_row):
936936
''' Return a row formatted according to the current playlist version,
937937
eliminating any empty fields that are not part of the specified version. '''
938938
this_row = deepcopy(a_row)
939-
logger.error(f'{this_row}')
940-
logger.error(f'{self._playlist_version}')
941939
# Extract the 'image' from the icon dictionary if present
942940
if len(this_row) > Station.icon and 'image' in this_row[Station.icon]:
943941
this_row[Station.icon] = this_row[Station.icon]['image']
944942

945943
if len(this_row) > Station.buffering:
946-
if this_row[Station.buffering].startswith('0'):
944+
if this_row[Station.buffering] == '0@128':
947945
this_row[Station.buffering] = ''
948-
949-
ret = this_row[:self._playlist_version]
950-
logger.error(f'{ret = }')
951-
return this_row[:self._playlist_version]
946+
while this_row and this_row[-1] == '':
947+
this_row.pop()
948+
return this_row
952949

953950
def _set_playlist_elements(self, a_playlist, a_title=''):
954951
self.station_path = path.abspath(a_playlist)

pyradio/player.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,6 +1235,8 @@ def updateStatus(self, *args):
12351235
with self.status_update_lock:
12361236
if self.icy_audio_tokens[a_token] == 'icy-br':
12371237
self._icy_data[self.icy_audio_tokens[a_token]] = a_str[1].replace('kbit/s', '')
1238+
if self._icy_data['icy-br'] != '128':
1239+
self.update_bitrate(self._icy_data['icy-br'])
12381240
else:
12391241
self._icy_data[self.icy_audio_tokens[a_token]] = a_str[1]
12401242
if self.icy_audio_tokens[a_token] == 'codec':
@@ -1816,6 +1818,8 @@ def do_crash_detection(detect_if_player_exited, stop):
18161818
with self.status_update_lock:
18171819
if self.icy_audio_tokens[a_token] == 'icy-br':
18181820
self._icy_data[self.icy_audio_tokens[a_token]] = a_str[1].replace('kbit/s', '')
1821+
if self._icy_data['icy-br'] != '128':
1822+
self.update_bitrate(self._icy_data['icy-br'])
18191823
else:
18201824
self._icy_data[self.icy_audio_tokens[a_token]] = a_str[1]
18211825
if self.icy_audio_tokens[a_token] == 'codec':
@@ -2018,6 +2022,7 @@ def _get_mpv_metadata(self, *args):
20182022
# logger.info('DE a_data {}'.format(a_data))
20192023
if b'icy-br' in a_data:
20202024
# logger.info('DE check {}'.format(self._icy_data))
2025+
got_icy_br = False
20212026
if 'icy-br' not in self._icy_data:
20222027
for icy in ('icy-name', 'icy-url', 'icy-genre', 'icy-br'):
20232028
if stop():
@@ -2027,13 +2032,18 @@ def _get_mpv_metadata(self, *args):
20272032
enc = self._station_encoding
20282033
else:
20292034
enc = 'utf-8'
2035+
if icy == 'icy-br':
2036+
got_icy_br = True
20302037
if bytes_icy in a_data :
20312038
with self.status_update_lock:
20322039
try:
20332040
self._icy_data[icy] = a_data.split(bytes_icy + b'":"')[1].split(b'",')[0].split(b'"}')[0].decode(enc)
20342041
except UnicodeDecodeError:
20352042
pass
20362043
# logger.error('DE 0 {}'.format(self._icy_data))
2044+
if got_icy_br:
2045+
if self._icy_data['icy-br'] != '128':
2046+
self.update_bitrate(self._icy_data['icy-br'])
20372047
return True
20382048

20392049
elif b'request_id' in a_data and b'"error":"success"' in a_data:

pyradio/radio.py

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,6 +1053,51 @@ def restore_colors(self):
10531053
def player_instance(self):
10541054
return self.player
10551055

1056+
def _update_bitrate(self, bitrate):
1057+
if self.playing > -1:
1058+
if self._last_played_station == self.stations[self.playing]:
1059+
# make sure mplayer is installed
1060+
go_on = False
1061+
for a_player in self._cnf.AVAILABLE_PLAYERS:
1062+
if a_player.PLAYER_NAME == 'mplayer':
1063+
go_on = True
1064+
break
1065+
if not go_on:
1066+
if logger.isEnabledFor(logging.DEBUG):
1067+
logger.debug('mplayer not installed, aborting!')
1068+
return
1069+
br = self.stations[self.playing][Station.buffering]
1070+
new_br = br
1071+
if br:
1072+
sp = br.split('@')
1073+
if sp[-1] == '128':
1074+
sp[-1] = bitrate
1075+
new_br = '@'.join(sp)
1076+
if br != new_br:
1077+
self.stations[self.playing][Station.buffering] = new_br
1078+
if not self._cnf.browsing_station_service:
1079+
self._cnf.dirty_playlist = True
1080+
if logger.isEnabledFor(logging.INFO):
1081+
logger.info('saving current playlist: {} - "{}" -> "{}"'.format(
1082+
self._cnf.station_title, br, new_br)
1083+
)
1084+
self.saveCurrentPlaylist(report_success=False)
1085+
else:
1086+
if logger.isEnabledFor(logging.DEBUG):
1087+
logger.debug('online browser is active, not saving playlist!')
1088+
else:
1089+
if logger.isEnabledFor(logging.DEBUG):
1090+
logger.debug('we have the same bitrate, aborting!')
1091+
else:
1092+
if logger.isEnabledFor(logging.DEBUG):
1093+
logger.debug('current buffering value is empty, aborting!')
1094+
else:
1095+
if logger.isEnabledFor(logging.DEBUG):
1096+
logger.debug('last played station is different from currently playing station, aborting!')
1097+
else:
1098+
if logger.isEnabledFor(logging.DEBUG):
1099+
logger.debug('currently not in playback, aborting!')
1100+
10561101
def setup(self, stdscr):
10571102
if logger.isEnabledFor(logging.INFO):
10581103
if self.program_restart:
@@ -1166,6 +1211,7 @@ def setup(self, stdscr):
11661211
self.player.buffering_lock = self._buffering_lock
11671212
self.player.log = self.log
11681213
self.player.handle_old_referer = self._handle_old_referer
1214+
self.player.update_bitrate = self._update_bitrate
11691215
if self._cnf.check_playlist:
11701216
if logger.isEnabledFor(logging.INFO):
11711217
logger.info('******* registering check playlist callback functions')
@@ -2887,14 +2933,15 @@ def _ask_to_remove_station(self):
28872933
self.ws.operation_mode = self.ws.REMOVE_STATION_MODE
28882934
self._remove_station()
28892935

2890-
def saveCurrentPlaylist(self, stationFile=''):
2936+
def saveCurrentPlaylist(self, stationFile='', report_success=True):
28912937
ret = self._cnf.save_playlist_file(stationFile)
28922938
self.refreshBody()
28932939
if ret == 0 and not self._cnf.is_register:
2894-
self._show_notification_with_delay(
2895-
txt='___Playlist saved!!!___',
2896-
mode_to_set=self.ws.NORMAL_MODE,
2897-
callback_function=self.refreshBody)
2940+
if report_success:
2941+
self._show_notification_with_delay(
2942+
txt='___Playlist saved!!!___',
2943+
mode_to_set=self.ws.NORMAL_MODE,
2944+
callback_function=self.refreshBody)
28982945
elif ret == -1:
28992946
self._open_simple_message_by_key(
29002947
'M_PLAYLIST_SAVE_ERR_1',
@@ -6435,6 +6482,7 @@ def _activate_player(self, player_name):
64356482
self.player.params = self._cnf.params[self.player.PLAYER_NAME][:]
64366483
self.player.buffering_change_function = self._show_recording_status_in_header
64376484
self.player.buffering_lock = self._buffering_lock
6485+
self.player.update_bitrate = self._update_bitrate
64386486
self.player.log = self.log
64396487
self.player.handle_old_referer = self._handle_old_referer
64406488
if self._cnf.check_playlist:

0 commit comments

Comments
 (0)