]> code.delx.au - mediapc-tools/blob - mythcleandb
mythcleandb: ignore livetv/deleted recordings
[mediapc-tools] / mythcleandb
1 #!/usr/bin/env python3
2
3 import os
4 import sys
5
6 import mythlib
7
8 def main(dry_run):
9 config_xml = mythlib.get_config()
10 db_connection = mythlib.get_db_connection(config_xml)
11 recordings_dir = mythlib.get_recordings_dir(config_xml, db_connection)
12
13 orphan_db_records = list(find_orphan_db_records(db_connection, recordings_dir))
14 for basename in orphan_db_records:
15 if dry_run:
16 print("Found orphan:", basename)
17 else:
18 print("Deleting orphan:", basename)
19 delete_orphan_record(db_connection, basename)
20
21 def print_usage_exit():
22 print("Usage: %s [-f|-n]" % sys.argv[0])
23 sys.exit(1)
24
25 def find_orphan_db_records(db_connection, recordings_dir):
26 with db_connection.cursor() as cursor:
27 cursor.execute("""
28 SELECT basename
29 FROM recorded
30 WHERE progend < now() AND recgroup NOT IN ('LiveTV', 'Deleted')
31 """)
32 for row in cursor:
33 basename = row[0]
34 if not is_valid_record(recordings_dir, basename):
35 yield basename
36
37 def is_valid_record(recordings_dir, basename):
38 filename = "%s/%s" % (recordings_dir, basename)
39 try:
40 size = os.stat(filename).st_size
41 except FileNotFoundError:
42 size = 0
43
44 return size > 0
45
46 def delete_orphan_record(db_connection, basename):
47 with db_connection.cursor() as cursor:
48 cursor.execute("delete from recorded where basename='%s'" % basename)
49
50 if __name__ == "__main__":
51 if len(sys.argv) != 2:
52 print_usage_exit()
53
54 if sys.argv[1] == "-f":
55 dry_run = False
56 elif sys.argv[1] == "-n":
57 dry_run = True
58 else:
59 print_usage_exit()
60
61 main(dry_run)