! Copyright (C) 2010 Brit Butler ! See http://factorcode.org/license.txt for BSD license. USING: kernel io namespaces sequences command-line io.directories.search io.files io.pathnames io.launcher combinators random ; IN: randomfile ! TODO: ! Improve play-options, fail case should print the file that failed and\or cli opts. ! A macro to tidy up play-options or the extension definitions. ! User config file for programs and their args? : vid? ( extension -- ? ) { "avi" "mp4" "mov" "flv" "m4v" "mpg" "mpeg" "mkv" "ogm" "ogv" } member? ; : doc? ( extension -- ? ) { "ps" "pdf" "djvu" "dvi" } member? ; : img? ( extension -- ? ) { "jpg" "png" } member? ; : mp3? ( extension -- ? ) { "mp3" } member? ; : ogg? ( extension -- ? ) { "ogg" } member? ; : play-options ( filepath -- filepath process-desc ) { { [ dup file-extension vid? ] [ { "smplayer" "-fullscreen" } ] } { [ dup file-extension doc? ] [ { "evince" } ] } { [ dup file-extension img? ] [ { "feh" "--bg-scale" } ] } { [ dup file-extension mp3? ] [ { "mpg123" } ] } { [ dup file-extension ogg? ] [ { "ogg123" } ] } [ "Error: not implemented yet." throw ] } cond ; : play-file ( file process-desc -- process ) swap suffix run-detached ; ! Use push here instead? : choose-file ( dirpath -- filepath ) t recursive-directory-files 1 sample first ; : check-args ( -- string ) command-line get [ "Usage: randomfile " ] when-empty ; : validate-dir ( string -- filepath? ) [ dup exists? ] [ choose-file ] when ; : randomfile ( -- process ) check-args validate-dir play-options play-file ; MAIN: randomfile