From 15c6ee80de0a69002c9ae135f48a48567002756c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 9 Feb 2020 19:35:57 +0530 Subject: [PATCH] Fix clicking on author name in book details panel to search in goodreads not working if author has more than two parts in his name Fixes #1096 (Encode internet search URLs with spaces as %20 rather than +) --- src/calibre/ebooks/metadata/search_internet.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/calibre/ebooks/metadata/search_internet.py b/src/calibre/ebooks/metadata/search_internet.py index 2b45caba0d..bb962e83eb 100644 --- a/src/calibre/ebooks/metadata/search_internet.py +++ b/src/calibre/ebooks/metadata/search_internet.py @@ -5,7 +5,7 @@ from __future__ import absolute_import, division, print_function, unicode_literals from polyglot.builtins import iteritems -from polyglot.urllib import quote_plus +from polyglot.urllib import quote, quote_plus AUTHOR_SEARCHES = { 'goodreads': @@ -48,17 +48,21 @@ all_book_searches = BOOK_SEARCHES.__iter__ all_author_searches = AUTHOR_SEARCHES.__iter__ -def qquote(val): +def qquote(val, use_plus=True): if not isinstance(val, bytes): val = val.encode('utf-8') - ans = quote_plus(val) + ans = quote_plus(val) if use_plus else quote(val) if isinstance(ans, bytes): ans = ans.decode('utf-8') return ans +def specialised_quote(template, val): + return qquote(val, 'goodreads.com' not in template) + + def url_for(template, data): - return template.format(**{k: qquote(v) for k, v in iteritems(data)}) + return template.format(**{k: specialised_quote(template, v) for k, v in iteritems(data)}) def url_for_author_search(key, **kw):