From 2d68bd48066f1793d46dc83440f902296fa8cf97 Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Sat, 7 Aug 2021 19:47:13 +0300 Subject: [PATCH] fix: pass C-u while fetching cover, strip parens in Genius query --- lyrics-fetcher-genius.el | 31 +++++++++++++++++++++++++------ lyrics-fetcher.el | 4 +++- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/lyrics-fetcher-genius.el b/lyrics-fetcher-genius.el index 1c586b2..1ce8d31 100644 --- a/lyrics-fetcher-genius.el +++ b/lyrics-fetcher-genius.el @@ -31,6 +31,7 @@ (require 'request) (require 'cl-lib) (require 'json) +(require 'subr) (require 'seq) (require 'shr) (require 'f) @@ -40,6 +41,14 @@ :type '(string nil) :group 'lyrics-fetcher) +(defcustom lyrics-fetcher-genius-strip-parens-from-query t + "Strip parens from the query. + +I've noticed that these often break the search, e.g. when +searching \"Song (feat. Artist)\"" + :type 'boolean + :group 'lyrics-fetcher) + (defun lyrics-fetcher-genius-do-search (track callback &optional sync) "Perform a lyrics search on 'genius.com'. @@ -96,16 +105,26 @@ after the request." (defun lyrics-fetcher--genius-format-query (track) "Format track to genius.com query. +When `lyrics-fetcher-genius-strip-parens-from-query' is non-nil, +remove all the text in parens from the query, +for instance (feat. someone). + TRACK should either be a string or an EMMS-compatible alist, which contains `info-albumartist' or `info-artist' and `info-title'" (if (stringp track) track - (concat - (or (cdr (assoc 'info-albumartist track)) - (cdr (assoc 'info-artist track)) - "") - " " - (cdr (assoc 'info-title track))))) + (let ((query (concat + (or (cdr (assoc 'info-albumartist track)) + (cdr (assoc 'info-artist track)) + "") + " " + (cdr (assoc 'info-title track))))) + (when lyrics-fetcher-genius-strip-parens-from-query + (setq query (replace-regexp-in-string + (rx (or (: "(" (* nonl) ")") + (: "[" (* nonl) "]"))) + "" query))) + query))) (defun lyrics-fetcher--genius-format-song-title (entry) "Convert a Genius search ENTRY to a string, which can be used in selection." diff --git a/lyrics-fetcher.el b/lyrics-fetcher.el index 378e9f3..31b095c 100644 --- a/lyrics-fetcher.el +++ b/lyrics-fetcher.el @@ -439,7 +439,9 @@ FORCE-FETCH and SYNC are passed to `lyrics-fetcher--fetch-cover'." (cdr tracks) :start (+ start 1) :force-fetch force-fetch - :sync sync)))))) + :sync sync)) + :sync sync + :force-fetch force-fetch)))) (cl-defun lyrics-fetcher--fetch-cover (track &optional &key callback sync force-fetch) "Fetch cover for a given TRACK.