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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#
# api: streamtuner2
# title: CLI interface
# description: allows to call streamtuner2 from the commandline
# status: experimental
# version: 0.3
#
# Returns JSON data when queried. Usually returns cache data, but the
# "category" module always loads fresh info from the directory servers.
#
# Not all channel plugins are gtk-free yet. And some workarounds are
# used here to not upset channel plugins about a missing parent window.
#
#
#
import sys
#from channels import *
import ahttp
import action
from config import conf
import json
# CLI
class StreamTunerCLI (object):
# plugin info
title = "CLI interface"
version = 0.3
# channel plugins
channel_modules = ["shoutcast", "xiph", "internet_radio", "jamendo", "myoggradio", "live365"]
current_channel = "cli"
plugins = {} # only populated sparsely by .stream()
# start
def __init__(self, actions):
# fake init
action.action.main = empty_parent()
action.action.main.current_channel = self.current_channel
# check if enough arguments, else help
if not actions:
a = self.help
# first cmdline arg == action
else:
command = actions[0]
if command in self.__dict__:
cmd = self.__getattribute__(command)
else:
print "No such command:", command
return
# run
result = cmd(*actions[1:])
|
<
|
|
|
|
<
<
<
|
|
|
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# api: streamtuner2
# title: CLI interface
# description: allows to call streamtuner2 from the commandline
# status: experimental
# version: 0.3
#
# Returns JSON data when queried. Usually returns cache data, but the
# "category" module always loads fresh info from the directory servers.
#
# Not all channel plugins are gtk-free yet. And some workarounds are
# used here to not upset channel plugins about a missing parent window.
import sys
#from channels import *
import ahttp
import action
from config import *
import json
# CLI
class StreamTunerCLI (object):
# plugin info
title = "CLI interface"
version = 0.3
# channel plugins
channel_modules = ["shoutcast", "xiph", "icast", "jamendo", "radiobrowser"]# module_list()
current_channel = "cli"
plugins = {} # only populated sparsely by .stream()
# start
def __init__(self, actions):
# fake init
action.action.main = empty_parent()
action.action.main.current_channel = self.current_channel
# check if enough arguments, else help
if not actions:
a = self.help
# first cmdline arg == action
else:
command = actions[0]
if command in dir(self):
cmd = self.__getattribute__(command)
else:
print "No such command:", command
return
# run
result = cmd(*actions[1:])
|
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
# load all channel modules
def channels(self, channels=None):
if channels:
channels = channels.split(",")
else:
channels = self.channel_modules
return (self.channel(module) for module in channels)
# pretty print json
def json(self, dat):
print(json.dumps(dat, sort_keys=True, indent=2))
# trap for some main window calls
class empty_parent (object):
channel = {}
null = lambda *a: None
status = null
thread = null
|
|
|
|
|
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
# load all channel modules
def channels(self, channels=None):
if channels:
channels = channels.split(",")
else:
channels = self.channel_modules
return channels#(self.channel(module) for module in channels)
# pretty print json
def json(self, dat):
print(json.dumps(dat, sort_keys=True, indent=2))
# trap for some main window calls
class empty_parent (object):
channel = {}
null = lambda *a: None
status = lambda *a: None
thread = lambda *a: None
|