summaryrefslogtreecommitdiff
path: root/zipper.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'zipper.lisp')
-rw-r--r--zipper.lisp34
1 files changed, 18 insertions, 16 deletions
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 "-"))