Compare commits
5 Commits
970bb33b46
...
f45f25dd9d
Author | SHA1 | Date | |
---|---|---|---|
f45f25dd9d | |||
3ccb9c9b60 | |||
03ca9b0a48 | |||
26de7e1d61 | |||
bd595d03b8 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -124,6 +124,7 @@ celerybeat.pid
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
.envrc
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
|
11
README.txt
11
README.txt
@ -19,10 +19,15 @@ the sample scripts are described in the examples/README
|
||||
a small set of samples are provided. all of them make use of the module
|
||||
pywmgeneral.
|
||||
|
||||
[REQUIREMENTS DEBIAN/UBUNTU]
|
||||
apt-get install mplayer python3-setuptools libx11-dev libxpm-dev libxext-dev
|
||||
|
||||
[INSTALLATION]
|
||||
python ./setup install
|
||||
sudo python ./setup install
|
||||
|
||||
[CONTACT]
|
||||
Anything related to this piece of software can be e-mailed to me, Mario
|
||||
Frasca <mfrasca@interia.pl>.
|
||||
This project was originally started as as a Python 2 application. By Mario
|
||||
Fransca <mfrasca@interia.pl>. I thank him for all the hard work.
|
||||
|
||||
The project has been ported to Python 3 and now maintained by Fredrick
|
||||
Warren <fwarren@fastmail.com>
|
||||
|
@ -2,14 +2,20 @@
|
||||
|
||||
"""pywmnop.py
|
||||
|
||||
WindowMaker dockapp doing nothing
|
||||
WindowMaker dockapp internet radio player
|
||||
|
||||
Copyright (C) 2006 Mario Frasca
|
||||
|
||||
Licensed under the GNU General Public License.
|
||||
"""
|
||||
|
||||
import sys, time
|
||||
from codecs import open
|
||||
from fcntl import fcntl, F_GETFL, F_SETFL
|
||||
from os import environ, sep, O_NONBLOCK
|
||||
from re import compile
|
||||
from select import select
|
||||
from signal import signal, SIGCHLD
|
||||
from subprocess import Popen, DEVNULL, PIPE
|
||||
from wmdocklib import wmoo as wmoo
|
||||
|
||||
class Application(wmoo.Application):
|
||||
@ -33,16 +39,12 @@ class Application(wmoo.Application):
|
||||
self.reset()
|
||||
|
||||
self._buffered = ''
|
||||
import re
|
||||
self._feedback = re.compile(r'.+A:.*?% ([0-9\.]+)%')
|
||||
self._feedback = compile(r'.+A:.*?% ([0-9\.]+)%')
|
||||
|
||||
import fileinput, os
|
||||
configfile = os.sep.join([os.environ['HOME'], '.pyradiorc'])
|
||||
configfile = sep.join([environ['HOME'], '.pyradiorc'])
|
||||
|
||||
import codecs
|
||||
f = codecs.open(configfile, 'r', 'utf-8')
|
||||
t = f.read()
|
||||
f.close()
|
||||
with open(configfile, 'r', 'utf-8') as f:
|
||||
t = f.read()
|
||||
for i in t.split(u'\n'):
|
||||
radiodef = i.split('\t')
|
||||
radioname = radiodef[0].lower()
|
||||
@ -57,7 +59,6 @@ class Application(wmoo.Application):
|
||||
|
||||
def handler(self, num, frame):
|
||||
if self._expectdying:
|
||||
print(self._expectdying)
|
||||
self._expectdying -= 1
|
||||
else:
|
||||
self.reset()
|
||||
@ -65,37 +66,41 @@ class Application(wmoo.Application):
|
||||
self._colour = 1
|
||||
|
||||
def startPlayer(self):
|
||||
import os, subprocess, signal
|
||||
commandline = [mplayer,
|
||||
'-cache', self.radioList[self.currentRadio][2],
|
||||
'-cache',
|
||||
str(abs(int(self.radioList[self.currentRadio][2]))),
|
||||
self.radioList[self.currentRadio][1]
|
||||
]
|
||||
self.child = subprocess.Popen(commandline,
|
||||
stdin =subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.DEVNULL)
|
||||
signal.signal(signal.SIGCHLD, self.handler)
|
||||
# if cache is negative then this is a playlist
|
||||
if int(self.radioList[self.currentRadio][2]) < 0:
|
||||
commandline.insert(2, '-playlist')
|
||||
self.child = Popen(commandline,
|
||||
stdin =PIPE,
|
||||
stdout=PIPE,
|
||||
stderr=DEVNULL)
|
||||
signal(SIGCHLD, self.handler)
|
||||
self._flash = 0
|
||||
self._paused = False
|
||||
self._buffered = ''
|
||||
self._buffering = 1
|
||||
self._cacheLevel = 0
|
||||
import fcntl
|
||||
flags = fcntl.fcntl(self.child.stdout, fcntl.F_GETFL)
|
||||
fcntl.fcntl(self.child.stdout, fcntl.F_SETFL, flags | os.O_NONBLOCK)
|
||||
flags = fcntl.fcntl(self.child.stdin, fcntl.F_GETFL)
|
||||
fcntl.fcntl(self.child.stdin, fcntl.F_SETFL, flags | os.O_NONBLOCK)
|
||||
flags = fcntl(self.child.stdout, F_GETFL)
|
||||
fcntl(self.child.stdout, F_SETFL, flags | O_NONBLOCK)
|
||||
flags = fcntl(self.child.stdin, F_GETFL)
|
||||
fcntl(self.child.stdin, F_SETFL, flags | O_NONBLOCK)
|
||||
|
||||
def stopPlayer(self):
|
||||
if self.child:
|
||||
print(self._expectdying)
|
||||
# print(self._expectdying)
|
||||
self.child.stdin.write(b'q')
|
||||
self.child.stdin.flush()
|
||||
self._expectdying += 1
|
||||
self.child = None
|
||||
|
||||
def muteStream(self, event):
|
||||
if self.child and self._buffering == 0:
|
||||
self.child.stdin.write(b'm')
|
||||
self.child.stdin.flush()
|
||||
self.putPattern(9*self._muting, 0, 9, 11, 30, 29)
|
||||
self._muting = 1 - self._muting
|
||||
|
||||
@ -128,6 +133,7 @@ class Application(wmoo.Application):
|
||||
def pauseStream(self, event):
|
||||
if self.child and not self._buffering:
|
||||
self.child.stdin.write(b' ')
|
||||
self.child.stdin.flush()
|
||||
self._paused = not self._paused
|
||||
if self._paused:
|
||||
self._colour = 1
|
||||
@ -163,8 +169,7 @@ class Application(wmoo.Application):
|
||||
return
|
||||
self._count = 0
|
||||
if self.child:
|
||||
import select
|
||||
[i, o, e] = select.select([self.child.stdout], [], [], 0)
|
||||
[i, o, e] = select([self.child.stdout], [], [], 0)
|
||||
if i:
|
||||
line = self.child.stdout.read(102400).decode("utf-8")
|
||||
self._buffered += line
|
||||
|
@ -16,3 +16,10 @@ bbcws rtsp://rmlive.bbc.co.uk/bbc-rbs/rmlive/ev7/live24/worldservice/liveinfent.
|
||||
bbc3 rtsp://rmlive.bbc.co.uk/bbc-rbs/rmlive/ev7/live24/radio3/live/r3_dsat_g2.ra 256
|
||||
bbc4 rtsp://rmlive.bbc.co.uk/bbc-rbs/rmlive/ev7/live24/radio4/live/r4_dsat_g2.ra 256
|
||||
|
||||
# lines starting with # is ignored OR
|
||||
# lines without exactly two tabs \t in it is ignored
|
||||
# lines with \t<variable>\t<value> becomes a global variable
|
||||
# lines with <name>\t<url>\t<bytes-cached> become a station
|
||||
# <bytes-cached> must be 32 or larger
|
||||
# positve <bytes-cached> ( 32) are stream urls
|
||||
# negative <bytes-cached> (-32) are playlist urls
|
||||
|
Loading…
Reference in New Issue
Block a user