|
a/mpd2src/scmakempdsender |
|
b/mpd2src/scmakempdsender |
|
... |
|
... |
49 |
externalvolume = False
|
49 |
externalvolume = False
|
50 |
# Upmpdcli friendly-name. Used to compute a Uuid in conjunction with
|
50 |
# Upmpdcli friendly-name. Used to compute a Uuid in conjunction with
|
51 |
# the node name
|
51 |
# the node name
|
52 |
upmpdcli_fname = "UpMpd"
|
52 |
upmpdcli_fname = "UpMpd"
|
53 |
|
53 |
|
|
|
54 |
def logerr(s):
|
|
|
55 |
print("%s" % s, file=sys.stderr)
|
|
|
56 |
|
54 |
args = sys.argv[1:]
|
57 |
args = sys.argv[1:]
|
55 |
opts, args = getopt.getopt(args, "hup:f:e")
|
58 |
opts, args = getopt.getopt(args, "hup:f:e")
|
56 |
for opt, arg in opts:
|
59 |
for opt, arg in opts:
|
57 |
if opt in ['-h']:
|
60 |
if opt in ['-h']:
|
58 |
usage(sys.stdout)
|
61 |
usage(sys.stdout)
|
|
... |
|
... |
63 |
elif opt in ['-u']:
|
66 |
elif opt in ['-u']:
|
64 |
upmpdclitoo = True
|
67 |
upmpdclitoo = True
|
65 |
elif opt in ['-e']:
|
68 |
elif opt in ['-e']:
|
66 |
externalvolume = True
|
69 |
externalvolume = True
|
67 |
else:
|
70 |
else:
|
68 |
print("unknown option %s\n"%opt, file=sys.stderr)
|
71 |
logerr("unknown option %s\n" % opt)
|
69 |
usage(sys.stderr)
|
72 |
usage(sys.stderr)
|
70 |
|
73 |
|
71 |
# Temp fifo name and temporary file for mpd configuration
|
74 |
# Temp fifo name and temporary file for mpd configuration
|
72 |
mpdfifo = tempfile.mktemp(suffix=".fifo")
|
75 |
mpdfifo = tempfile.mktemp(suffix=".fifo")
|
73 |
mpdconf = tempfile.NamedTemporaryFile()
|
76 |
mpdconf = tempfile.NamedTemporaryFile()
|
|
... |
|
... |
79 |
sender_name = "%s UxSender" % upmpdcli_fname
|
82 |
sender_name = "%s UxSender" % upmpdcli_fname
|
80 |
|
83 |
|
81 |
mpdproc = None
|
84 |
mpdproc = None
|
82 |
senderproc = None
|
85 |
senderproc = None
|
83 |
upmpdproc = None
|
86 |
upmpdproc = None
|
|
|
87 |
|
|
|
88 |
parentpid = os.getppid()
|
84 |
|
89 |
|
85 |
def cleanup(xval):
|
90 |
def cleanup(xval):
|
86 |
# Clean up
|
91 |
# Clean up
|
87 |
try:
|
92 |
try:
|
88 |
senderproc.terminate()
|
93 |
senderproc.terminate()
|
|
... |
|
... |
141 |
# Start mpd
|
146 |
# Start mpd
|
142 |
try:
|
147 |
try:
|
143 |
mpdproc = subprocess.Popen(["mpd", "--no-daemon", "--stderr", mpdconf.name],
|
148 |
mpdproc = subprocess.Popen(["mpd", "--no-daemon", "--stderr", mpdconf.name],
|
144 |
bufsize = -1)
|
149 |
bufsize = -1)
|
145 |
except Exception as err:
|
150 |
except Exception as err:
|
146 |
print("Can't start mpd: %s"%(err,), file=sys.stderr)
|
151 |
logerr("Can't start mpd: %s" % err)
|
147 |
cleanup(1)
|
152 |
cleanup(1)
|
148 |
|
153 |
|
149 |
# Wait for the fifo to appear
|
154 |
# Wait for the fifo to appear
|
150 |
while True:
|
155 |
while True:
|
151 |
if os.path.exists(mpdfifo):
|
156 |
if os.path.exists(mpdfifo):
|
|
... |
|
... |
160 |
"-A", "44100:16:2:1",
|
165 |
"-A", "44100:16:2:1",
|
161 |
"-u", sender_udn, "-n", sender_name],
|
166 |
"-u", sender_udn, "-n", sender_name],
|
162 |
stdout=subprocess.PIPE,
|
167 |
stdout=subprocess.PIPE,
|
163 |
bufsize = -1)
|
168 |
bufsize = -1)
|
164 |
except Exception as err:
|
169 |
except Exception as err:
|
165 |
print("Can't start %s: %s"%(uxsender, err), file=sys.stderr)
|
170 |
logerr("Can't start %s: %s" % (uxsender, err))
|
166 |
cleanup(1)
|
171 |
cleanup(1)
|
167 |
|
172 |
|
168 |
# Get the Uri and Metadata values from the sender. These get written to stdout
|
173 |
# Get the Uri and Metadata values from the sender. These get written to stdout
|
169 |
urimeta = senderproc.stdout.readline()
|
174 |
urimeta = senderproc.stdout.readline()
|
170 |
|
175 |
|
|
... |
|
... |
176 |
try:
|
181 |
try:
|
177 |
upmpdproc = subprocess.Popen(["upmpdcli", "-c", "", "-h", "localhost",
|
182 |
upmpdproc = subprocess.Popen(["upmpdcli", "-c", "", "-h", "localhost",
|
178 |
"-p", "%d"%mpdport,
|
183 |
"-p", "%d"%mpdport,
|
179 |
"-f", upname], bufsize = -1)
|
184 |
"-f", upname], bufsize = -1)
|
180 |
except Exception as err:
|
185 |
except Exception as err:
|
181 |
print("Can't start upmpdcli: %s"%(err,), file=sys.stderr)
|
186 |
logerr("Can't start upmpdcli: %s" % err)
|
182 |
cleanup(1)
|
187 |
cleanup(1)
|
183 |
|
188 |
|
184 |
# Tell the world we're set
|
189 |
# Tell the world we're set
|
185 |
print("Ok %d %s" % (mpdport, urimeta))
|
190 |
print("Ok %d %s" % (mpdport, urimeta))
|
186 |
sys.stdout.flush()
|
191 |
sys.stdout.flush()
|
187 |
|
192 |
|
188 |
# Wait for either process.
|
193 |
# Wait for either process, also checking that our parent is not dead
|
189 |
while True:
|
194 |
while True:
|
190 |
if mpdproc.poll() is not None or senderproc.poll() is not None:
|
195 |
if mpdproc.poll() is not None or senderproc.poll() is not None:
|
191 |
break
|
196 |
break
|
|
|
197 |
try:
|
|
|
198 |
os.kill(parentpid, 0)
|
|
|
199 |
except:
|
|
|
200 |
break
|
192 |
time.sleep(0.5)
|
201 |
time.sleep(0.5)
|
193 |
|
202 |
|
194 |
time.sleep(1)
|
203 |
time.sleep(1)
|
195 |
cleanup(0)
|
204 |
cleanup(0)
|