From dbd042fdac6715e0b7f3361ac69f7c19218788fa Mon Sep 17 00:00:00 2001 From: wes Date: Mon, 5 Mar 2012 16:29:20 -0500 Subject: [PATCH] made everything work --- config_parser.rkt | 2 ++ lazyplay.rkt | 66 ++++++++++++++++++++++++++++------------------- lazyplay.sexp | 5 ++-- 3 files changed, 44 insertions(+), 29 deletions(-) mode change 100644 => 100755 lazyplay.rkt diff --git a/config_parser.rkt b/config_parser.rkt index bf566cc..327fcdb 100755 --- a/config_parser.rkt +++ b/config_parser.rkt @@ -9,3 +9,5 @@ (define settings (make-hash)) (update settings parsed) + +(provide settings) \ No newline at end of file diff --git a/lazyplay.rkt b/lazyplay.rkt old mode 100644 new mode 100755 index 7a87280..c1e62d7 --- a/lazyplay.rkt +++ b/lazyplay.rkt @@ -3,33 +3,36 @@ (require racket/system) (require "helpers.rkt") +(require "config_parser.rkt") (define args (vector->list (current-command-line-arguments))) ; args: filename, mplayer-args ; optional: directory - -(define mplcmd (string->path "/usr/bin/mplayer")) ; command used to play files - ; output file to /dev/null/ +(hash-ref settings "args" "") +(define file-types (make-hash)) +(define media-player (string->path (hash-ref settings "player" "/usr/bin/mplayer"))) +(define player-args (hash-ref settings "args" "")) +(update file-types (hash-ref settings "file-types" '(("avi" #t)))) (define (file-list) ; list of files in the current working directory (map path->string ; get the strings from the list of paths (directory-list (current-directory)))) ; check if a filename has a desired suffix -(define (check-suffix suffix) +(define (check-suffix file-types) (compose - (partial string=? suffix) + (partial hash-has-key? file-types) (lambda (x) (let* ((len (string-length x) )) (substring x (- len 3) len))))) ; filter out filenames without the desired suffix -(define (filter-paths suffix paths) - (filter (check-suffix suffix) paths)) +(define (filter-paths file-types paths) + (filter (check-suffix file-types) paths)) (define (play-list) - (sort-paths (filter-paths (first args) (file-list)))) ; first commandline argument is the filename + (sort-paths (filter-paths file-types (file-list)))) ; first commandline argument is the filename ; sortgetter, gets the episode number and converts it to an integer (define (sortgetter file-name) @@ -56,38 +59,47 @@ ; (define (controller pid out) -(define (play-files filenames) +(define (play-files filenames args) (let* ((nullport (open-output-file (string->path "/dev/null") #:exists 'append))) ; we don't want any output from the process (call-with-values - (lambda () (subprocess nullport #f nullport mplcmd (car filenames))) + (lambda () (subprocess nullport #f nullport media-player (car filenames) args)) list))) ; convert the 4 return values into a list -(define (play fnames played) +(define (get-args message) + (cond ((false? message) player-args) + (else message))) + +(define (play fnames played args) (cond ((null? fnames) '()) (else - (let* ((results (play-files fnames))) ; get the pid and the 3 i/o ports + (let* ((results (play-files fnames args))) ; get the pid and the 3 i/o ports ; send the other thread the new pid here ; and the output port for piping input to the process - ; (thread-send thd (first results)) + ; (thread-send controller-thread ((third results) (first results))) (subprocess-wait (first results)) (close-output-port (third results))) (let* ((newfs (new-files played (play-list)))) - (play (append (cdr fnames) newfs) (update played newfs)))))) - -(play (play-list) played) -(define (controller) - (let* ((input (read (current-input-port)))) - (cond ((eof-object? input)) + (play (append (cdr fnames) newfs) (update played newfs) (get-args (thread-try-receive))))))) + +(define (controller player-thread) + (cond + ((compose not thread-running?) player-thread ; if the thread is not running then return + '())) + (let* ((input (read-line (current-input-port) 'linefeed))) + input + (cond ((eof-object? input) '()) (else - (printf "output: ~A\n" input) - (controller))))) - + (thread-send player-thread input) + (controller player-thread))))) -; (define (main) - ; (printf "Beginning (main)\n") - ; (thread controller)) - ; (sleep 1000) +(define player-thread (thread (lambda () (play (play-list) played player-args)))) +(define controller-thread (thread (lambda () (controller player-thread)))) +; check to see if the player is running, and if not then kill the controller +(define (check) + (sleep 20) + (cond (((compose not thread-running?) player-thread) (kill-thread controller-thread)) + (else (check)))) -; (main) +(check) \ No newline at end of file diff --git a/lazyplay.sexp b/lazyplay.sexp index 8cc294a..0d4a6f3 100644 --- a/lazyplay.sexp +++ b/lazyplay.sexp @@ -1,2 +1,3 @@ -(("player" "mplayer") -("filetypes" ("avi" "mp4"))) \ No newline at end of file +(("player" "/usr/bin/mplayer") +("filetypes" (("avi" #t) ("mp4" #t))) +("args" "-ss 5000")) \ No newline at end of file