mix_sync/sync.py

33 lines
1.2 KiB
Python

from urllib.parse import urlparse, quote
from pathlib import Path
import configparser
import subprocess
import pdb
def read_config():
config = configparser.RawConfigParser()
config.read("config.ini")
return config
def get_mixes(mixes_dir):
mixes = []
for path in Path(mixes_dir).rglob('url.txt'):
with open(path, "r") as fd:
first_line = fd.readline()
first_line = first_line.strip()
url = quote(urlparse(first_line).geturl(), safe=":/") # do a sanity url parse and quote
mixes.append((path.parent, url))
return mixes
def download_channel(target_directory, channel_url, options="", update_mpd=False, mpd_root=""):
mpd_update_options = []
if update_mpd:
mpd_update_options = ["--exec", "mpc update \"{}\"".format(str(target_directory).replace(mpd_root, "", 1).lstrip("/"))]
p = subprocess.Popen(["youtube-dl", *options.split(" "), *mpd_update_options, channel_url], cwd=target_directory)
p.wait()
config = read_config()
mixes = get_mixes(config["general"]["mixes_dir"])
for folder,url in mixes:
download_channel(folder, url, config["youtube-dl"]["options"], update_mpd=config["mpd"]["update"], mpd_root=config["mpd"]["mpd_root"])