]> code.delx.au - mediapc-tools/blobdiff - mythsymlink
show-mythtv-delays
[mediapc-tools] / mythsymlink
index 06ece07aedfb84423bbc83e0a05432c0211b8fa3..2bd754e24bbf3ddf75a843bd1616624772519ab3 100755 (executable)
@@ -1,12 +1,13 @@
-#!/usr/bin/python2
+#!/usr/bin/env python2
 
-import MySQLdb
 import os
+import random
 import re
 import socket
 import sys
 
-from socket import gethostname
+import lxml.etree
+import MySQLdb
 
 os.chdir(sys.argv[1])
 
@@ -21,35 +22,43 @@ for dirpath, dirnames, filenames in os.walk(".", topdown=False):
         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())
+""" % 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,
+        CONVERT_TZ(starttime, 'UTC', '%s') as starttime,
+        basename,
+        watched
+    FROM recorded
+""" % "Australia/Sydney")
 for row in cursor:
     title = row["title"]
     starttime = str(row["starttime"]).replace(":", "-")
@@ -75,11 +84,17 @@ for row in cursor:
     if not os.path.isfile(source):
         continue
 
+    if os.path.isfile(dest):
+        dest = os.path.splitext(dest)[0] + ' - unique' + str(random.randint(1000, 9999)) + extn
+
     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)
-
+    try:
+        os.symlink(source, dest)
+    except Exception, e:
+        print e, "--", source, "->", dest
+        sys.exit(1)