#!/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() AND recgroup NOT IN ('LiveTV', 'Deleted') """) 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)