@@ -2273,40 +2273,52 @@ def keypress(self, char):
22732273
22742274
22752275class PyRadioBuffering ():
2276+ _bitrate_manager = None
22762277
22772278 _text = 'Buffer size in seconds: '
22782279 _text128 = 'Buffer in KB @128kbps: '
22792280 _text192 = ' @192kbps: '
22802281 _text320 = ' @320kbps: '
22812282 _help_text = ' Help '
22822283 _note_text = ' Note '
2283- _max_lines = 16
2284+ _max_lines = 12
22842285 _cache_data = None
22852286 _big_step = _min = 5
2286- _limit = 60
2287+ _max = 60
22872288
22882289 def __init__ (self ,
2290+ buffering ,
22892291 parent ,
2290- config ,
2291- player ,
22922292 global_functions = None ):
2293+ self ._buffering = buffering
2294+ self .buffering_value , self .bitrate_value = buffering .split ('@' )
2295+ if self .buffering_value != '0' :
2296+ try :
2297+ if not (5 <= int (self .buffering_value ) <= 60 ):
2298+ self .buffering_value = '0'
2299+ except ValueError :
2300+ self .buffering_value = '0'
2301+ self ._original_buffering_value = self .buffering_value
22932302 self ._parent = parent
2294- self ._cnf = config
2295- self ._player = player
22962303 self ._global_functions = global_functions
22972304 if self ._global_functions is None :
22982305 self ._global_functions = {}
22992306 self .recording = lambda : self ._player .recording
2300- self ._title = ' ' + M_STRINGS ['buffering_' ].replace (':' , '' )
2301- self ._cache_data = PlayerCache (
2302- player .PLAYER_NAME ,
2303- self ._cnf .state_dir ,
2304- lambda : self ._player .recording
2305- )
2306- if self ._cnf .buffering_data :
2307- self ._delay = self ._cache_data .delay
2307+ self ._title = ' ' + M_STRINGS ['station_buffering' ] + ' '
2308+
2309+ @property
2310+ def bitrate_value (self ):
2311+ return self ._bitrate_value
2312+ return self ._bitrate_manager .bitrate
2313+
2314+ @bitrate_value .setter
2315+ def bitrate_value (self , value ):
2316+ self ._bitrate_value = value
2317+ return
2318+ if self ._bitrate_manager is None :
2319+ self ._bitrate_manager = BitrateManager (value )
23082320 else :
2309- self ._delay = 0
2321+ self ._bitrate_manager . bitrate = value
23102322
23112323 def save (self ):
23122324 self ._cache_data ._save ()
@@ -2338,50 +2350,33 @@ def show(self, parent=None):
23382350
23392351 # show content
23402352 self ._win .addstr (2 , 4 , self ._text , curses .color_pair (10 ))
2341- self ._win .addstr ('{}' .format (self ._delay ), curses .color_pair (11 ))
2342-
2343- # show KB
2344- self ._win .addstr (3 , 4 , self ._text128 , curses .color_pair (10 ))
2345- self ._win .addstr ('{}' .format (
2346- seconds_to_KB_128 [self ._delay if self ._delay == 0 else self ._delay - 4 ]
2347- ), curses .color_pair (11 ))
2348- self ._win .addstr (4 , 4 , self ._text192 , curses .color_pair (10 ))
2349- self ._win .addstr ('{}' .format (
2350- seconds_to_KB_192 [self ._delay if self ._delay == 0 else self ._delay - 4 ]
2351- ), curses .color_pair (10 ))
2352- self ._win .addstr (5 , 4 , self ._text320 , curses .color_pair (10 ))
2353- self ._win .addstr ('{}' .format (
2354- seconds_to_KB_320 [self ._delay if self ._delay == 0 else self ._delay - 4 ]
2355- ), curses .color_pair (10 ))
2356-
2353+ self ._win .addstr ('{}' .format (self .buffering_value ), curses .color_pair (11 ))
23572354
23582355 # show help
23592356 try :
2360- self ._win .addstr (7 , 2 , '─' * (self .MaxX - 4 ), curses .color_pair (3 ))
2357+ self ._win .addstr (4 , 2 , '─' * (self .MaxX - 4 ), curses .color_pair (3 ))
23612358 except :
2362- self ._win .addstr (7 , 2 , '─' .encode ('utf-8' ) * (self .MaxX - 6 ), curses .color_pair (3 ))
2363- self ._win .addstr (7 , int ((self .MaxX - len (self ._help_text ))/ 2 ), self ._help_text , curses .color_pair (3 ))
2364- self ._win .addstr (8 , 2 , kb2str ('{j} {k} Up Down' ), curses .color_pair (11 ))
2365- self ._win .addstr (9 , 2 , 'PgUp PgDown' , curses .color_pair (11 ))
2359+ self ._win .addstr (4 , 2 , '─' .encode ('utf-8' ) * (self .MaxX - 6 ), curses .color_pair (3 ))
2360+ self ._win .addstr (4 , int ((self .MaxX - len (self ._help_text ))/ 2 ), self ._help_text , curses .color_pair (3 ))
2361+ self ._win .addstr (5 , 2 , kb2str ('{j} {k} Up Down' ), curses .color_pair (11 ))
2362+ self ._win .addstr (6 , 2 , 'PgUp PgDown' , curses .color_pair (11 ))
23662363 self ._win .addstr (' Adjust value' , curses .color_pair (10 ))
2367- self ._win .addstr (10 , 2 , kb2chr ('revert_saved' ), curses .color_pair (11 ))
2364+ self ._win .addstr (7 , 2 , kb2chr ('revert_saved' ), curses .color_pair (11 ))
23682365 self ._win .addstr (' Load saved value' , curses .color_pair (10 ))
2369- self ._win .addstr (11 , 2 , kb2chr ('no_buffer' ), curses .color_pair (11 ))
2366+ self ._win .addstr (8 , 2 , kb2chr ('no_buffer' ), curses .color_pair (11 ))
23702367 self ._win .addstr (' No buffering' , curses .color_pair (10 ))
2371- self ._win .addstr (12 , 2 , 'Enter ' + kb2chr ('s' ), curses .color_pair (11 ))
2368+ self ._win .addstr (9 , 2 , 'Enter ' + kb2chr ('s' ), curses .color_pair (11 ))
23722369 self ._win .addstr (' Accept value' , curses .color_pair (10 ))
2373- self ._win .addstr (13 , 2 , kb2str ('Esc {q} {h} Right' ), curses .color_pair (11 ))
2370+ self ._win .addstr (10 , 2 , kb2str ('Esc {q} {h} Right' ), curses .color_pair (11 ))
23742371 self ._win .addstr (' Cancel operation' , curses .color_pair (10 ))
2375- self ._win .addstr (14 , 2 , kb2str ('{?}' ), curses .color_pair (11 ))
2376- self ._win .addstr (' Display help' , curses .color_pair (10 ))
23772372 self ._win .refresh ()
23782373
23792374 def keypress (self , char ):
23802375 """ PyRadioBuffering keypress
23812376 Returns:
2382- -1: Cancel - []
2383- 0: go on - []
2384- 1: Ok = [ buffering parameters]
2377+ -1: Cancel - None
2378+ 0: go on - None
2379+ 1: Ok = buffering parameters
23852380 """
23862381 l_char = None
23872382 if char in self ._global_functions or \
@@ -2392,12 +2387,11 @@ def keypress(self, char):
23922387
23932388 elif char in (curses .KEY_ENTER , ord ('\n ' ), ord ('\r ' ), kbkey ['s' ]) or \
23942389 check_localized (char , (kbkey ['s' ], )):
2395- self ._cache_data .delay = self ._delay
2396- return 1 , self ._cache_data .cache
2390+ return 1 , self .buffering_value + '@' + self .bitrate_value
23972391
23982392 elif char in (curses .KEY_EXIT , 27 , kbkey ['q' ], kbkey ['h' ], curses .KEY_LEFT ) or \
23992393 check_localized (char , (kbkey ['q' ], kbkey ['h' ])):
2400- return - 1 , []
2394+ return - 1 , None
24012395
24022396 elif char in (kbkey ['j' ], curses .KEY_UP ,
24032397 kbkey ['k' ], curses .KEY_DOWN ,
@@ -2406,54 +2400,74 @@ def keypress(self, char):
24062400 ) or check_localized (char , (
24072401 kbkey ['j' ], kbkey ['k' ],
24082402 kbkey ['no_buffer' ], kbkey ['revert_saved' ])):
2403+ delay = int (self .buffering_value )
24092404 if char == kbkey ['revert_saved' ] or \
24102405 check_localized (char , (kbkey ['revert_saved' ], )):
2411- self ._delay = self ._cache_data . delay
2406+ self .buffering_value = self ._original_buffering_value
24122407 elif char in (kbkey ['k' ], curses .KEY_UP ) or \
24132408 check_localized (char , (kbkey ['k' ], )):
2414- self ._delay += 1
2415- if self ._delay < self ._min :
2416- self ._delay = self ._min
2409+ delay += 1
2410+ if delay < self ._min :
2411+ delay = self ._min
2412+ if delay > self ._max :
2413+ delay = self ._max
2414+ self .buffering_value = str (delay )
24172415 elif char in (kbkey ['j' ], curses .KEY_DOWN ) or \
24182416 check_localized (char , (kbkey ['j' ], )):
2419- self ._delay -= 1
2420- if self ._delay < self ._min :
2421- self ._delay = 0
2417+ delay -= 1
2418+ if delay < self ._min :
2419+ delay = 0
2420+ self .buffering_value = str (delay )
24222421 elif char == curses .KEY_NPAGE :
2423- self ._delay -= self ._big_step
2424- if self ._delay < self ._min :
2425- self ._delay = 0
2422+ delay -= self ._big_step
2423+ if delay < self ._min :
2424+ delay = 0
2425+ self .buffering_value = str (delay )
24262426 elif char == curses .KEY_PPAGE :
2427- self ._delay += self ._big_step
2427+ delay += self ._big_step
2428+ if delay > self ._max :
2429+ delay = self ._max
2430+ self .buffering_value = str (delay )
24282431 elif char == kbkey ['no_buffer' ] or \
24292432 check_localized (char , (kbkey ['no_buffer' ], )):
2430- self ._delay = 0
2433+ self .buffering_value = '0'
24312434
2432- if self ._delay < 0 :
2433- self ._delay = 0
2434- elif self ._delay > self ._limit :
2435- self ._delay = self ._limit
2436- self ._win .addstr (2 , len (self ._text ) + 4 , '{:<7}' .format (self ._delay ), curses .color_pair (11 ))
2437- self ._win .addstr (
2438- 3 , len (self ._text128 ) + 4 , '{:<7}' .format (
2439- seconds_to_KB_128 [self ._delay if self ._delay == 0 else self ._delay - 4 ]
2440- ),
2441- curses .color_pair (11 )
2442- )
2443- self ._win .addstr (
2444- 4 , len (self ._text192 ) + 4 , '{:<7}' .format (
2445- seconds_to_KB_192 [self ._delay if self ._delay == 0 else self ._delay - 4 ]
2446- ),
2447- curses .color_pair (10 )
2448- )
2449- self ._win .addstr (
2450- 5 , len (self ._text320 ) + 4 , '{:<7}' .format (
2451- seconds_to_KB_320 [self ._delay if self ._delay == 0 else self ._delay - 4 ]
2452- ),
2453- curses .color_pair (10 )
2454- )
2435+ self ._win .addstr (2 , len (self ._text ) + 4 , '{:<7}' .format (self .buffering_value ), curses .color_pair (11 ))
24552436 self ._win .refresh ()
2456- return 0 , []
2437+ return 0 , None
2438+
2439+
2440+ class BitrateManager :
2441+ bitrates = (16 , 24 , 32 , 48 , 64 , 96 , 128 , 160 , 192 , 256 , 320 , 700 , 1411 )
2442+
2443+ def __init__ (self , initial_bitrate : str ):
2444+ self ._initial_bitrate = initial_bitrate
2445+ self ._current_bitrate = initial_bitrate
2446+
2447+ @property
2448+ def bitrate (self ) -> str :
2449+ return self ._current_bitrate
2450+
2451+ @bitrate .setter
2452+ def bitrate (self , value : str ):
2453+ self ._current_bitrate = value
2454+
2455+ def next (self ) -> str :
2456+ current = int (self ._current_bitrate )
2457+ next_bitrates = [b for b in self .bitrates if b > current ]
2458+ if next_bitrates :
2459+ self ._current_bitrate = str (min (next_bitrates ))
2460+ return self ._current_bitrate
2461+
2462+ def previous (self ) -> str :
2463+ current = int (self ._current_bitrate )
2464+ previous_bitrates = [b for b in self .bitrates if b < current ]
2465+ if previous_bitrates :
2466+ self ._current_bitrate = str (max (previous_bitrates ))
2467+ return self ._current_bitrate
2468+
2469+ def reset (self ) -> None :
2470+ self ._current_bitrate = self ._initial_bitrate
24572471
24582472
24592473class PyRadioConnectionType ():
0 commit comments