aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emms-info-mp3info.el142
1 files changed, 34 insertions, 108 deletions
diff --git a/emms-info-mp3info.el b/emms-info-mp3info.el
index f1a0ed9..e20056c 100644
--- a/emms-info-mp3info.el
+++ b/emms-info-mp3info.el
@@ -2,7 +2,8 @@
;; Copyright (C) 2003 Free Software Foundation, Inc.
-;; Author: Ulrik Jensen <terryp@daimi.au.dk>
+;; Authors: Ulrik Jensen <terryp@daimi.au.dk>
+;; Jorgen Schäfer <forcer@forcix.cx>
;; Keywords:
;; This file is free software; you can redistribute it and/or modify
@@ -24,135 +25,60 @@
;; This code has been adapted from code found in mp3player.el, written
;; by Jean-Philippe Theberge (jphiltheberge@videotron.ca), Mario
-;; Domgoergen (kanaldrache@gmx.de) and Jorgen Schäfer
+;; Domgoergen (kanaldrache@gmx.de) and Jorgen Schäfer
;; <forcer@forcix.cx>
;; To activate this method for getting info, use something like:
;; (require 'emms-info-mp3info)
-;; (add-to-list 'emms-info-methods-list 'emms-info-mp3info)
+;; (add-to-list 'emms-info-functions 'emms-info-mp3info)
;;; Code:
-(eval-when-compile (require 'cl))
-(require 'emms-info)
(defvar emms-info-mp3info-version "0.2 $Revision: 1.10 $"
"EMMS info mp3info version string.")
;; $Id: emms-info-mp3info.el,v 1.10 2005/08/12 18:01:16 xwl Exp $
(defgroup emms-info-mp3info nil
- "An EMMS-info method for getting/setting ID3v1 tags, using a
+ "An EMMS-info method for getting/setting ID3v1 tags, using the
external mp3info program"
- :group 'emms-info-methods)
+ :group 'emms-info)
(defcustom emms-info-mp3info-program-name "mp3info"
"*The name/path of the mp3info tag program."
:type 'string
:group 'emms-info-mp3info)
-(defcustom emms-info-mp3info-field-names
- '(title "title"
- artist "artist"
- album "album"
- note "description"
- year "date"
- genre "genre"
- file (emms-track-name track)
- playing-time "playing-time"
- playing-time-min "playing-time-min"
- playing-time-sec "playing-time-sec")
- "Plist of field names."
- :type 'plist
+(defcustom emms-info-mp3findo-arguments
+ `("-p" ,(concat "info-artist=%a\\n"
+ "info-title=%t\\n"
+ "info-album=%l\\n"
+ "info-tracknum=%n\\n"
+ "info-year=%y\\n"
+ "info-genre=%g\\n"
+ "info-note=%c\\n"
+ "info-playing-time=%S\\n"))
+ "The argument to pass to `emms-info-mp3info-program-name'.
+This should be a list of info-flag=value lines."
+ :type '(repeat string)
:group 'emms-info-mp3info)
-(defcustom emms-info-mp3info-set-parameter
- '(title "-t"
- artist "-a"
- album "-l"
- note "-c"
- year "-y"
- genre "-g")
- "Parameter list"
- :type 'plist
- :group 'emms-info-mp3info)
-
-(defcustom emms-info-field-delemiter "="
- "Delemiter between field and content."
- :type 'string
- :group 'emms-info-mp3info)
-
-(defcustom emms-info-field-seperator "\n"
- "Seperator between different fields."
- :type 'string
- :group 'emms-info-mp3info)
-
-
-(define-emms-info-method emms-info-mp3info
- :providep 'emms-info-mp3info-providep
- :get 'emms-info-mp3info-get
- :set 'emms-info-mp3info-set)
-
-(defun emms-info-mp3info-providep (track)
- "Return non-nil if this info-method provides info for the track."
- (if (and track (emms-track-name track)
- (string-match "\\.mp3$" (emms-track-name track)))
- t
- nil))
-
-(defun emms-info-mp3info-set (track info)
- "Set the id3v1 tag of file TRACK to id3info INFO, using the
-mp3info-program"
- ;; 0 = discard & don't wait for termination.
- (call-process emms-info-mp3info-program-name nil 0 nil
- "-a" (emms-info-artist info)
- "-t" (emms-info-title info)
- "-l" (emms-info-album info)
- "-c" (emms-info-note info)
- "-y" (emms-info-year info)
- (emms-track-name track)))
-
-(defun emms-info-retrieve (field)
- "Search for field and get content.
-If there is no field return an empty string"
- (goto-char (point-min))
- (save-match-data
- (or (progn
- (re-search-forward
- (concat field emms-info-field-delemiter "\\(.*\\)"
- emms-info-field-seperator)
- nil t)
- (match-string 1))
- "")))
-
-
-(defun emms-info-mp3info-get (track)
- "Get the id3v1 tag of file TRACK, using the mp3info-program and
-return an emms-info structure representing it."
- (with-temp-buffer
- (call-process emms-info-mp3info-program-name nil t nil
- "-p"
- (concat "title=%t\n" "artist=%a\n" "album=%l\n"
- "date=%y\n" "genre=%G\n" "description=%c\n"
- "playing-time=%S\n" "playing-time-min=%m\n"
- "playing-time-sec=%s\n")
- (emms-track-name track))
- (flet ((retrieve-info (field)
- (goto-char (point-min))
- (save-match-data
- (when (re-search-forward (concat field "=\\(.*\\)")
- nil t)
- (or (match-string 1) "")))))
- (make-emms-info
- :title (retrieve-info "title")
- :artist (retrieve-info "artist")
- :album (retrieve-info "album")
- :note (retrieve-info "description")
- :year (retrieve-info "date")
- :genre (retrieve-info "genre")
- :file (emms-track-name track)
- :playing-time (retrieve-info "playing-time")
- :playing-time-min (retrieve-info "playing-time-min")
- :playing-time-sec (retrieve-info "playing-time-sec")))))
+(defun emms-info-mp3info (track)
+ "Add track information to TRACK.
+This is a useful element for `emms-info-functions'."
+ (when (eq 'file (emms-track-type track))
+ (with-temp-buffer
+ (when (zerop (apply 'call-process
+ emms-info-mp3info-program-name
+ nil t nil
+ (emms-track-name track)
+ emms-info-mp3findo-arguments))
+ (goto-char (point-min))
+ (while (looking-at "^\\([^=]+\\)=\\(.*\\)$")
+ (emms-track-set track
+ (intern (match-string 1))
+ (match-string 2))
+ (forward-line 1))))))
(provide 'emms-info-mp3info)
;;; emms-info-mp3info.el ends here