83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 | "audio/it+zip": "mod",
"audio/s3+zip": "mod",
"audio/xm+zip": "mod",
}
# Player command placeholders for playlist formats
placeholder_map = dict(
pls = "(%url | %pls | %u | %l | %r) \\b",
m3u = "(%m3u | %f | %g | %m) \\b",
xspf= "(%xspf | %xpsf | %x) \\b",
jspf= "(%jspf | %j) \\b",
asx = "(%asx) \\b",
smil= "(%smil) \\b",
srv = "(%srv | %d | %s) \\b",
)
# Playlist format content probing (assert type)
playlist_content_map = [
("pls", r""" (?i)\[playlist\].*NumberOfEntries """),
("xspf", r""" <\?xml .* <playlist .* ((?i)http://xspf\.org)/ns/0/ """),
("m3u", r""" ^ \s* \#(EXT)?M3U """), |
|
|
|
|
|
|
|
| 83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 | "audio/it+zip": "mod",
"audio/s3+zip": "mod",
"audio/xm+zip": "mod",
}
# Player command placeholders for playlist formats
placeholder_map = dict(
pls = "(%url | %pls | %u | %l | %r)",
m3u = "(%m3u | %f | %g | %m)",
xspf= "(%xspf | %xpsf | %x)",
jspf= "(%jspf | %j)",
asx = "(%asx)",
smil= "(%smil)",
srv = "(%srv | %d | %s)",
)
# Playlist format content probing (assert type)
playlist_content_map = [
("pls", r""" (?i)\[playlist\].*NumberOfEntries """),
("xspf", r""" <\?xml .* <playlist .* ((?i)http://xspf\.org)/ns/0/ """),
("m3u", r""" ^ \s* \#(EXT)?M3U """), |
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276 | # Add default %pls if cmd has no %url placeholder
if add_default and cmd.find("%") < 0:
cmd = cmd + " %pls"
# "pls" as default requires no conversion for most channels, and seems broadly supported by players
# Playlist type placeholders (%pls, %m3u, %xspf, etc.)
for dest, rx in placeholder_map.items():
if re.search(rx, cmd, re.X):
# no conversion
if conf.playlist_asis:
url = row["url"]
# e.g. from .m3u to .pls
else:
url = convert_playlist(row["url"], listfmt(source), listfmt(dest), local_file=True, row=row)
# insert quoted URL/filepath
return re.sub(rx, quote(url), cmd, 2, re.X)
if not add_default:
return cmd
else:
return "/bin/false"
|
>
|
| 254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277 | # Add default %pls if cmd has no %url placeholder
if add_default and cmd.find("%") < 0:
cmd = cmd + " %pls"
# "pls" as default requires no conversion for most channels, and seems broadly supported by players
# Playlist type placeholders (%pls, %m3u, %xspf, etc.)
for dest, rx in placeholder_map.items():
rx = "(?<!%%)%s\\b" % rx
if re.search(rx, cmd, re.X):
# no conversion
if conf.playlist_asis:
url = row["url"]
# e.g. from .m3u to .pls
else:
url = convert_playlist(row["url"], listfmt(source), listfmt(dest), local_file=True, row=row)
# insert quoted URL/filepath
return re.sub(rx, quote(url), cmd.replace("%%", "%"), 2, re.X)
if not add_default:
return cmd
else:
return "/bin/false"
|