Or rather, emms-cache-set-from-mpd-all

On Fri, Aug 1, 2014 at 8:55 AM, Michael Olson <[email protected]> wrote:

> I think that `emms-player-mpd-update-all' might already do what you want.
>
>
> On Thu, Jul 31, 2014 at 11:17 PM, Alexis <[email protected]> wrote:
>
>>
>> Hi all,
>>
>> Below is a naïve, proof-of-concept implementation of building EMMS cache
>> data via querying of the MusicPD database, using the 'connection'
>> package[1] for TCP communication. On my system,
>> emms-player-mpd-build-cache-from-db is roughly 80 times as fast as the
>> existing cache-building method of running mp3info: whereas the latter
>> takes 20+ minutes to complete, emms-player-mpd-build-cache-from-db
>> finishes in less than 15 seconds.
>>
>>
>> Alexis.
>>
>> [1] Available via MELPA, or on GitHub here:
>> https://github.com/myrkr/dictionary-el/blob/master/connection.el
>>
>>
>>
>> --- BEGIN proof-of-concept code ---
>>
>> (require 'connection)
>> (setq conn (connection-open "localhost" "6600"))
>> (generate-new-buffer "*test-cache*")
>>
>> (defun emms-player-mpd-build-cache-from-db ()
>>   "Create the EMMS cache from the contents of the MusicPD database."
>>
>>   (interactive)
>>
>>   (let ((track-count 0)
>>         (artists-string "")
>>         (artists-list '()))
>>
>>   ;; Get list of all artists in MPD database.
>>
>>   (connection-send conn "list artist\n")
>>   (setq artists-string (connection-read conn "\nOK\n"))
>>
>>   (with-temp-buffer
>>     (progn
>>       (insert artists-string)
>>       (goto-char (point-min))
>>       (while (re-search-forward "Artist: \\([^\n]+\\)" nil t)
>>         (setq artists-list (cons (match-string 1) artists-list)))))
>>
>>   ;; Get list of all tracks by each artist.
>>
>>   (dolist (artist artists-list)
>>
>>     (let ((artist-tracks-string "")
>>           (artist-tracks-list '()))
>>
>>       (connection-send conn (concat "list title artist \"" artist "\"\n"))
>>       (setq artist-tracks-string (connection-read conn "\nOK\n"))
>>
>>       (with-temp-buffer
>>         (progn
>>           (insert artist-tracks-string)
>>           (goto-char (point-min))
>>           (while (re-search-forward "Title: \\([^\n]+\\)" nil t)
>>             (setq artist-tracks-list (cons (match-string 1)
>> artist-tracks-list)))))
>>
>>       (dolist (track artist-tracks-list)
>>
>>         (let ((metadata-string "")
>>               (track-metadata '())
>>               (track-file "")
>>               (track-artist "")
>>               (track-title "")
>>               (track-album "")
>>               (track-number "")
>>               (track-time "")
>>               (track-mtime "")
>>               (track-year "")
>>               (track-genre ""))
>>
>>           ;; Escape double-quotes in name of track.
>>           (setq track (replace-regexp-in-string "\042" (concat "\134"
>> "\042") track nil t))
>>
>>           (connection-send conn (concat "find artist \"" artist "\" "
>>                                         "title \"" track "\"\n"))
>>           (setq metadata-string (connection-read conn "\nOK\n"))
>>
>>           (with-temp-buffer
>>             (insert metadata-string)
>>             (goto-char (point-min))
>>             (while (re-search-forward "^\\([^:]+\\): \\([^\n]+\\)$" nil t)
>>               (setq track-metadata (cons `(,(match-string 1) .
>> ,(match-string 2)) track-metadata))))
>>
>>           (setq track-file (cdr (assoc "file" track-metadata)))
>>           (setq track-artist (cdr (assoc "Artist" track-metadata)))
>>           (setq track-title (cdr (assoc "Title" track-metadata)))
>>           (setq track-album (cdr (assoc "Album" track-metadata)))
>>           (setq track-number (cdr (assoc "Track" track-metadata)))
>>           (setq track-time (cdr (assoc "Time" track-metadata)))
>>           (setq track-mtime (date-to-time (cdr (assoc "Last-Modified"
>> track-metadata))))
>>           (setq track-year (cdr (assoc "Date" track-metadata)))
>>           (setq track-genre (cdr (assoc "Genre" track-metadata)))
>>
>>           (setq track-count (+ 1 track-count))
>>           (if (= 0 (mod track-count 200))
>>               (message (concat "Tracks processed: " (format "%d"
>> track-count))))
>>
>>           (print `(*track* (type . file) (name . ,track-file ) (metadata)
>> (info-artist . ,track-artist) (info-title . ,track-title) (info-album .
>> ,track-album) (info-tracknumber . ,track-number) (info-playing-time .
>> ,track-time) (info-year . ,track-year) (info-genre . ,track-genre)
>> (info-mtime ,@track-mtime)) (get-buffer "*test-cache*"))))))))
>>
>> --- END proof-of-concept code ---
>>
>> _______________________________________________
>> Emms-help mailing list
>> [email protected]
>> https://lists.gnu.org/mailman/listinfo/emms-help
>>
>
>
_______________________________________________
Emms-help mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/emms-help

Reply via email to