From 4364d67a174ffd6ed25e64ddfa45110f3690a477 Mon Sep 17 00:00:00 2001 From: James Bunton Date: Mon, 11 Apr 2011 21:37:08 +1000 Subject: [PATCH] mythsymlink: symlink tree generator --- mythsymlink | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 mythsymlink diff --git a/mythsymlink b/mythsymlink new file mode 100755 index 0000000..7787a72 --- /dev/null +++ b/mythsymlink @@ -0,0 +1,82 @@ +#!/usr/bin/python + +import MySQLdb +import os +import re +import socket +import sys + +from socket import gethostname + +os.chdir(sys.argv[1]) + +# Remove any symlinks and empty dirs in the tree +for dirpath, dirnames, filenames in os.walk(".", topdown=False): + for filename in filenames: + filename = os.path.join(dirpath, filename) + if os.path.islink(filename): + os.unlink(filename) + for dirname in dirnames: + dirname = os.path.join(dirpath, dirname) + os.rmdir(dirname) + +# Connect to the MythTV database based on the MythTV config +config_values = {} +for line in open(os.path.expanduser("~/.mythtv/mysql.txt")): + line = line.strip() + if line and not line.startswith("#"): + (key, value) = line.split("=") + config_values[key] = value + +db_connection = MySQLdb.connect( + host = config_values["DBHostName"], + user = config_values["DBUserName"], + passwd = config_values["DBPassword"], + db = config_values["DBName"] +) +cursor = db_connection.cursor(MySQLdb.cursors.DictCursor) + +# Regexp for what is allowed in the symlink name +unsafe = re.compile("[^a-zA-Z0-9\-_ ,\\.]+") + +# Find the recordings directory +cursor.execute(""" + SELECT * FROM settings + WHERE value='RecordFilePrefix' AND hostname='%s' +""" % socket.gethostname()) +recordingsdir = cursor.fetchone()["data"] + +# Now find all the recordings we have at the moment +cursor.execute(""" + SELECT title, subtitle, starttime, basename, watched FROM recorded +""") +for row in cursor: + title = row["title"] + starttime = str(row["starttime"]).replace(":", "-") + subtitle = row["subtitle"] + basename = row["basename"] + watched = bool(row["watched"]) + + title = unsafe.sub("", title) + subtitle = unsafe.sub("", subtitle) + extn = os.path.splitext(basename)[1] + + + if subtitle: + filename = "%s - %s%s" % (starttime, subtitle, extn) + else: + filename = "%s%s" % (starttime, extn) + if watched: + filename = "watched/" + filename + + source = "%s/%s" % (recordingsdir, basename) + dest = "%s/%s" % (title, filename) + + dirnames = dest.split("/")[:-1] + for i in xrange(1, len(dirnames)+1): + dirname = "/".join(dirnames[:i]) + if not os.path.isdir(dirname): + os.mkdir(dirname) + + os.symlink(source, dest) + -- 2.39.2