-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtv_web.py
executable file
·160 lines (130 loc) · 4.46 KB
/
tv_web.py
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
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
"""
Interface for controlling tv
"""
# Import CherryPy global namespace
import cherrypy
import time
from genshi.template import TemplateLoader
import tv_controller
import filechooser
class TvWeb:
# constructor
def __init__(self):
self.mpc = tv_controller.VideoController()
self.vol = tv_controller.VolumeController('PCM')
self.monitor = tv_controller.MonitorController()
self.filechooser = filechooser.FileChooser()
self.lastplayed = 'Unknown'
self.lastip = "Unknown"
# main page
def index(self):
if not self.hostallowed(): return "You are not alowed."
tmpl = loader.load('tvweb.html')
stream = tmpl.generate(
title="TV Station Web Interface!",
channels=self.mpc.getchannels(),
lastplayed=self.lastplayed,
curvolume=self.vol.getvolume()[0],
lastip=self.lastip,
curdir=self.filechooser.getCurrentPath(),
dirlisting=self.filechooser.getList(),
alloweddirs=self.filechooser.getAllowed())
return stream.render('html', doctype='html')
index.exposed = True
# changes channel
def changechannel(self, channel=None):
if not self.hostallowed(): return "You are not alowed."
if cherrypy.request.method == 'POST':
if channel :
self.lastplayed = channel
self.lastip = cherrypy.request.remote.ip
self.mpc.play_tv(channel)
time.sleep(2)
raise cherrypy.HTTPRedirect('/tvweb')
return "POST request expected, but "+cherrypy.request.method+" arrived!"
changechannel.exposed = True
# stops playing
def stopplaying(self):
if not self.hostallowed(): return "You are not alowed."
if cherrypy.request.method == 'POST':
self.lastplayed = 'Stopped'
self.lastip = cherrypy.request.remote.ip
self.mpc.kill()
raise cherrypy.HTTPRedirect('/tvweb')
return "POST request expected, but "+cherrypy.request.method+" arrived!"
stopplaying.exposed = True
# volume up
def volup(self):
if not self.hostallowed(): return "You are not alowed."
if cherrypy.request.method == 'POST':
self.vol.volup()
raise cherrypy.HTTPRedirect('/tvweb')
return "POST request expected, but "+cherrypy.request.method+" arrived!"
volup.exposed = True
# volume down
def voldown(self):
if not self.hostallowed(): return "You are not alowed."
if cherrypy.request.method == 'POST':
self.vol.voldown()
raise cherrypy.HTTPRedirect('/tvweb')
return "POST request expected, but "+cherrypy.request.method+" arrived!"
voldown.exposed = True
# monitor turn on
def monitoron(self):
if not self.hostallowed(): return "You are not alowed."
if cherrypy.request.method == 'POST':
self.monitor.turnon()
raise cherrypy.HTTPRedirect('/tvweb')
return "POST request expected, but "+cherrypy.request.method+" arrived!"
monitoron.exposed = True
# monitor turn off
def monitoroff(self):
if not self.hostallowed(): return "You are not alowed."
if cherrypy.request.method == 'POST':
self.monitor.turnoff()
raise cherrypy.HTTPRedirect('/tvweb')
return "POST request expected, but "+cherrypy.request.method+" arrived!"
monitoroff.exposed = True
# file action
def fcaction(self, item=None):
if not self.hostallowed(): return "You are not alowed."
if cherrypy.request.method == 'GET':
if os.path.isfile(item):
self.lastplayed = item
self.lastip = cherrypy.request.remote.ip
self.mpc.play(item)
time.sleep(2)
elif os.path.isdir(item):
self.filechooser.setPath(item)
else:
self.filechooser.goBack(item)
raise cherrypy.HTTPRedirect('/tvweb')
return "GET request expected, but "+cherrypy.request.method+" arrived!"
fcaction.exposed = True
def test(self):
return "test ok."
test.exposed = True
# default function
def default(self, *another):
raise cherrypy.HTTPRedirect('/tvweb')
default.exposed = True
# checks allowed hosts
def hostallowed(self):
allowed = [ '128.10.20.1', '128.10.20.5' , '10.10.60.14', '127.0.0.1', '192.168.100.104', ]
hostip = cherrypy.request.remote.ip
if hostip in allowed:
return True
return False
class Prefix:
tvweb = TvWeb()
import os.path
tutconf = os.path.join(os.path.dirname(__file__), 'etc/cherryd-tvweb.conf')
loader = TemplateLoader('templates', auto_reload=True)
if __name__ == '__main__':
# CherryPy always starts with app.root when trying to map request URIs
# to objects, so we need to mount a request handler root. A request
# to '/' will be mapped to HelloWorld().index().
cherrypy.quickstart(HelloWorld(), config=tutconf)
else:
# This branch is for the test suite; you can ignore it.
cherrypy.tree.mount(Prefix(), config=tutconf)