]> code.delx.au - mediapc-tools/blob - mythsymlink
Remove old scripts
[mediapc-tools] / mythsymlink
1 #!/usr/bin/env python3
2
3 import MySQLdb
4 import os
5 import random
6 import re
7 import sys
8
9 import mythlib
10
11 def main(destdir):
12 os.chdir(destdir)
13
14 clean_dir()
15
16 config_xml = mythlib.get_config()
17 db_connection = mythlib.get_db_connection(config_xml)
18 recordings_dir = mythlib.get_recordings_dir(config_xml, db_connection)
19
20 for_each_recording(db_connection, handle_recording, recordings_dir)
21
22 def clean_dir():
23 for dirpath, dirnames, filenames in os.walk(".", topdown=False):
24 for filename in filenames:
25 filename = os.path.join(dirpath, filename)
26 if os.path.islink(filename):
27 os.unlink(filename)
28 for dirname in dirnames:
29 dirname = os.path.join(dirpath, dirname)
30 os.rmdir(dirname)
31
32 def for_each_recording(db_connection, fn, *args):
33 with db_connection.cursor(MySQLdb.cursors.DictCursor) as cursor:
34 cursor.execute("""
35 SELECT
36 title,
37 subtitle,
38 CONVERT_TZ(starttime, 'UTC', '%s') as starttime,
39 basename,
40 watched
41 FROM recorded
42 """ % "Australia/Sydney")
43 for row in cursor:
44 fn(row, *args)
45
46 def handle_recording(row, recordings_dir):
47 title = row["title"]
48 starttime = str(row["starttime"]).replace(":", "-")
49 subtitle = row["subtitle"]
50 basename = row["basename"]
51 watched = bool(row["watched"])
52
53 title = sanitize_filename(title)
54 subtitle = sanitize_filename(subtitle)
55 extn = os.path.splitext(basename)[1]
56
57
58 if subtitle:
59 filename = "%s - %s%s" % (starttime, subtitle, extn)
60 else:
61 filename = "%s%s" % (starttime, extn)
62 if watched:
63 filename = "watched/" + filename
64
65 source = "%s/%s" % (recordings_dir, basename)
66 dest = "%s/%s" % (title, filename)
67
68 if not os.path.isfile(source):
69 return
70
71 if os.path.isfile(dest):
72 dest = os.path.splitext(dest)[0] + " - unique" + str(random.randint(1000, 9999)) + extn
73
74 dirnames = dest.split("/")[:-1]
75 for i in range(1, len(dirnames)+1):
76 dirname = "/".join(dirnames[:i])
77 if not os.path.isdir(dirname):
78 os.mkdir(dirname)
79
80 try:
81 os.symlink(source, dest)
82 except Exception as e:
83 print(e, "--", source, "->", dest)
84 sys.exit(1)
85
86 def sanitize_filename(filename):
87 unsafe = re.compile("[^a-zA-Z0-9\-_ ,\\.]+")
88 return unsafe.sub("", filename)
89
90 if __name__ == "__main__":
91 try:
92 destdir = sys.argv[1]
93 except:
94 print("Usage: %s destdir" % sys.argv[0])
95 sys.exit(1)
96
97 main(destdir)