diff --git a/aria2_on_done.py b/aria2_on_done.py new file mode 100755 index 0000000..dc5421b --- /dev/null +++ b/aria2_on_done.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +import base64 +import logging +import os +import sys +from pathlib import Path +from urllib.error import HTTPError, URLError +from urllib.parse import quote +from urllib.request import Request, urlopen + +logging.basicConfig( + filename=Path(__file__).with_suffix(".log"), + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(message)s", +) +logger = logging.getLogger(__name__) + + +def is_temp(file_path: Path) -> bool: + return ".PRT" in file_path.name + + +def delete_from_remote(file_path: Path) -> None: + url = f"https://u201686.your-storagebox.de/files/_raw/prt/{quote(file_path.name)}" + credentials = "u201686:T6672ICVoWAedECH" + request = Request(url, method="DELETE", headers={"Authorization": f"Basic {base64.b64encode(credentials.encode()).decode()}"}) + + try: + with urlopen(request, timeout=2): + return + except HTTPError as e: + if e.code == 404: + return + + +def main(): + logger.info(sys.argv) + + if len(sys.argv) < 3: + logger.error("Missing expected argument: downloaded file path.") + return + + downloaded_path = Path(sys.argv[2]) + if not downloaded_path.is_file(): + logger.warning("File does not exist: %s", downloaded_path) + return + + if not is_temp(downloaded_path): + logger.info("File evaluated as non-temp: %s", downloaded_path) + return + + target_dir = Path("~/Downloads/temp/").expanduser() + target_dir.mkdir(parents=True, exist_ok=True) + + target_path = target_dir / downloaded_path.name + downloaded_path.rename(target_path) + logger.info("Moved %s to %s", downloaded_path, target_path) + try: + delete_from_remote(downloaded_path) + except Exception as e: + logger.error("Error deleting %s from remote: %s", downloaded_path, e) + + +if __name__ == "__main__": + main()