--- /dev/null
+#!/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)