aboutsummaryrefslogtreecommitdiff
path: root/scripts/delete-if-unlinked.py
diff options
context:
space:
mode:
authorChristian Segundo2023-10-06 19:34:59 +0200
committerChristian Segundo2023-10-06 19:34:59 +0200
commit66cba1261e4e734cd0571351c0bbba6a305099d8 (patch)
tree7a726e978e9f8869e8bca79ebf37397a830b5e5c /scripts/delete-if-unlinked.py
parent02b189653a1f4a3b98fc200e2280c86aa31eda5c (diff)
parent3c0cd71bc9b7ec681a2ff373c1385cca53a9a3bf (diff)
downloadtransmission-hacks-66cba1261e4e734cd0571351c0bbba6a305099d8.tar.gz
Merge remote-tracking branch 'origin/feat/delete-if-unlinked'
Diffstat (limited to 'scripts/delete-if-unlinked.py')
-rw-r--r--scripts/delete-if-unlinked.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/scripts/delete-if-unlinked.py b/scripts/delete-if-unlinked.py
new file mode 100644
index 0000000..54df8ff
--- /dev/null
+++ b/scripts/delete-if-unlinked.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+import click
+import os
+from transmission_rpc import Client
+from datetime import timedelta, datetime
+
+
+def convert_to_seconds(s):
+ units = {"s": "seconds", "m": "minutes",
+ "h": "hours", "d": "days", "w": "weeks"}
+ count = int(s[:-1])
+ unit = units[s[-1]]
+ td = timedelta(**{unit: count})
+ return td.seconds + 60 * 60 * 24 * td.days
+
+def has_links(torrent):
+ for file in torrent.get_files():
+ file_path = torrent.download_dir + '/' + file.name
+ if not os.path.exists(file_path):
+ continue
+ if os.stat(file_path).st_nlink > 1:
+ return True
+ return False
+
+
+@click.command()
+@click.option('--port', default=9091)
+@click.option('--host', default="localhost")
+@click.option('--tag', required=True)
+@click.option('--min-age', default='1w')
+def main(host, port, tag, min_age):
+ """ Deletes torrents older than the specified age if no file has a link. """
+
+ c = Client(host=host, port=port)
+ torrents = c.get_torrents()
+ for torrent in torrents:
+ if tag not in torrent.labels:
+ continue
+
+ specified_age = convert_to_seconds(min_age)
+ age_in_seconds = int((datetime.today().timestamp() -
+ torrent.done_date.timestamp()))
+
+ if age_in_seconds < specified_age:
+ continue
+
+ if not has_links(torrent):
+ print(f"Deleting {torrent.name}")
+ c.remove_torrent(torrent.id, delete_data=True)
+
+
+if __name__ == '__main__':
+ main()