From 9f9fc233be16c140ce5edf1d4b361386560ad455 Mon Sep 17 00:00:00 2001 From: Charles Haley Date: Fri, 15 Aug 2014 10:45:55 +0200 Subject: [PATCH 1/3] Add a tweak telling the content server to give the client a path computed from a template (the value of the tweak). This can happen only if the client sets the device_compatible flag. --- resources/default_tweaks.py | 11 +++++++++++ src/calibre/library/server/ajax.py | 9 ++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/resources/default_tweaks.py b/resources/default_tweaks.py index d4eb5141cf..b9f61159ac 100644 --- a/resources/default_tweaks.py +++ b/resources/default_tweaks.py @@ -572,3 +572,14 @@ restrict_output_formats = None # numbers. # The value can be between 50 and 99 content_server_thumbnail_compression_quality = 75 + +#: Set the template for the file name supplied by the content server +# Setting this tweak will make the content server supply the template's value +# when a book's metadata is requested in "device compatible" mode. The client +# can use this value as part of the path for the book when downloaded. Note +# that the save_template_title_series_sorting tweak is used to control title +# and series values. +# Examples: +# content_server_path_for_client = "{title}-{author}" +# content_server_path_for_client = "{title_sort}-{:'series_sort()'||-}{author_sort}" +content_server_path_for_client = '' diff --git a/src/calibre/library/server/ajax.py b/src/calibre/library/server/ajax.py index cd41bb267e..2decb8a951 100644 --- a/src/calibre/library/server/ajax.py +++ b/src/calibre/library/server/ajax.py @@ -191,7 +191,14 @@ class AjaxServer(object): else: series = '' data['_series_sort_'] = series - + if tweaks['content_server_path_for_client']: + import posixpath + from calibre.devices.utils import create_upload_path + from calibre.utils.filenames import ascii_filename as sanitize + data['_filename_'] = create_upload_path(mi, '', + tweaks['content_server_path_for_client'], + sanitize, path_type=posixpath) + print('filename', data['_filename_']) return data, mi.last_modified @Endpoint(set_last_modified=False) From 30fa640e2487b958ca89197465ae041214bcede8 Mon Sep 17 00:00:00 2001 From: Charles Haley Date: Fri, 15 Aug 2014 11:25:45 +0200 Subject: [PATCH 2/3] Remove debugging pring --- src/calibre/library/server/ajax.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/calibre/library/server/ajax.py b/src/calibre/library/server/ajax.py index 2decb8a951..c26424f9eb 100644 --- a/src/calibre/library/server/ajax.py +++ b/src/calibre/library/server/ajax.py @@ -198,7 +198,6 @@ class AjaxServer(object): data['_filename_'] = create_upload_path(mi, '', tweaks['content_server_path_for_client'], sanitize, path_type=posixpath) - print('filename', data['_filename_']) return data, mi.last_modified @Endpoint(set_last_modified=False) From d22c409669f48b55a53df25d0051af77baf6b4bd Mon Sep 17 00:00:00 2001 From: Charles Haley Date: Fri, 15 Aug 2014 13:12:48 +0200 Subject: [PATCH 3/3] Use the template from the device driver specified by the client, if any. --- resources/default_tweaks.py | 11 ----------- src/calibre/library/server/ajax.py | 21 ++++++++++++++------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/resources/default_tweaks.py b/resources/default_tweaks.py index b9f61159ac..d4eb5141cf 100644 --- a/resources/default_tweaks.py +++ b/resources/default_tweaks.py @@ -572,14 +572,3 @@ restrict_output_formats = None # numbers. # The value can be between 50 and 99 content_server_thumbnail_compression_quality = 75 - -#: Set the template for the file name supplied by the content server -# Setting this tweak will make the content server supply the template's value -# when a book's metadata is requested in "device compatible" mode. The client -# can use this value as part of the path for the book when downloaded. Note -# that the save_template_title_series_sorting tweak is used to control title -# and series values. -# Examples: -# content_server_path_for_client = "{title}-{author}" -# content_server_path_for_client = "{title_sort}-{:'series_sort()'||-}{author_sort}" -content_server_path_for_client = '' diff --git a/src/calibre/library/server/ajax.py b/src/calibre/library/server/ajax.py index c26424f9eb..36b3831258 100644 --- a/src/calibre/library/server/ajax.py +++ b/src/calibre/library/server/ajax.py @@ -119,7 +119,7 @@ class AjaxServer(object): # Get book metadata {{{ def ajax_book_to_json(self, book_id, get_category_urls=True, - device_compatible=False): + device_compatible=False, device_for_template=None): mi = self.db.get_metadata(book_id, index_is_id=True) if not device_compatible: @@ -191,18 +191,24 @@ class AjaxServer(object): else: series = '' data['_series_sort_'] = series - if tweaks['content_server_path_for_client']: + if device_for_template: import posixpath from calibre.devices.utils import create_upload_path from calibre.utils.filenames import ascii_filename as sanitize - data['_filename_'] = create_upload_path(mi, '', - tweaks['content_server_path_for_client'], - sanitize, path_type=posixpath) + from calibre.customize.ui import device_plugins + + for device_class in device_plugins(): + if device_class.__class__.__name__ == device_for_template: + template = device_class.save_template() + data['_filename_'] = create_upload_path(mi, book_id, + template, sanitize, path_type=posixpath) + break; + return data, mi.last_modified @Endpoint(set_last_modified=False) def ajax_book(self, book_id, category_urls='true', id_is_uuid='false', - device_compatible='false'): + device_compatible='false', device_for_template=None): ''' Return the metadata of the book as a JSON dictionary. @@ -219,7 +225,8 @@ class AjaxServer(object): book_id = int(book_id) data, last_modified = self.ajax_book_to_json(book_id, get_category_urls=category_urls.lower()=='true', - device_compatible=device_compatible.lower()=='true') + device_compatible=device_compatible.lower()=='true', + device_for_template=device_for_template) except: raise cherrypy.HTTPError(404, 'No book with id: %r'%book_id)