Added --serve TCP server to gifterm

This commit is contained in:
jaseg 2014-01-12 19:24:24 +01:00
parent 36068c3d47
commit 37da26d1a1

View file

@ -12,6 +12,7 @@ def main():
parser = argparse.ArgumentParser(description='Render pixel images on 256-color ANSI terminals') parser = argparse.ArgumentParser(description='Render pixel images on 256-color ANSI terminals')
parser.add_argument('image', type=str) parser.add_argument('image', type=str)
parser.add_argument('-s', '--size', type=str, help='Terminal size, [W]x[H]') parser.add_argument('-s', '--size', type=str, help='Terminal size, [W]x[H]')
parser.add_argument('--serve', type=int, help='Serve via TCP on given port')
args = parser.parse_args() args = parser.parse_args()
tw, th = None, None tw, th = None, None
@ -45,18 +46,41 @@ def main():
im.thumbnail((tw, th), Image.NEAREST) im.thumbnail((tw, th), Image.NEAREST)
frames.append(pixelterm.termify_pixels(im)) frames.append(pixelterm.termify_pixels(im))
print(cursor_invisible) if args.serve:
atexit.register(lambda:print(cursor_visible)) from socketserver import ThreadingMixIn, TCPServer, BaseRequestHandler
signal.signal(signal.SIGTERM, lambda signum, stack_frame: exit(1))
try: # Quote-Of-The-Day protocol implementation
while True: # See RFC865 ( https://tools.ietf.org/html/rfc865 ) for details.
for frame in frames:
print(clear_screen, pixelterm.reset_sequence) class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
print(frame)
time.sleep(img.info['duration']/1000.0) class QOTDHandler(BaseRequestHandler):
except KeyboardInterrupt: def handle(self):
pass try:
self.request.sendall(bytes(cursor_invisible, "UTF-8"))
while True:
for frame in frames:
self.request.sendall(bytes(clear_screen + pixelterm.reset_sequence, "UTF-8"))
self.request.sendall(bytes(frame, "UTF-8"))
time.sleep(min(1/20, img.info['duration']/1000.0))
except:
pass
server = ThreadingTCPServer(('', args.serve), QOTDHandler)
server.serve_forever()
else:
print(cursor_invisible)
atexit.register(lambda:print(cursor_visible))
signal.signal(signal.SIGTERM, lambda signum, stack_frame: exit(1))
try:
while True:
for frame in frames:
print(clear_screen, pixelterm.reset_sequence)
print(frame)
time.sleep(min(1/20, img.info['duration']/1000.0))
except KeyboardInterrupt:
pass
if __name__ == '__main__': if __name__ == '__main__':
main() main()