cplay-ng

simple curses audio player
git clone https://git.ce9e.org/cplay-ng.git

commit
0e43a4cf052dca747d0113f348fcb925d33b4326
parent
cba68600f4760b5d3ac6870ae35dae2c8e2ffa3d
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2020-09-05 16:25
use selectors instead of select

Diffstat

M cplay.py 43 ++++++++++++++++++++-----------------------

1 files changed, 20 insertions, 23 deletions


diff --git a/cplay.py b/cplay.py

@@ -3,7 +3,7 @@ import functools
    3     3 import os
    4     4 import random
    5     5 import re
    6    -1 import select
   -1     6 import selectors
    7     7 import signal
    8     8 import subprocess
    9     9 import sys
@@ -678,31 +678,28 @@ class Application:
  678   678         self.refresh_dimensions()
  679   679         self.render()
  680   680 
  681    -1         while True:
  682    -1             player.finish_seek()
  683    -1 
  684    -1             timeout = 0.5 if player.is_playing() else None
  685    -1             try:
  686    -1                 r, _w, _e = select.select([
  687    -1                     sys.stdin,
  688    -1                     self.resize_in,
  689    -1                     player.stderr_r,
  690    -1                 ], [], [], timeout)
  691    -1             except select.error:
  692    -1                 continue
   -1   681         with selectors.DefaultSelector() as sel:
   -1   682             sel.register(sys.stdin, selectors.EVENT_READ)
   -1   683             sel.register(self.resize_in, selectors.EVENT_READ)
   -1   684             sel.register(player.stderr_r, selectors.EVENT_READ)
   -1   685 
   -1   686             while True:
   -1   687                 player.finish_seek()
  693   688 
  694    -1             if self.resize_in in r:
  695    -1                 os.read(self.resize_in, 8)
  696    -1                 self.on_resize()
  697    -1             if sys.stdin in r:
  698    -1                 self.process_key(screen.get_wch())
  699    -1             if player.stderr_r in r:
  700    -1                 player.parse_progress(player.stderr_r)
   -1   689                 timeout = 0.5 if player.is_playing() else None
   -1   690                 for key, mask in sel.select(timeout):
   -1   691                     if key.fileobj is self.resize_in:
   -1   692                         os.read(self.resize_in, 8)
   -1   693                         self.on_resize()
   -1   694                     elif key.fileobj is sys.stdin:
   -1   695                         self.process_key(screen.get_wch())
   -1   696                     elif key.fileobj is player.stderr_r:
   -1   697                         player.parse_progress(player.stderr_r)
  701   698 
  702    -1             if player.is_finished():
  703    -1                 player.play(playlist.next())
   -1   699                 if player.is_finished():
   -1   700                     player.play(playlist.next())
  704   701 
  705    -1             self.render()
   -1   702                 self.render()
  706   703 
  707   704 
  708   705 player = Player()