]>
code.delx.au - mediapc-tools/blob - mythsymlink
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
)
20 for_each_recording(db_connection
, handle_recording
, recordings_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
):
28 for dirname
in dirnames
:
29 dirname
= os
.path
.join(dirpath
, dirname
)
32 def for_each_recording(db_connection
, fn
, *args
):
33 with db_connection
.cursor(MySQLdb
.cursors
.DictCursor
) as cursor
:
38 CONVERT_TZ(starttime, 'UTC', '%s') as starttime,
42 """ % "Australia/Sydney")
46 def handle_recording(row
, recordings_dir
):
48 starttime
= str(row
["starttime"]).replace(":", "-")
49 subtitle
= row
["subtitle"]
50 basename
= row
["basename"]
51 watched
= bool(row
["watched"])
53 title
= sanitize_filename(title
)
54 subtitle
= sanitize_filename(subtitle
)
55 extn
= os
.path
.splitext(basename
)[1]
59 filename
= "%s - %s%s" % (starttime
, subtitle
, extn
)
61 filename
= "%s%s" % (starttime
, extn
)
63 filename
= "watched/" + filename
65 source
= "%s/%s" % (recordings_dir
, basename
)
66 dest
= "%s/%s" % (title
, filename
)
68 if not os
.path
.isfile(source
):
71 if os
.path
.isfile(dest
):
72 dest
= os
.path
.splitext(dest
)[0] + " - unique" + str(random
.randint(1000, 9999)) + extn
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
):
81 os
.symlink(source
, dest
)
82 except Exception as e
:
83 print(e
, "--", source
, "->", dest
)
86 def sanitize_filename(filename
):
87 unsafe
= re
.compile("[^a-zA-Z0-9\-_ ,\\.]+")
88 return unsafe
.sub("", filename
)
90 if __name__
== "__main__":
94 print("Usage: %s destdir" % sys
.argv
[0])