]> code.delx.au - mediapc-tools/blobdiff - mythsymlink
mediapc-utils: simplify volume control
[mediapc-tools] / mythsymlink
index efccc172dfeacd3ef604d061c9790a8855f24f2a..a8391ac8a2b76b3cb6f10c248e09f4065d5e854f 100755 (executable)
@@ -1,85 +1,87 @@
-#!/usr/bin/python
+#!/usr/bin/env python2
 
-import MySQLdb
 import os
 import re
 import socket
 import sys
 
-from socket import gethostname
+import lxml.etree
+import MySQLdb
 
 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)
+    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
+with open(os.path.expanduser("~/.mythtv/config.xml")) as f:
+    config_xml = lxml.etree.parse(f, lxml.etree.XMLParser(encoding="utf-8"))
 
 db_connection = MySQLdb.connect(
-       host = config_values["DBHostName"],
-       user = config_values["DBUserName"],
-       passwd = config_values["DBPassword"],
-       db = config_values["DBName"]
+    host = config_xml.xpath("/Configuration/Database/Host/text()")[0],
+    port = int(config_xml.xpath("/Configuration/Database/Port/text()")[0]),
+    user = config_xml.xpath("/Configuration/Database/UserName/text()")[0],
+    passwd = config_xml.xpath("/Configuration/Database/Password/text()")[0],
+    db = config_xml.xpath("/Configuration/Database/DatabaseName/text()")[0],
 )
 cursor = db_connection.cursor(MySQLdb.cursors.DictCursor)
 
 # Regexp for what is allowed in the symlink name
 unsafe = re.compile("[^a-zA-Z0-9\-_ ,\\.]+")
 
+try:
+    localhostname = config_xml.xpath("/Configuration/LocalHostName/text()")[0]
+except IndexError:
+    localhostname = socket.gethostname()
+
 # Find the recordings directory
 cursor.execute("""
-       SELECT * FROM settings
-       WHERE value='RecordFilePrefix' AND hostname='%s'
-""" % socket.gethostname())
+    SELECT * FROM settings
+    WHERE value='RecordFilePrefix' AND hostname='%s'
+""" % localhostname)
 recordingsdir = cursor.fetchone()["data"]
 
 # Now find all the recordings we have at the moment
 cursor.execute("""
-       SELECT title, subtitle, starttime, basename, watched FROM recorded
+    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 = 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]
+    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
+    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)
+    source = "%s/%s" % (recordingsdir, basename)
+    dest = "%s/%s" % (title, filename)
 
-       if not os.path.isfile(source):
-               continue
+    if not os.path.isfile(source):
+        continue
 
-       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)
+    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)
+    os.symlink(source, dest)