)
(define (autodl-main args)
- (let ((dc-server #f) (done #f) (retval 0))
+ (let ((dc-server #f) (done #f) (retval 0) (filterexit ""))
(let ((getopt (make-getopt (cdr args) "whs:S:e:p:t:a:I:")) (arg #f))
(do ((arg (getopt) (getopt))) ((not (and (pair? arg) (char? (car arg)))) (set! args arg))
(cond ((eq? (car arg) #\h)
(let ((c (assoc 'info-file session)))
(if c (set-cdr! c (cdr arg))
(set! session (cons (cons 'info-file (cdr arg)) session)))))
+ ((eq? (car arg) #\E)
+ (let ((c (assoc 'estat-file session)))
+ (if c (set-cdr! c (cdr arg))
+ (set! session (cons (cons 'estat-file (cdr arg)) session)))))
((eq? (car arg) #\e)
(set! session (cons (cons 'sexpr (dc-lexsexpr (cdr arg))) session)))
((eq? (car arg) #\w)
(if (not (assoc 'maxtrans session))
(set! session (cons '(maxtrans . 1) session)))
(if (not (assoc 'search-mode session))
- (set! session (cons '(search-mode . wait) session)))
+ (set! session (cons '(search-mode . normal) session)))
(if (not (validate-session session)) (begin (display "Invalid session!\n" (current-error-port)) (exit 1)))
(if (not dc-server) (set! dc-server (getenv "DCSERVER")))
(if (not dc-server) (set! dc-server "localhost"))
(lambda (key . args)
(logf (string-append "could not connect to server: " (apply format #f (cadr args) (caddr args))))
(exit 2)))
- (dc-ecmd-assert 200 "notify" "all" "on")
+ (dc-ecmd-assert 200 "notify" "trans:act" "on" "trans:prog" "on" "srch:act" "on")
(for-each (lambda (sig) (sigaction sig (lambda (sig) (throw 'sig sig)))) (list SIGINT SIGTERM SIGHUP))
(catch 'sig
(lambda ()
(let* ((ires (dc-intresp resp)) (tr (and ires (assoc (car ires) trans))))
(if tr
(begin (if (eq? (cdr (assoc 'state (cdr tr))) 'done)
- (begin (logf (string-append "transfer " (number->string (car ires)) " done"))
+ (begin (logf (string-append "transfer " (number->string (car ires)) " done (" (cadr ires) ")"))
(set! trans (assq-remove! trans (car ires)))
(set! done #t)
+ (set! filterexit (cadr ires))
(throw 'sig 0))
(begin (logf (string-append "transfer " (number->string (car ires)) " disappeared"))
(set! trans (assq-remove! trans (car ires)))))))))
)))
(lambda (key sig)
(logf "forcing quit")))
+ (if (assoc 'estat-file session)
+ (let ((op (open-output-file (cdr (assoc 'estat-file session)))))
+ (write filterexit op)
+ (newline op)
+ (close-port op)))
(exit retval)
)
)