diff --git a/gui.rkt b/gui.rkt index 38ef85a..6519cc4 100644 --- a/gui.rkt +++ b/gui.rkt @@ -174,7 +174,7 @@ ) (define/public (update-tabs) - (displayln (format "playlist = ~a" playlist)) + (dbg-rktplayer "playlist = ~a" playlist) (let* ((tabs (send playlist tab-count)) (html "") (tab-el (send this element 'tabs)) @@ -342,7 +342,7 @@ (send this connect-menu! 'm-select-library-dir (λ () (send this select-library))) (send this connect-menu! 'm-add-tab (λ () (send this add-tab))) - (displayln (format "page-loaded, playlist = ~a" playlist)) + (dbg-rktplayer "page-loaded, playlist = ~a" playlist) (send this update-tabs) (send this update-library) (send this update-playlist) @@ -532,11 +532,19 @@ (send player seek percentage) ) + (define quit-callback (lambda () #t)) + + (define/public (on-quit callback) + (set! quit-callback callback)) + (define/public (quit) (dbg-rktplayer "Quitting") (send player quit) (set! closed #t) - (send this close)) + (send this close) + (quit-callback) + (exit) + ) (define/public (select-library) (let ((dir (send this choose-dir @@ -556,13 +564,13 @@ ) (begin - (displayln "Initalizing gui") + (dbg-rktplayer "Initalizing gui") (dbg-rktplayer "ICON: ~a" (get-field icon this)) (let ((lang (send settings get 'lang 'en))) (dbg-rktplayer "RktPlayer started, current language: ~a" lang)) (set! playlist (new playlist% [settings (send settings clone 'playlists)])) (send player set-list! playlist) - (displayln (format "playlist = ~a" playlist)) + (dbg-rktplayer "playlist = ~a" playlist) (semaphore-post initialized) ) ) diff --git a/playlist.rkt b/playlist.rkt index 0b22bf0..abae0a7 100644 --- a/playlist.rkt +++ b/playlist.rkt @@ -5,7 +5,7 @@ racket-sound "utils.rkt" racket-sprintf - "keystore.rkt" + keystore/class ) (provide track% @@ -165,7 +165,7 @@ [settings #f] ) - (define store (new keystore% [filename "rktplayer.store"])) + (define store (new keystore% [file 'rktplayer])) (define tracks '()) (define (can-add? file) @@ -274,12 +274,12 @@ (let* ((entry id) (idx (send this tab-index entry)) ) - (displayln (format "entry id = ~a, ~a" entry idx)) + (dbg-rktplayer "entry id = ~a, ~a" entry idx) (if (eq? idx #f) (err-rktplayer "Cannot get tab for id ~a" entry) (let ((value (list (send this get-tab-name idx) (map (λ (track) - (format "~a" (send track get-file))) + (send track get-file)) tracks)))) (send store set! entry value) ) @@ -291,7 +291,7 @@ (let* ((t (tabs)) (entry (list-ref t idx)) ) - (displayln (format "loading ~a" entry)) + (dbg-rktplayer "loading ~a" entry) (set! id entry) (set! tracks '()) (let ((value (send store get entry (list "Default" '())))) diff --git a/rktplayer.rkt b/rktplayer.rkt index 3f02c3d..9f7211a 100644 --- a/rktplayer.rkt +++ b/rktplayer.rkt @@ -10,6 +10,8 @@ net/uri-codec ) +(provide run-rktplayer) + (define-runtime-path rkt-gui-dir "gui") (define log-file (build-path (find-system-path 'home-dir) ".rktplayer.log")) @@ -45,7 +47,13 @@ (window (new rktplayer% [wv-context context])) ) ;(send window devtools) - window) + (let ((sem (make-semaphore))) + (send window on-quit (lambda () (semaphore-post sem))) + sem) + ) ) -;(run) \ No newline at end of file +(define (run-rktplayer) + (let ((sem (run))) + (semaphore-wait sem))) +