diff --git a/app/youtube-dl-bridge.py b/app/youtube-dl-bridge.py index 0420397..4c499bc 100755 --- a/app/youtube-dl-bridge.py +++ b/app/youtube-dl-bridge.py @@ -1,23 +1,51 @@ -#!/usr/bin/env python +#!/usr/sbin/python -import sys -import json -import struct -import subprocess +import os, sys, json, struct, threading, subprocess -# Python 2.x version (if sys.stdin.buffer is not defined) + +DLPATH = os.path.expanduser("~") + "/Downloads" +MAJOR_VERSION = sys.version_info[0] + + +def threaded(fn): + def wrapper(*args, **kwargs): + threading.Thread(target=fn, args=args, kwargs=kwargs).start() + + return wrapper + + +# Python 2.x and 3.x read version # Read a message from stdin and decode it. def getMessage(): - rawLength = sys.stdin.read(4) + message = None + rawLength = None + + if MAJOR_VERSION == 2: # py2 + rawLength = sys.stdin.read(4) + else: # py3 + rawLength = sys.stdin.buffer.read(4) + if len(rawLength) == 0: sys.exit(0) + messageLength = struct.unpack('@I', rawLength)[0] - message = sys.stdin.read(messageLength) + if MAJOR_VERSION == 2: # py2 + message = sys.stdin.read(messageLength) + else: # py3 + message = sys.stdin.buffer.read(messageLength).decode("utf-8") + return json.loads(message) + + +@threaded +def downloadVideo(command): + process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) + + while True: receivedMessage = getMessage() - if receivedMessage: - command = "cd ~/Downloads && youtube-dl " + receivedMessage; - subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) + outputFile = DLPATH + "/%\(title\)s.%\(ext\)s " + command = "youtube-dl --no-playlist -o " + outputFile + receivedMessage; + downloadVideo(command)