import config import os import time import sqlite3 import subprocess def run(): connection = sqlite3.connect(config.db_file) cursor = connection.cursor() now = int(time.time()) max_created_utc = now - config.max_age_seconds print("Deleting old posts") delete = "DELETE FROM post WHERE created_utc < ?" binds = [max_created_utc] cursor.execute(delete, binds) print("Deleting posts from blocked subreddits") select = "SELECT name FROM block WHERE name like '/r/%'" binds = [row[0][3:] for row in cursor.execute(select).fetchall()] bind_array = ",".join(["?"]*len(binds)) delete = f"DELETE FROM post WHERE subreddit IN ({bind_array})" cursor.execute(delete, binds) print("Deleting old media db rows") delete = "DELETE FROM media WHERE permalink NOT IN (SELECT permalink FROM post)" cursor.execute(delete) print("Deleving media db for read posts") delete = "DELETE FROM media WHERE permalink IN (SELECT permalink FROM post WHERE hidden = ?)" binds = [True] cursor.execute(delete, binds) print("Updating media_fetched for read posts") update = "UPDATE post SET media_fetched = ? WHERE hidden = ?" binds = [False, True] cursor.execute(update, binds) all_files_local = subprocess.run(["find", "/reddit/media", "-type", "f"], capture_output=True, text=True) all_files_local = set(all_files_local.stdout.splitlines()) select = "SELECT local from media" results = cursor.execute(select).fetchall() connection.commit() connection.close() all_files_db = set([row[0] for row in results]) extra_files = all_files_local - all_files_db print("Deleting old files") for file in extra_files: print(f"Removing {file}") os.remove(file) empty_dirs = subprocess.run(["find", "/reddit/media", "-type", "d", "-empty"], capture_output=True, text=True) empty_dirs = set(empty_dirs.stdout.splitlines()) print("Deleting empty directories") for dir in empty_dirs: print(f"Removind dir {dir}") os.rmdir(dir) print("Done") run()