]>
code.delx.au - mediapc-tools/blob - mythsymlink
12 config_xml
= mythlib
.get_config()
13 db_connection
= mythlib
.get_db_connection(config_xml
)
14 recordings_dir
= mythlib
.get_recordings_dir(config_xml
, db_connection
)
15 symlinks_dir
= recordings_dir
+ "-symlinks"
17 os
.chdir(symlinks_dir
)
22 for_each_recording(db_connection
, handle_recording
, recordings_dir
)
25 for dirpath
, dirnames
, filenames
in os
.walk(".", topdown
=False):
26 for filename
in filenames
:
27 filename
= os
.path
.join(dirpath
, filename
)
28 if os
.path
.islink(filename
):
30 for dirname
in dirnames
:
31 dirname
= os
.path
.join(dirpath
, dirname
)
34 def for_each_recording(db_connection
, fn
, *args
):
35 with db_connection
.cursor(MySQLdb
.cursors
.DictCursor
) as cursor
:
40 CONVERT_TZ(starttime, 'UTC', '%s') as starttime,
44 """ % "Australia/Sydney")
48 def handle_recording(row
, recordings_dir
):
50 starttime
= str(row
["starttime"]).replace(":", "-")
51 subtitle
= row
["subtitle"]
52 basename
= row
["basename"]
53 watched
= bool(row
["watched"])
55 title
= sanitize_filename(title
)
56 subtitle
= sanitize_filename(subtitle
)
57 extn
= os
.path
.splitext(basename
)[1]
61 filename
= "%s - %s%s" % (starttime
, subtitle
, extn
)
63 filename
= "%s%s" % (starttime
, extn
)
65 filename
= "watched/" + filename
67 source
= "%s/%s" % (recordings_dir
, basename
)
68 dest
= "%s/%s" % (title
, filename
)
70 if not os
.path
.isfile(source
):
73 if os
.path
.isfile(dest
):
74 dest
= os
.path
.splitext(dest
)[0] + " - unique" + str(random
.randint(1000, 9999)) + extn
76 dirnames
= dest
.split("/")[:-1]
77 for i
in range(1, len(dirnames
)+1):
78 dirname
= "/".join(dirnames
[:i
])
79 if not os
.path
.isdir(dirname
):
83 os
.symlink(source
, dest
)
84 except Exception as e
:
85 print(e
, "--", source
, "->", dest
)
88 def sanitize_filename(filename
):
89 unsafe
= re
.compile("[^a-zA-Z0-9\-_ ,\\.]+")
90 return unsafe
.sub("", filename
)
92 if __name__
== "__main__":