diff options
Diffstat (limited to 'pydora/player.py')
-rw-r--r-- | pydora/player.py | 28 |
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 | |||
10 | import sys | 10 | import sys |
11 | import logging | 11 | import logging |
12 | import argparse | 12 | import argparse |
13 | from pandora import clientbuilder | 13 | from pandora.clientbuilder import PydoraConfigFileBuilder |
14 | from pandora.clientbuilder import PianobarConfigFileBuilder | ||
15 | from pandora.ratelimit import BlockingTokenBucket, TokenBucketCallbacks | ||
14 | 16 | ||
15 | from .utils import Colors, Screen | 17 | from .utils import Colors, Screen |
16 | from .audio_backend import RemoteVLC | 18 | from .audio_backend import RemoteVLC |
@@ -46,6 +48,18 @@ class PlayerCallbacks: | |||
46 | pass | 48 | pass |
47 | 49 | ||
48 | 50 | ||
51 | class 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 | |||
49 | class PlayerApp: | 63 | class 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 | ||