X-Git-Url: https://code.delx.au/mediapc-tools/blobdiff_plain/bd2b351187e3f7269af448b97563fe66c189b3d5..c9466a03237b26d8265a0bdc3b804f0a895c1306:/mythcleandb diff --git a/mythcleandb b/mythcleandb new file mode 100755 index 0000000..6e000fb --- /dev/null +++ b/mythcleandb @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 + +import os +import sys + +import mythlib + +def main(dry_run): + config_xml = mythlib.get_config() + db_connection = mythlib.get_db_connection(config_xml) + recordings_dir = mythlib.get_recordings_dir(config_xml, db_connection) + + orphan_db_records = list(find_orphan_db_records(db_connection, recordings_dir)) + for basename in orphan_db_records: + if dry_run: + print("Found orphan:", basename) + else: + print("Deleting orphan:", basename) + delete_orphan_record(db_connection, basename) + +def print_usage_exit(): + print("Usage: %s [-f|-n]" % sys.argv[0]) + sys.exit(1) + +def find_orphan_db_records(db_connection, recordings_dir): + with db_connection.cursor() as cursor: + cursor.execute(""" + SELECT basename + FROM recorded + WHERE progend < now() + """) + for row in cursor: + basename = row[0] + if not is_valid_record(recordings_dir, basename): + yield basename + +def is_valid_record(recordings_dir, basename): + filename = "%s/%s" % (recordings_dir, basename) + try: + size = os.stat(filename).st_size + except FileNotFoundError: + size = 0 + + return size > 0 + +def delete_orphan_record(db_connection, basename): + with db_connection.cursor() as cursor: + cursor.execute("delete from recorded where basename='%s'" % basename) + +if __name__ == "__main__": + if len(sys.argv) != 2: + print_usage_exit() + + if sys.argv[1] == "-f": + dry_run = False + elif sys.argv[1] == "-n": + dry_run = True + else: + print_usage_exit() + + main(dry_run)