]> code.delx.au - mediapc-tools/commitdiff
mythsymlink: symlink tree generator
authorJames Bunton <jamesbunton@fastmail.fm>
Mon, 11 Apr 2011 11:37:08 +0000 (21:37 +1000)
committerJames Bunton <jamesbunton@fastmail.fm>
Mon, 11 Apr 2011 11:37:08 +0000 (21:37 +1000)
mythsymlink [new file with mode: 0755]

diff --git a/mythsymlink b/mythsymlink
new file mode 100755 (executable)
index 0000000..7787a72
--- /dev/null
@@ -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)
+