[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/emms bf096ce7f3 13/15: beets: Improve non-interactive u
From: |
ELPA Syncer |
Subject: |
[elpa] externals/emms bf096ce7f3 13/15: beets: Improve non-interactive usage |
Date: |
Fri, 1 Mar 2024 12:58:09 -0500 (EST) |
branch: externals/emms
commit bf096ce7f35b53c30159b823ca1b4d19a1c08a86
Author: Daniel Semyonov <daniel@dsemy.com>
Commit: Daniel Semyonov <daniel@dsemy.com>
beets: Improve non-interactive usage
* emms-source-beets.el: Only filter interactively when a source
function is called interactively and accept a custom database path as
the first argument.
(emms-source-beets--ensure-sqlite): New function.
---
emms-source-beets.el | 91 ++++++++++++++++++++++++++++------------------------
1 file changed, 49 insertions(+), 42 deletions(-)
diff --git a/emms-source-beets.el b/emms-source-beets.el
index 83ad802345..49bdd87b2b 100644
--- a/emms-source-beets.el
+++ b/emms-source-beets.el
@@ -67,13 +67,23 @@ for the column."
emms-source-beets--items-columns))
(boolean :tag "Descending"))))
+(defun emms-source-beets--ensure-sqlite ()
+ "Emit a user error if SQLite support is not available."
+ (or (and (fboundp 'sqlite-available-p)
+ (sqlite-available-p))
+ (user-error
+ "SQLite support is not available (required to read beets databases)")))
+
;;;###autoload (autoload 'emms-play-beets "emms-source-beets" nil t)
;;;###autoload (autoload 'emms-add-beets "emms-source-beets" nil t)
-(define-emms-source beets (filter)
+(define-emms-source beets (&optional database filter)
"An EMMS source for beets library databases.
-With prefix argument FILTER, filter added tracks according to columns
-from the \"items\" table of the database.
+DATABASE should be a path to a beets library database
+\(`emms-source-beets-database' is used by default).
+When called interactively, prefix argument FILTER will cause added
+tracks to be filtered according to unique values from columns in the
+\"items\" table of the database.
Filtering is done in two steps:
- Choose column(s) (with completion).
- For each chosen column (in order), choose from its unique values
@@ -99,44 +109,41 @@ one of 2001, 2002 or 2003 (or any combination of them).
will add only \"Good Album\". Since the first choice was \"Nice
Band\", the choice of year is restricted to 2001 to 2002 (or both)."
- (interactive (list (prog1 current-prefix-arg (setq current-prefix-arg nil
- prefix-arg nil))))
- (unless (and (fboundp 'sqlite-available-p)
- (sqlite-available-p))
- (user-error
- "SQLite support is not available (required to read beets databases)"))
- (when-let ((db (sqlite-open emms-source-beets-database))
- (where "")
- (filter
- (if (null filter) t
- (setq filter nil)
- (dolist ( col (completing-read-multiple
- "Filter by: "
- emms-source-beets--items-columns nil t)
- filter)
- ;; For each column chosen to filter by, only allow
- ;; choosing between distinct values which correspond
- ;; to items which matched distinct values chosen for
- ;; previously processed columns.
- (when-let ((dist (sqlite-select
- db (format "select distinct %s from
items%s"
- col (if (string-empty-p where)
""
- (concat " where" where)))
- filter))
- (dist (if (stringp (caar dist)) dist
- (mapcar (lambda (val)
- (number-to-string (car val)))
- dist))))
- (setq where (format " %s in (%s)%s" col
- (mapconcat
- (lambda (_) "?")
- (mapcar
- (lambda (val) (push val filter))
- (completing-read-multiple
- (concat col ": ") dist nil t))
- ", ")
- (if (string-empty-p where) ""
- (concat " and " where))))))))
+ (interactive
+ (when-let (((emms-source-beets--ensure-sqlite))
+ (filter (prog1 (and current-prefix-arg '(nil . ""))
+ (setq current-prefix-arg nil prefix-arg nil)))
+ (db (sqlite-open emms-source-beets-database)))
+ (dolist ( col (completing-read-multiple
+ "Filter by: "
+ emms-source-beets--items-columns nil t)
+ (list db filter))
+ ;; For each column chosen to filter by, only allow
+ ;; choosing between distinct values which correspond
+ ;; to items which matched distinct values chosen for
+ ;; previously processed columns.
+ (when-let ((where (cdr filter))
+ (dist (sqlite-select
+ db (format "select distinct %s from items%s"
+ col (if (string-empty-p where)
+ "" (concat " where" where)))
+ (car filter)))
+ (dist (if (stringp (caar dist)) dist
+ (mapcar (lambda (val) (number-to-string (car val)))
+ dist))))
+ (setcdr filter (format " %s in (%s)%s" col
+ (mapconcat
+ (lambda (_) "?")
+ (mapcar (lambda (val) (push val (car filter)))
+ (completing-read-multiple
+ (concat col ": ") dist nil t))
+ ", ")
+ (if (string-empty-p where) ""
+ (concat " and " where))))))))
+ (when-let (((emms-source-beets--ensure-sqlite))
+ (db (or database (sqlite-open emms-source-beets-database)))
+ (filter (or filter '(nil . "")))
+ (where (cdr filter))
(db (sqlite-select
db (format "select path, %s from items%s order by %s"
(mapconcat #'identity
@@ -149,7 +156,7 @@ Band\", the choice of year is restricted to 2001 to 2002
(or both)."
(if (cdr col) (concat (car col) " desc")
(car col)))
emms-source-beets-sort-columns ", "))
- (unless (eq filter t) filter) 'set))
+ (car filter) 'set))
(init (gensym)))
(set init (remq 'emms-info-initialize-track
emms-track-initialize-functions))
- [elpa] externals/emms f599931437 06/15: * emms-source-beets.el: Add a comment explaining column filtering logic, (continued)
- [elpa] externals/emms f599931437 06/15: * emms-source-beets.el: Add a comment explaining column filtering logic, ELPA Syncer, 2024/03/01
- [elpa] externals/emms a62b882bec 05/15: * emms-source-beets.el: Simplify metadata reading slightly, ELPA Syncer, 2024/03/01
- [elpa] externals/emms 6aa0b5e91a 07/15: * emms-source-beets.el: Don't initialize tracks with no name (path), ELPA Syncer, 2024/03/01
- [elpa] externals/emms b6c90de669 03/15: Add missing space, ELPA Syncer, 2024/03/01
- [elpa] externals/emms 9122952f6b 02/15: * emms-source-beets.el: Silence compilation warnings, ELPA Syncer, 2024/03/01
- [elpa] externals/emms 2082156614 08/15: * emms-source-beets.el: Simplify track metadata parsing, ELPA Syncer, 2024/03/01
- [elpa] externals/emms 6dd0441793 09/15: * emms-source-beets.el: Don't set blank metadata, ELPA Syncer, 2024/03/01
- [elpa] externals/emms c4c62c951d 10/15: * emms-source-beets.el: Fix symbol created when column contains underscore, ELPA Syncer, 2024/03/01
- [elpa] externals/emms b640376d69 11/15: * emms-source-beets.el: Fix track initialization, ELPA Syncer, 2024/03/01
- [elpa] externals/emms c9a76bab8a 12/15: beets: Improve documentation, ELPA Syncer, 2024/03/01
- [elpa] externals/emms bf096ce7f3 13/15: beets: Improve non-interactive usage,
ELPA Syncer <=
- [elpa] externals/emms f3ec6476ae 14/15: beets: Document `database' argument of source functions, ELPA Syncer, 2024/03/01
- [elpa] externals/emms 4703460765 15/15: * emms-source-beets.el: Align example album names, ELPA Syncer, 2024/03/01