(import scheme) (import (chicken base)) (import (chicken file)) (import (chicken irregex)) (import (chicken pathname)) (import (chicken process-context)) (import (srfi 1)) (import (srfi 18)) (import inotify) (import scsh-process) (define downloads-dir (make-pathname (get-environment-variable "HOME") "downloads")) (define remote-dir "box:torrents/autoadd") (define rsync-flags '("--remove-source-files")) (define torrent-re '(: bos (* any) ".torrent" eos)) (define timeout 3) (init!) (on-exit clean-up!) (add-watch! downloads-dir '(close-write moved-to)) (let loop () (let* ((event (next-event!)) (flags (event-flags event)) (file (event-name event)) (path (make-pathname downloads-dir file))) (when (and (= (length flags) 1) ; file written / moved (irregex-match torrent-re file)) (let loop () (let ((paths (find-files downloads-dir test: torrent-re))) (for-each print paths) (print "uploading files...") (run (rsync ,@rsync-flags ,@paths ,remote-dir)) (thread-sleep! timeout) (when (any file-exists? paths) ; rsync didn't succeed for some reason (loop)))))) (loop))