this is a interface to Seddis AiO Dreambox Screengrabber
'''
GRAB_BIN = '/usr/bin/grab'
- SPECIAL_ARGS = ['format', 'filename', 'save']
-
- def __init__(self):
- resource.Resource.__init__(self)
-
+ SPECIAL_ARGS = ('format', 'filename', 'save')
+
def render(self, request):
- self.baseCmd = ['/usr/bin/grab', '/usr/bin/grab']
- self.args = []
+ args = []
+ append = args.append
# some presets
filename = 'screenshot'
for key, value in request.args.items():
if key in GrabResource.SPECIAL_ARGS:
if key == 'format':
- format = request.args['format'][0]
+ format = value[0]
if format == 'png':
#-p produce png files instead of bmp
imageformat = format
- self.args.append('-p')
+ append('-p')
elif format == 'jpg':
#-j (quality) produce jpg files instead of bmp
imageformat = format
- self.args.append('-j')
+ append('-j')
#Quality Setting
- if request.args.has_key("jpgquali"):
- self.args.append("%s" %(request.args["jpgquali"][0]) )
+ if 'jpgquali' in request.args:
+ append("%s" % (request.args["jpgquali"][0]) )
+ del request.args['jpgquali']
else:
- self.args.append('80')
+ append('80')
elif key == 'filename':
- filename = request.args['filename'][0]
+ filename = value[0]
elif key == 'save':
save = True
if key == "v" and osdOnly is True:
continue
- self.args.append("-%s" %key )
+ append("-%s" %key )
- if value is not None:
- if len(value[0]) > 0:
- self.args.append("%s" %value[0])
+ if value:
+ if value[0]:
+ append("%s" % (value[0]))
if not os_path.exists(self.GRAB_BIN):
request.setResponseCode(http.OK)
request.write('Grab is not installed at %s. Please install package aio-grab.' %self.GRAB_BIN)
- request.finish()
-
+ request.finish()
+
else:
- request.setHeader('Content-Disposition', 'inline; filename=screenshot.%s;' %imageformat)
+ request.setHeader('Content-Disposition', 'inline; filename=screenshot.%s;' %imageformat)
request.setHeader('Content-Type','image/%s' %imageformat)
filename = filename+imageformat
- self.args.append(filename)
- cmd = self.baseCmd + self.args
-
+ append(filename)
+ cmd = ['/usr/bin/grab', '/usr/bin/grab'] + args
+
GrabStream(request, cmd, filename, save)
-
+
return server.NOT_DONE_YET
-
+
class GrabStream:
'''
used to start the grab-bin in the console in the background
self.target = target
self.save = save
self.output = ''
- self.request = request
+ self.request = request
self.container = eConsoleAppContainer()
self.container.appClosed.append(self.cmdFinished)
self.request.write(self.output)
else:
self.request.write('Internal error')
-
+
self.request.finish()
def dataAvail(self, data):