-
This commit is contained in:
9
gui.rkt
9
gui.rkt
@@ -239,18 +239,21 @@
|
|||||||
(displayln (format "Open booklet ~a" path)))
|
(displayln (format "Open booklet ~a" path)))
|
||||||
|
|
||||||
(define/public (open-folder path)
|
(define/public (open-folder path)
|
||||||
(displayln (format "open folder ~a" path)))
|
(displayln path)
|
||||||
|
(let ((folder (if (file-exists? path) (path-only path) path)))
|
||||||
|
(open-file-manager folder)))
|
||||||
|
;(shell-execute #f folder #f #f 'sw_show)))
|
||||||
|
|
||||||
(define/public (play)
|
(define/public (play)
|
||||||
(displayln "Play button clicked")
|
(displayln "Play button clicked")
|
||||||
)
|
)
|
||||||
|
|
||||||
(define/public (next-track)
|
(define/public (next-track)
|
||||||
(displayln "Next track")
|
(send player next)
|
||||||
)
|
)
|
||||||
|
|
||||||
(define/public (previous-track)
|
(define/public (previous-track)
|
||||||
(displayln "Previous track")
|
(send player previous)
|
||||||
)
|
)
|
||||||
|
|
||||||
(define/public (repeat)
|
(define/public (repeat)
|
||||||
|
|||||||
56
player.rkt
56
player.rkt
@@ -35,6 +35,8 @@
|
|||||||
(define current-length 0)
|
(define current-length 0)
|
||||||
(define current-seconds 0)
|
(define current-seconds 0)
|
||||||
|
|
||||||
|
(define repeat 'no-repeat) ;; no-repeat, repeat-1, repeat-all
|
||||||
|
|
||||||
(define play-time-updater-state 'stopped)
|
(define play-time-updater-state 'stopped)
|
||||||
|
|
||||||
(define (check-ao-handle)
|
(define (check-ao-handle)
|
||||||
@@ -57,7 +59,7 @@
|
|||||||
(displayln "Starting play-time-updater")
|
(displayln "Starting play-time-updater")
|
||||||
(thread (λ ()
|
(thread (λ ()
|
||||||
(define (updater)
|
(define (updater)
|
||||||
(if (eq? ao-handle #f)
|
(if (or (eq? ao-handle #f) closing)
|
||||||
(begin
|
(begin
|
||||||
(set! play-time-updater-state 'stopped)
|
(set! play-time-updater-state 'stopped)
|
||||||
(displayln "Stopping play-time-updater")
|
(displayln "Stopping play-time-updater")
|
||||||
@@ -121,10 +123,11 @@
|
|||||||
(displayln (format "opening flac handle for file: ~a" file))
|
(displayln (format "opening flac handle for file: ~a" file))
|
||||||
(set! flac-handle (flac-open file flac-meta flac-play))
|
(set! flac-handle (flac-open file flac-meta flac-play))
|
||||||
(displayln "Starting flac-read")
|
(displayln "Starting flac-read")
|
||||||
(flac-read flac-handle)
|
(let ((result (flac-read flac-handle)))
|
||||||
(set! state 'track-feeded)
|
(if (eq? result 'end-of-stream)
|
||||||
(displayln "Flac read stopped")
|
(set! state 'track-feeded)
|
||||||
'track-feeded
|
(displayln "Flac read stopped")))
|
||||||
|
'worker-done
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -190,17 +193,46 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
(define/public (play-track i)
|
(define/public (play-track i)
|
||||||
(unless (eq? flac-handle #f)
|
(displayln (format "play-track ~a" i))
|
||||||
(flac-stop flac-handle)
|
;(unless (eq? flac-handle #f)
|
||||||
(set! flac-handle #f)
|
; (flac-stop flac-handle)
|
||||||
)
|
; (set! flac-handle #f)
|
||||||
|
; )
|
||||||
|
;(set! track i)
|
||||||
|
;(set! ct-data (send pl track i))
|
||||||
|
;(while (eq? state 'playing)
|
||||||
|
; (sleep 0.1))
|
||||||
|
;(unless (eq? ao-handle #f)
|
||||||
|
; (ao-clear-async ao-handle))
|
||||||
|
;(set! state 'play)
|
||||||
|
;(track-nr-updater i)
|
||||||
|
(set! state 'stopped)
|
||||||
|
(close-player*)
|
||||||
(set! track i)
|
(set! track i)
|
||||||
(set! ct-data (send pl track i))
|
(set! ct-data (send pl track i))
|
||||||
(while (eq? state 'playing)
|
|
||||||
(sleep 0.1))
|
|
||||||
(set! state 'play)
|
(set! state 'play)
|
||||||
(track-nr-updater i)
|
(track-nr-updater track)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
(define/public (next)
|
||||||
|
(if (= (send pl length) 0)
|
||||||
|
#f
|
||||||
|
(let ((idx track))
|
||||||
|
(set! idx (+ idx 1))
|
||||||
|
(when (>= idx (send pl length))
|
||||||
|
(set! idx 0))
|
||||||
|
(send this play-track idx))
|
||||||
|
))
|
||||||
|
|
||||||
|
(define/public (previous)
|
||||||
|
(if (= (send pl length) 0)
|
||||||
|
#f
|
||||||
|
(let ((idx track))
|
||||||
|
(set! idx (- idx 1))
|
||||||
|
(when (< idx 0)
|
||||||
|
(set! idx (- (send pl length) 1)))
|
||||||
|
(send this play-track idx)
|
||||||
|
)))
|
||||||
|
|
||||||
(define (state-machine)
|
(define (state-machine)
|
||||||
(let ((st (orig-current-seconds))
|
(let ((st (orig-current-seconds))
|
||||||
|
|||||||
39
playlist.rkt
39
playlist.rkt
@@ -41,16 +41,40 @@
|
|||||||
(super-new)
|
(super-new)
|
||||||
(begin
|
(begin
|
||||||
(unless (eq? file #f)
|
(unless (eq? file #f)
|
||||||
(let ((tags (id3-tags (format "~a" file))))
|
(let ((f (if (path? file) (path->string file) file)))
|
||||||
(set! title (tags-title tags))
|
(let ((tags (id3-tags f))
|
||||||
(set! artist (tags-artist tags))
|
(tmpfile #f))
|
||||||
(set! album (tags-album tags))
|
(unless (tags-valid? tags)
|
||||||
(set! number (tags-track tags))
|
(the-displayln "Invalid, try to open a copy of this file")
|
||||||
(set! length (tags-length tags))
|
(let ((nfile (make-temporary-file "rktplayer-~a" #:copy-from f)))
|
||||||
|
(set! tags (id3-tags nfile))
|
||||||
|
(set! tmpfile nfile)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(if (tags-valid? tags)
|
||||||
|
(begin
|
||||||
|
(set! title (tags-title tags))
|
||||||
|
(set! artist (tags-artist tags))
|
||||||
|
(set! album (tags-album tags))
|
||||||
|
(set! number (tags-track tags))
|
||||||
|
(set! length (tags-length tags))
|
||||||
|
)
|
||||||
|
(begin
|
||||||
|
(set! title "invalid tags")
|
||||||
|
(set! artist "invalid tags")
|
||||||
|
(set! album "invalid tags")
|
||||||
|
(set! number number)
|
||||||
|
(set! length -1)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(unless (eq? tmpfile #f)
|
||||||
|
(delete-file tmpfile))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
))
|
)
|
||||||
|
)
|
||||||
|
|
||||||
(define list-len length)
|
(define list-len length)
|
||||||
|
|
||||||
@@ -85,6 +109,7 @@
|
|||||||
(if (directory-exists? p)
|
(if (directory-exists? p)
|
||||||
(read-tracks-internal p)
|
(read-tracks-internal p)
|
||||||
(when (and (file-exists? p) (can-add? p))
|
(when (and (file-exists? p) (can-add? p))
|
||||||
|
;(displayln (format "Adding ~a" p))
|
||||||
(add-track* p)))))
|
(add-track* p)))))
|
||||||
content))
|
content))
|
||||||
'no-file-or-dir
|
'no-file-or-dir
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
mktable
|
mktable
|
||||||
simple-row-formatter
|
simple-row-formatter
|
||||||
while
|
while
|
||||||
|
open-file-manager
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -70,5 +71,11 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
(define (open-file-manager path)
|
||||||
|
(let ((folder (if (path? path) (path->string path) path)))
|
||||||
|
(case (system-type 'os)
|
||||||
|
[(windows) (process (string-append "explorer.exe " folder))]
|
||||||
|
[(macosx) (process (string-append "open " folder))]
|
||||||
|
[else (process (string-append "xdg-open " folder))]))
|
||||||
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user