summaryrefslogtreecommitdiffstats
path: root/emacs/site-lisp/metalexpress.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs/site-lisp/metalexpress.el')
-rw-r--r--emacs/site-lisp/metalexpress.el80
1 files changed, 80 insertions, 0 deletions
diff --git a/emacs/site-lisp/metalexpress.el b/emacs/site-lisp/metalexpress.el
new file mode 100644
index 0000000..d4a92d7
--- /dev/null
+++ b/emacs/site-lisp/metalexpress.el
@@ -0,0 +1,80 @@
+;;; metalexpress.el --- Listen to Metal Express Radio
+
+;; Copyright (C) 2012 Tom Willemse
+
+;; Author: Tom Willemse <thomas@aethon.nl>
+;; Keywords: multimedia
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Functions for easily listening to Metal Express Radio.
+
+;;; Code:
+
+(defgroup metal-express-radio nil
+ "Group for the Metal Express Radio listening functions."
+ :group 'multimedia)
+
+(defcustom metal-express-radio-playlist-url
+ "http://usa7-vn.mixstream.net/listen/8248.m3u"
+ "The URL of the Metal Express Radio stream."
+ :group 'metal-express-radio
+ :type 'string)
+
+(defcustom metal-express-radio-song-changed-hook nil
+ "Hook run when the currently playing song changes."
+ :type 'hook
+ :group 'metal-express-radio)
+
+(defvar metal-express-radio-currently-playing nil
+ "The currently playing song.")
+
+(defun mer-proc-filter (proc string)
+ (when (string-match "^ICY Info: StreamTitle='\\(.*\\)';StreamUrl='';"
+ string)
+ (setq metal-express-radio-currently-playing (match-string 1 string))
+ (apply 'run-hooks metal-express-radio-song-changed-hook)))
+
+(defun metal-express-radio-echo-currently-playing ()
+ (interactive)
+ (message metal-express-radio-currently-playing))
+
+(defun metal-express-radio-notify ()
+ (interactive)
+ (notifications-notify :title "Now playing:"
+ :body metal-express-radio-currently-playing))
+
+;;;###autoload
+(defun metal-express-radio-start ()
+ "Start listening to Metal Express Radio."
+ (interactive)
+ (let ((proc (start-process "metalexpress" "*Metal Express Radio*"
+ "mplayer" metal-express-radio-playlist-url)))
+ (set-process-filter proc #'mer-proc-filter)))
+
+(defun metal-express-radio-stop ()
+ "Stop listening to Metal Express Radio."
+ (interactive)
+ (kill-process (get-buffer-process "*Metal Express Radio*"))
+ (setq metal-express-radio-currently-playing nil))
+
+(add-hook 'metal-express-radio-song-changed-hook
+ 'metal-express-radio-echo-currently-playing)
+(add-hook 'metal-express-radio-song-changed-hook
+ 'metal-express-radio-notify)
+
+(provide 'metalexpress)
+;;; metalexpress.el ends here