From 560358b47ece88ad5513a5fc5e137a4efaa23f56 Mon Sep 17 00:00:00 2001 From: Grant Shangreaux Date: Fri, 23 Dec 2022 23:12:33 -0600 Subject: Add: initial hookup of playlist download UI elements --- zipper.lisp | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'zipper.lisp') diff --git a/zipper.lisp b/zipper.lisp index 25e05c9..2151019 100644 --- a/zipper.lisp +++ b/zipper.lisp @@ -3,33 +3,35 @@ (in-package :vampire) (defun zip-playlist (playlist) - (let* ((tracks (zip-playlist-filenames playlist)) - (out (format nil "/media/downloads/~a.zip" (clean-slashes (playlist-title playlist))))) - (copy-audio-files-for-download playlist) - (org.shirakumo.zippy:compress-zip tracks out))) + "Copies all playlist tracks into a download directory and compresses them into a zip archive. +Returns the filename of the zip file." + (with-temp-dir (tmpdir) + (let* ((tracks (mapcar (lambda (track) (merge-pathnames tmpdir track)) + (zip-playlist-filenames playlist))) + (zip-dir (merge-pathnames "media/bundled-playlists" (static-directory *config*))) + (out (format nil "~a/~a.zip" zip-dir (clean-slashes (playlist-title playlist))))) + (ensure-directories-exist zip-dir) + (copy-audio-files-for-download playlist tmpdir) + (org.shirakumo.zippy:compress-zip tracks out :if-exists :overwrite) + (format nil "/media/bundled-playlists/~a.zip" (clean-slashes (playlist-title playlist)))))) -(defun copy-audio-files-for-download (playlist) - (ensure-directories-exist #P"/media/downloads/") +(defun copy-audio-files-for-download (playlist dir) (let ((audio-files (mapcar #'track-file (playlist-tracks playlist))) - (dest-files (zip-playlist-filenames playlist)) - (dest-dir (zip-playlist-dir playlist))) - (ensure-directories-exist dest-dir) + (dest-files (zip-playlist-filenames playlist))) (loop for file in audio-files for dest in dest-files - do (uiop:copy-file file (format nil "~a~a" dest-dir dest))))) + do (uiop:copy-file file (format nil "~a~a" dir dest))))) (defun zip-playlist-filenames (playlist) (loop for track in (playlist-tracks playlist) for i from 1 - collect (zip-track-filename track i playlist))) + collect (zip-track-filename track i))) -(defun zip-track-filename (track pos playlist) +(defun zip-track-filename (track pos) + "Return a filename for a track. `NN-ARTIST-ALBUM-TITLE.CODEC'" (with-slots (artist album title codec) track - (format nil "~a/~2,'0d-~a-~a-~a.~a" (zip-playlist-dir playlist) pos + (format nil "~2,'0d-~a-~a-~a.~a" pos (clean-slashes artist) (clean-slashes album) (clean-slashes title) codec))) -(defun zip-playlist-dir (playlist) - (format nil "/media/downloads/~a/" (clean-slashes (playlist-title playlist)))) - (defun clean-slashes (str) (cl-ppcre:regex-replace-all "/" str "-")) -- cgit v1.2.3