Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 48 additions & 15 deletions play_with_mpv.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,31 @@
#!/usr/bin/env python
# Plays MPV when instructed to by a chrome extension =]

import os
import sys
import argparse
from subprocess import Popen
from contextlib import contextmanager

silent_suffix = []
mpv_suffix = []

@contextmanager
def suppress_stdout():
with open(os.devnull, "w") as devnull:
old_stdout = sys.stdout
old_stderr = sys.stderr
sys.stderr = devnull
sys.stdout = devnull
try:
yield
finally:
sys.stdout = old_stdout
sys.stderr = old_stderr

@contextmanager
def dummy_context():
yield None

if sys.version_info[0] < 3: # python 2
import BaseHTTPServer
Expand Down Expand Up @@ -42,13 +64,15 @@ def do_GET(self):
if urls.startswith('magnet:') or urls.endswith('.torrent'):
try:
pipe = Popen(['peerflix', '-k', urls, '--', '--force-window'] +
query.get("mpv_args", []))
query.get("mpv_args", []) +
mpv_suffix + silent_suffix)
except FileNotFoundError as e:
missing_bin('peerflix')
else:
try:
pipe = Popen(['mpv', urls, '--force-window'] +
query.get("mpv_args", []))
query.get("mpv_args", []) +
mpv_suffix + silent_suffix)
except FileNotFoundError as e:
missing_bin('mpv')
self.respond(200, "playing...")
Expand All @@ -58,14 +82,16 @@ def do_GET(self):
print(" === WARNING: Casting torrents not yet fully supported!")
try:
with Popen(['mkchromecast', '--video',
'--source-url', 'http://localhost:8888']):
'--source-url', 'http://localhost:8888'] +
silent_suffix):
pass
except FileNotFoundError as e:
missing_bin('mkchromecast')
pipe.terminate()
else:
try:
pipe = Popen(['mkchromecast', '--video', '-y', urls])
pipe = Popen(['mkchromecast', '--video', '-y', urls] +
silent_suffix)
except FileNotFoundError as e:
missing_bin('mkchromecast')
self.respond(200, "casting...")
Expand All @@ -83,7 +109,8 @@ def do_GET(self):
else:
try:
pipe = Popen(['youtube-dl', urls, '-o', location] +
query.get('ytdl_args', []))
query.get('ytdl_args', []) +
silent_suffix)
except FileNotFoundError as e:
missing_bin('youtube-dl')
self.respond(200, "downloading...")
Expand All @@ -93,23 +120,29 @@ def do_GET(self):

def missing_bin(bin):
print("======================")
print(f"ERROR: {bin.upper()} does not appear to be installed correctly! please ensure you can launch '{bin}' in the terminal.")
print("ERROR: %s does not appear to be installed correctly! please ensure you can launch '%s' in the terminal." % (bin.upper(), bin))
print("======================")


def start():
global silent_suffix, mpv_suffix
parser = argparse.ArgumentParser(description='Plays MPV when instructed to by a browser extension.', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--port', type=int, default=7531, help='The port to listen on.')
parser.add_argument('--public', action='store_true', help='Accept traffic from other comuters.')
parser.add_argument('-P', '--port', type=int, default=7531, help='The port to listen on.')
parser.add_argument('-p', '--public', action='store_true', help='Accept traffic from other comuters.')
parser.add_argument('-s', '--silent', action="store_true", help='Suppress all output (stdout, stderr).')
args = parser.parse_args()
hostname = '0.0.0.0' if args.public else 'localhost'
httpd = BaseHTTPServer.HTTPServer((hostname, args.port), Handler)
print("serving on {}:{}".format(hostname, args.port))
try:
httpd.serve_forever()
except KeyboardInterrupt:
print(" shutting down...")
httpd.shutdown()
silent_suffix = ['> ', os.devnull, '2>&1'] if args.silent else []
mpv_suffix = ["--really-quiet"] if args.silent else []

with suppress_stdout() if args.silent else dummy_context():
httpd = BaseHTTPServer.HTTPServer((hostname, args.port), Handler)
print("serving on {}:{}".format(hostname, args.port))
try:
httpd.serve_forever()
except KeyboardInterrupt:
print(" shutting down...")
httpd.shutdown()


if __name__ == '__main__':
Expand Down