(defgroup media ()
"Major mode to control media players"
- :version "1.2.1")
+ :version "1.2.2")
(defcustom media/player-api "media-mplayer"
"The file to load for the abstract layer with the media player."
:type 'boolean
:group 'media)
+(defcustom media/continue-mode-hint "*"
+ "What to append to the MPlayer string when in repeat mode"
+ :type 'string
+ :group 'media)
+
(defcustom media/expert nil
- "Should the keymap help be shown?"
+ "Should we bypass the keymap help when starting"
:type 'boolean
:group 'media)
"Contains the name of the current file playing, the frequency in Hz
and the bitrate. Should be nil if no information is available.")
+(defvar media/current-song-in-stream nil
+ "Contains the title of the current song playing, as it may be
+parsed from the stream.")
+
(defvar media/buffer nil
"The main buffer for the media player mode.")
;; Finding and playing URLs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defun media/reset-current-information ()
+ (setq media/current-information nil
+ media/current-song-in-stream nil))
+
(defun media/format-url (url)
(if (string-match "^file:.*/\\([^/]+\\)$" url)
(match-string 1 url)
(time (get-text-property position 'time)))
(if (not url) (media/remove-highlight)
(run-hook-with-args 'media/before-play-hook url)
- (setq media/current-information nil)
+ (media/reset-current-information)
(media/api/play url)
;; We keep the information of the url and the title
(setq media/played-information (cons url (get-text-property position 'title)))
(title (or (and (consp c) (cdr c)) url)))
(if (string-match "^\\(http\\|mms\\)://" url)
(media/insert-url (cons url title) 0)
- (if (file-regular-p url) (media/insert-file url 0)
- (if (file-directory-p url) (media/insert-dir url 0)
- (error "Unknown type `%s'" url))))))
+ (if (file-exists-p url)
+ (if (file-regular-p url) (media/insert-file url 0)
+ (if (file-directory-p url) (media/insert-dir url 0)
+ (error "Unknown type `%s'" url))))
+ )))
list))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(push (cons url (cons title time)) (cdr (assoc playlist list)))
)))))
- (save-excursion
- (set-buffer (find-file-noselect media/playlist-file))
+ (with-current-buffer (find-file-noselect media/playlist-file)
(erase-buffer)
(mapc (lambda (x)
(insert "PLAYLIST:" (car x) "\n")
(propertize "\n" 'playlist name)
)
(setq media/active-playlist name)
- (message "Playlist `%s' created" name)))
+ ;; (message "Playlist `%s' created" name)
+ ))
(defun media/playlist-position (name)
"Returns the position where the given playlist starts."
(defun media/stop () (interactive)
(message "Stop")
+ (media/reset-current-information)
(media/api/stop))
(defun media/queue-song-at-point ()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defun media/player-error ()
+ (message "Player error")
+ (media/reset-current-information)
+ (media/remove-highlight))
+
+(defun media/song-terminates ()
+ (with-current-buffer media/buffer
+ (if media/continue-mode (media/play-next t)
+ (media/reset-current-information)
+ (media/remove-highlight))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
(defun media/switch-continue-mode ()
"Switches between a mode which automatically chains files and a mode
which stops when the songs ends."
(message "Continue mode switched off."))
)
-(defun media/player-error ()
- (message "Player error")
- (media/remove-highlight))
-
-(defun media/song-terminates ()
- (with-current-buffer media/buffer
- (if media/continue-mode (media/play-next t)
- (media/remove-highlight))))
-
(defun media/duration-to-string (duration)
(let ((sec (mod duration 60))
(min (/ duration 60)))
(concat
" "
media/player-id
- (if media/continue-mode "*")
+ (if media/continue-mode media/continue-mode-hint)
" "
(if media/current-information
"Print a message with informations about the song currently playing"
(interactive)
(if media/current-information
- (message "Now playing %s (%dHz, %s, %dkbit/s)"
+ (message "Now playing %s %s(%dHz, %s, %dkbit/s)"
(or (and (string= (car media/played-information) (nth 0 media/current-information))
(cdr media/played-information))
(replace-regexp-in-string "^.*/\\([^/]*\\)$" "\\1" (nth 0 media/current-information)))
+ ;; (if media/current-song-in-stream (concat "[" media/current-song-in-stream "] ") "")
+ (if media/current-song-in-stream (concat "| " media/current-song-in-stream " ") "")
(nth 1 media/current-information)
(if (= 2 (nth 2 media/current-information)) "stereo" "mono")
(nth 3 media/current-information))