aboutsummaryrefslogtreecommitdiff
path: root/pydora/player.py
diff options
context:
space:
mode:
Diffstat (limited to 'pydora/player.py')
-rw-r--r--pydora/player.py28
1 files changed, 23 insertions, 5 deletions
diff --git a/pydora/player.py b/pydora/player.py
index c4ce2e0..d2b1388 100644
--- a/pydora/player.py
+++ b/pydora/player.py
@@ -10,7 +10,9 @@ import os
10import sys 10import sys
11import logging 11import logging
12import argparse 12import argparse
13from pandora import clientbuilder 13from pandora.clientbuilder import PydoraConfigFileBuilder
14from pandora.clientbuilder import PianobarConfigFileBuilder
15from pandora.ratelimit import BlockingTokenBucket, TokenBucketCallbacks
14 16
15from .utils import Colors, Screen 17from .utils import Colors, Screen
16from .audio_backend import RemoteVLC 18from .audio_backend import RemoteVLC
@@ -46,6 +48,18 @@ class PlayerCallbacks:
46 pass 48 pass
47 49
48 50
51class PlayerTokenBucketCallbacks(TokenBucketCallbacks):
52 def __init__(self, screen):
53 self.screen = screen
54
55 def near_depletion(self, tokens_left):
56 self.screen.print_error("Near Pandora API call rate limit. Slow down!")
57
58 def depleted(self, tokens_wanted, tokens_left):
59 self.screen.print_error("Pandora API call rate exceeded. Please wait!")
60 return True
61
62
49class PlayerApp: 63class PlayerApp:
50 64
51 CMD_MAP = { 65 CMD_MAP = {
@@ -75,10 +89,10 @@ class PlayerApp:
75 try: 89 try:
76 host, port = vlc_net.split(":") 90 host, port = vlc_net.split(":")
77 player = RemoteVLC(host, port, self, sys.stdin) 91 player = RemoteVLC(host, port, self, sys.stdin)
78 Screen.print_success("Using Remote VLC") 92 self.screen.print_success("Using Remote VLC")
79 return player 93 return player
80 except PlayerUnusable: 94 except PlayerUnusable:
81 Screen.print_error("Unable to connect to vlc") 95 self.screen.print_error("Unable to connect to vlc")
82 raise 96 raise
83 97
84 try: 98 try:
@@ -99,12 +113,16 @@ class PlayerApp:
99 sys.exit(1) 113 sys.exit(1)
100 114
101 def get_client(self): 115 def get_client(self):
116 tb_maker = BlockingTokenBucket.creator(
117 PlayerTokenBucketCallbacks(self.screen)
118 )
119
102 cfg_file = os.environ.get("PYDORA_CFG", "") 120 cfg_file = os.environ.get("PYDORA_CFG", "")
103 builder = clientbuilder.PydoraConfigFileBuilder(cfg_file) 121 builder = PydoraConfigFileBuilder(cfg_file, rate_limiter=tb_maker)
104 if builder.file_exists: 122 if builder.file_exists:
105 return builder.build() 123 return builder.build()
106 124
107 builder = clientbuilder.PianobarConfigFileBuilder() 125 builder = PianobarConfigFileBuilder(rate_limiter=tb_maker)
108 if builder.file_exists: 126 if builder.file_exists:
109 return builder.build() 127 return builder.build()
110 128