]>
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
)
21 for_each_recording(db_connection
, handle_recording
, recordings_dir
)
24 for dirpath
, dirnames
, filenames
in os
.walk(".", topdown
=False):
25 for filename
in filenames
:
26 filename
= os
.path
.join(dirpath
, filename
)
27 if os
.path
.islink(filename
):
29 for dirname
in dirnames
:
30 dirname
= os
.path
.join(dirpath
, dirname
)
33 def for_each_recording(db_connection
, fn
, *args
):
34 with db_connection
.cursor(MySQLdb
.cursors
.DictCursor
) as cursor
:
39 CONVERT_TZ(starttime, 'UTC', '%s') as starttime,
43 """ % "Australia/Sydney")
47 def handle_recording(row
, recordings_dir
):
49 starttime
= str(row
["starttime"]).replace(":", "-")
50 subtitle
= row
["subtitle"]
51 basename
= row
["basename"]
52 watched
= bool(row
["watched"])
54 title
= sanitize_filename(title
)
55 subtitle
= sanitize_filename(subtitle
)
56 extn
= os
.path
.splitext(basename
)[1]
60 filename
= "%s - %s%s" % (starttime
, subtitle
, extn
)
62 filename
= "%s%s" % (starttime
, extn
)
64 filename
= "watched/" + filename
66 source
= "%s/%s" % (recordings_dir
, basename
)
67 dest
= "%s/%s" % (title
, filename
)
69 if not os
.path
.isfile(source
):
72 if os
.path
.isfile(dest
):
73 dest
= os
.path
.splitext(dest
)[0] + " - unique" + str(random
.randint(1000, 9999)) + extn
75 dirnames
= dest
.split("/")[:-1]
76 for i
in range(1, len(dirnames
)+1):
77 dirname
= "/".join(dirnames
[:i
])
78 if not os
.path
.isdir(dirname
):
82 os
.symlink(source
, dest
)
83 except Exception as e
:
84 print(e
, "--", source
, "->", dest
)
87 def sanitize_filename(filename
):
88 unsafe
= re
.compile("[^a-zA-Z0-9\-_ ,\\.]+")
89 return unsafe
.sub("", filename
)
91 if __name__
== "__main__":