1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #
# encoding: UTF-8
# api: streamtuner2
# type: functions
# title: play/record actions
# description: Starts audio applications, guesses MIME types for URLs
#
#
# Multimedia interface for starting audio players or browser.
#
#
# Each channel plugin has a .listtype which describes the linked
# audio playlist format. It's audio/x-scpls mostly, seldomly m3u,
# but sometimes url/direct if the entry[url] directly leads to the
# streaming server.
# As fallback there is a regex which just looks for URLs in the
# given resource (works for m3u/pls/xspf/asx/...). There is no
# actual url "filename" extension guessing.
#
#
#
|
>
|
>
>
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | #
# encoding: UTF-8
# api: streamtuner2
# type: functions
# title: play/record actions
# description: Starts audio applications, guesses MIME types for URLs
# version: 0.7
#
#
# Multimedia interface for starting audio players, recording app,
# or web browser (listed as "url/http" association in players).
#
#
# Each channel plugin has a .listtype which describes the linked
# audio playlist format. It's audio/x-scpls mostly, seldomly m3u,
# but sometimes url/direct if the entry[url] directly leads to the
# streaming server.
#
# As fallback there is a regex which just looks for URLs in the
# given resource (works for m3u/pls/xspf/asx/...). There is no
# actual url "filename" extension guessing.
#
#
#
|
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 |
# calls player for stream url and format
@staticmethod
def play(url, audioformat="audio/mpeg", listformat="text/x-href"):
if (url):
url = action.url(url, listformat)
if (audioformat):
if audioformat == "audio/mp3":
audioformat = "audio/mpeg"
cmd = conf.play.get(audioformat, conf.play.get("*/*", "vlc %u"))
__print__( dbg.PROC,"play", url, cmd )
try:
action.run( action.interpol(cmd, url) )
except:
pass
# exec wrapper
@staticmethod
def run(cmd):
if conf.windows:
os.system("start \"%s\"")
else:
os.system(cmd + " &")
# streamripper
@staticmethod
def record(url, audioformat="audio/mpeg", listformat="text/x-href", append="", row={}):
__print__( dbg.PROC, "record", url )
cmd = conf.record.get(audioformat, conf.play.get("record", None))
try: action.run( action.interpol(cmd, url, row) + append )
except: pass
# save as .m3u
@staticmethod
def save(row, fn, listformat="audio/x-scpls"):
# modify stream url
row["url"] = action.url(row["url"], listformat)
stream_urls = action.extract_urls(row["url"], listformat) |
<
|
|
|
<
>
|
>
>
>
>
>
>
>
>
| 66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 |
# calls player for stream url and format
@staticmethod
def play(url, audioformat="audio/mpeg", listformat="text/x-href"):
if (url):
url = action.url(url, listformat)
if audioformat == "audio/mp3":
audioformat = "audio/mpeg"
cmd = action.mime_match(audioformat, conf.play)
try:
__print__( dbg.PROC, "play", url, cmd )
action.run( action.interpol(cmd, url) )
except:
pass
# exec wrapper
@staticmethod
def run(cmd):
if conf.windows:
os.system("start \"%s\"")
else:
os.system(cmd + " &")
# streamripper
@staticmethod
def record(url, audioformat="audio/mpeg", listformat="text/x-href", append="", row={}):
__print__( dbg.PROC, "record", url )
cmd = action.mime_match(audioformat, conf.record)
try: action.run( action.interpol(cmd, url, row) + append )
except: pass
# Convert MIME type into list of ["audio/xyz", "audio/*", "*/*"] for comparison against record/play association
@staticmethod
def mime_match(fmt, cmd_list):
for match in [ fmt, fmt[:fmt.find("/")] + "/*", "*/*" ]:
if cmd_list.get(match, None):
return cmd_list[match]
# save as .m3u
@staticmethod
def save(row, fn, listformat="audio/x-scpls"):
# modify stream url
row["url"] = action.url(row["url"], listformat)
stream_urls = action.extract_urls(row["url"], listformat) |