From 8bfea3634561d3771bde7e3e10da5894929c0ac9 Mon Sep 17 00:00:00 2001 From: eriedaberrie Date: Wed, 29 Jan 2025 15:19:07 +0000 Subject: [PATCH] feat: sync-music: ensure valid file name on all files --- sync-music/sync-music.lisp | 10 +++++----- sync-music/utils.lisp | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/sync-music/sync-music.lisp b/sync-music/sync-music.lisp index ba24c14..2225030 100644 --- a/sync-music/sync-music.lisp +++ b/sync-music/sync-music.lisp @@ -19,7 +19,9 @@ if the file should not be copied." (funcall make-action-fn :origin origin :target (pathname-normalize-unicode - (make-pathname :name (pathname-name origin) + (make-pathname :name (ensure-valid-file-name + (pathname-name + origin)) :type (string-downcase type) :defaults target))))) @@ -102,10 +104,8 @@ extension equality." :for output-file-name := (format nil "~A - ~A" track-number-str - (ppcre:regex-replace-all - *invalid-char-scanner* - track-title - "!!!")) + (ensure-valid-file-name + track-title)) :for current-action := (make-copy-flac-action :origin origin-file :target (pathname-normalize-unicode diff --git a/sync-music/utils.lisp b/sync-music/utils.lisp index c4cb6b2..a499e94 100644 --- a/sync-music/utils.lisp +++ b/sync-music/utils.lisp @@ -36,6 +36,10 @@ :type (maybe-normalize-unicode (pathname-type p)) :defaults p)) +(defun ensure-valid-file-name (s) + "Make sure that STRING is a valid file name on Android/NTFS." + (ppcre:regex-replace-all *invalid-char-scanner* s "!!!")) + (defmacro handle-overflow ((unit unit-max) (next-unit &optional next-max) &rest args) "Handle integer overflow from UNIT with maximum UNIT-MAX into NEXT-UNIT." (with-gensyms (div rem)