|
12 | 12 | except: |
13 | 13 | from urlparse import urlparse |
14 | 14 | from .simple_curses_widgets import SimpleCursesLineEdit, SimpleCursesCheckBox, SimpleCursesHorizontalPushButtons, DisabledWidget |
| 15 | +from .player import PlayerCache |
15 | 16 | from .log import Log |
16 | 17 |
|
17 | 18 | import locale |
@@ -1230,6 +1231,139 @@ def keypress(self, char): |
1230 | 1231 | return self._get_result(ret) |
1231 | 1232 |
|
1232 | 1233 |
|
| 1234 | +class PyRadioBuffering(object): |
| 1235 | + |
| 1236 | + _text = 'Buffer size in seconds: ' |
| 1237 | + _help_text = ' Help ' |
| 1238 | + _note_text = ' Note ' |
| 1239 | + _max_lines = 12 |
| 1240 | + _cache_data = None |
| 1241 | + _step = 1 |
| 1242 | + _big_step = 5 |
| 1243 | + _limit = 60 |
| 1244 | + |
| 1245 | + def __init__(self, |
| 1246 | + parent, |
| 1247 | + config, |
| 1248 | + player, |
| 1249 | + global_functions=None): |
| 1250 | + self._parent = parent |
| 1251 | + self._cnf = config |
| 1252 | + self._player = player |
| 1253 | + self._global_functions = global_functions |
| 1254 | + if self._global_functions is None: |
| 1255 | + self._global_functions = {} |
| 1256 | + self.recording = lambda: self._player.recording |
| 1257 | + self._title = ' ' + self._player.PLAYER_NAME + ' Buffering ' |
| 1258 | + if self._player.PLAYER_NAME == 'mplayer': |
| 1259 | + self._text = 'Buffer size in KBytes: ' |
| 1260 | + self._step = 500 |
| 1261 | + self._big_step = 1000 |
| 1262 | + self._limit = 100000 |
| 1263 | + self._cache_data = PlayerCache( |
| 1264 | + player.PLAYER_NAME, |
| 1265 | + self._cnf.data_dir, |
| 1266 | + lambda: self._player.recording |
| 1267 | + ) |
| 1268 | + if self._cnf.buffering_data: |
| 1269 | + self._delay = self._cache_data.delay |
| 1270 | + else: |
| 1271 | + self._delay = 0 |
| 1272 | + |
| 1273 | + def save(self): |
| 1274 | + self._cache_data._save() |
| 1275 | + |
| 1276 | + def show(self, parent=None): |
| 1277 | + if parent: |
| 1278 | + self._parent = parent |
| 1279 | + y, x = self._parent.getmaxyx() |
| 1280 | + new_y = int((y - self._max_lines) / 2) + 1 |
| 1281 | + new_x = int((x - len(self._text) - 9 - 4) / 2) |
| 1282 | + self.MaxX = len(self._text) + 9 + 4 |
| 1283 | + self._win = None |
| 1284 | + if y < self._max_lines + 2 or x < self.MaxX + 2: |
| 1285 | + self._win = curses.newwin(3, 20, int((y-2)/2), int((x - 20) / 2)) |
| 1286 | + self._win.bkgdset(' ', curses.color_pair(3)) |
| 1287 | + self._win.erase() |
| 1288 | + self._win.box() |
| 1289 | + self._win.addstr(1, 2, 'Window too small', curses.color_pair(10)) |
| 1290 | + else: |
| 1291 | + |
| 1292 | + self._win = curses.newwin(self._max_lines, self.MaxX, new_y, new_x) |
| 1293 | + self._win.bkgdset(' ', curses.color_pair(3)) |
| 1294 | + self._win.erase() |
| 1295 | + self._win.box() |
| 1296 | + |
| 1297 | + # show title |
| 1298 | + x = int((self.MaxX - len(self._title)) / 2) |
| 1299 | + self._win.addstr(0, x, self._title, curses.color_pair(11)) |
| 1300 | + |
| 1301 | + # show content |
| 1302 | + self._win.addstr(2, 4, self._text, curses.color_pair(10)) |
| 1303 | + self._win.addstr('{}'.format(self._delay), curses.color_pair(11)) |
| 1304 | + |
| 1305 | + # show help |
| 1306 | + try: |
| 1307 | + self._win.addstr(4, 2, '─' * (self.MaxX - 4), curses.color_pair(3)) |
| 1308 | + except: |
| 1309 | + self._win.addstr(4, 2, '─'.encode('utf-8') * (self.maxX - 6), curses.color_pair(3)) |
| 1310 | + self._win.addstr(4, int((self.MaxX - len(self._help_text))/2), self._help_text, curses.color_pair(3)) |
| 1311 | + self._win.addstr(5, 2, 'j k UP DOWN', curses.color_pair(11)) |
| 1312 | + self._win.addstr(6, 2, 'PgUp PgDown', curses.color_pair(11)) |
| 1313 | + self._win.addstr(' Adjust value', curses.color_pair(10)) |
| 1314 | + self._win.addstr(7, 2, 'r', curses.color_pair(11)) |
| 1315 | + self._win.addstr(' Load saved value', curses.color_pair(10)) |
| 1316 | + self._win.addstr(8, 2, 'z', curses.color_pair(11)) |
| 1317 | + self._win.addstr(' No buffering', curses.color_pair(10)) |
| 1318 | + self._win.addstr(9, 2, 'ENTER s', curses.color_pair(11)) |
| 1319 | + self._win.addstr(' Accept value', curses.color_pair(10)) |
| 1320 | + self._win.addstr(10, 2, 'Esc q h RIGHT', curses.color_pair(11)) |
| 1321 | + self._win.addstr(' Cancel operation', curses.color_pair(10)) |
| 1322 | + self._win.refresh() |
| 1323 | + |
| 1324 | + def keypress(self, char): |
| 1325 | + """ Returns: |
| 1326 | + -1: Cancel - [] |
| 1327 | + 0: go on - [] |
| 1328 | + 1: Ok = [buffering parameters] |
| 1329 | + """ |
| 1330 | + if char in self._global_functions.keys(): |
| 1331 | + self._global_functions[char]() |
| 1332 | + |
| 1333 | + elif char in (curses.KEY_ENTER, ord('\n'), ord('\r'), ord('s')): |
| 1334 | + self._cache_data.delay = self._delay |
| 1335 | + return 1, self._cache_data.cache |
| 1336 | + |
| 1337 | + elif char in (curses.KEY_EXIT, 27, ord('q'), ord('h'), curses.KEY_LEFT): |
| 1338 | + return -1, [] |
| 1339 | + |
| 1340 | + elif char in (ord('j'), curses.KEY_UP, |
| 1341 | + ord('k'), curses.KEY_DOWN, |
| 1342 | + curses.KEY_NPAGE, curses.KEY_PPAGE, |
| 1343 | + ord('z'), ord('r') |
| 1344 | + ): |
| 1345 | + if char == ord('r'): |
| 1346 | + self._delay = self._cache_data.delay |
| 1347 | + elif char in (ord('k'), curses.KEY_UP): |
| 1348 | + self._delay += self._step |
| 1349 | + elif char in (ord('j'), curses.KEY_DOWN): |
| 1350 | + self._delay -= self._step |
| 1351 | + elif char == curses.KEY_NPAGE: |
| 1352 | + self._delay -= self._big_step |
| 1353 | + elif char == curses.KEY_PPAGE: |
| 1354 | + self._delay += self._big_step |
| 1355 | + elif char == ord('z'): |
| 1356 | + self._delay = 0 |
| 1357 | + |
| 1358 | + if self._delay < 0: |
| 1359 | + self._delay = 0 |
| 1360 | + elif self._delay > self._limit: |
| 1361 | + self._delay = self._limit |
| 1362 | + self._win.addstr(2, len(self._text) + 4, '{:<7}'.format(self._delay), curses.color_pair(11)) |
| 1363 | + self._win.refresh() |
| 1364 | + return 0, [] |
| 1365 | + |
| 1366 | + |
1233 | 1367 | class PyRadioConnectionType(object): |
1234 | 1368 |
|
1235 | 1369 | _title = ' Connection Type ' |
|
0 commit comments