From fc2e4a376733cc55049a618ddcc1070be45543d5 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Sat, 4 Jun 2011 11:57:43 +0100 Subject: [PATCH] More fixes for the is_multiple change. Several of the content server changes fix bugs that existed before the change. --- src/calibre/ebooks/metadata/book/base.py | 7 ++----- src/calibre/gui2/dialogs/metadata_bulk.py | 11 +---------- src/calibre/library/server/mobile.py | 9 ++++++--- src/calibre/library/server/opds.py | 9 ++++++--- src/calibre/library/server/utils.py | 6 +++--- src/calibre/library/server/xml.py | 8 ++++++-- 6 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/calibre/ebooks/metadata/book/base.py b/src/calibre/ebooks/metadata/book/base.py index 378d4ab5f0..382cb6c5a2 100644 --- a/src/calibre/ebooks/metadata/book/base.py +++ b/src/calibre/ebooks/metadata/book/base.py @@ -621,10 +621,7 @@ class Metadata(object): orig_res = res datatype = cmeta['datatype'] if datatype == 'text' and cmeta['is_multiple']: - if cmeta['display'].get('is_names', False): - res = u' & '.join(res) - else: - res = u', '.join(sorted(res, key=sort_key)) + res = cmeta['is_multiple']['list_to_ui'].join(res) elif datatype == 'series' and series_with_index: if self.get_extra(key) is not None: res = res + \ @@ -668,7 +665,7 @@ class Metadata(object): elif datatype == 'text' and fmeta['is_multiple']: if isinstance(res, dict): res = [k + ':' + v for k,v in res.items()] - res = u', '.join(sorted(res, key=sort_key)) + res = fmeta['is_multiple']['list_to_ui'].join(sorted(res, key=sort_key)) elif datatype == 'series' and series_with_index: res = res + ' [%s]'%self.format_series_index() elif datatype == 'datetime': diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index a6f7ed8843..8829dc97c0 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -656,18 +656,9 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog): if self.destination_field_fm['is_multiple']: if self.comma_separated.isChecked(): splitter = self.destination_field_fm['is_multiple']['ui_to_list'] -# if dest == 'authors' or \ -# (self.destination_field_fm['is_custom'] and -# self.destination_field_fm['datatype'] == 'text' and -# self.destination_field_fm['display'].get('is_names', False)): -# splitter = ' & ' -# else: -# splitter = ',' res = [] for v in val: - for x in v.split(splitter): - if x.strip(): - res.append(x.strip()) + res.extend([x.strip() for x in v.split(splitter) if x.strip()]) val = res else: val = [v.replace(',', '') for v in val] diff --git a/src/calibre/library/server/mobile.py b/src/calibre/library/server/mobile.py index 1bf9f549bc..ad5ee4af96 100644 --- a/src/calibre/library/server/mobile.py +++ b/src/calibre/library/server/mobile.py @@ -231,7 +231,8 @@ class MobileServer(object): book['size'] = human_readable(book['size']) aus = record[FM['authors']] if record[FM['authors']] else __builtin__._('Unknown') - authors = '|'.join([i.replace('|', ',') for i in aus.split(',')]) + aut_is = CFM['authors']['is_multiple'] + authors = aut_is['list_to_ui'].join([i.replace('|', ',') for i in aus.split(',')]) book['authors'] = authors book['series_index'] = fmt_sidx(float(record[FM['series_index']])) book['series'] = record[FM['series']] @@ -254,8 +255,10 @@ class MobileServer(object): continue if datatype == 'text' and CFM[key]['is_multiple']: book[key] = concat(name, - format_tag_string(val, ',', - no_tag_count=True)) + format_tag_string(val, + CFM[key]['is_multiple']['ui_to_list'], + no_tag_count=True, + joinval=CFM[key]['is_multiple']['list_to_ui'])) else: book[key] = concat(name, val) diff --git a/src/calibre/library/server/opds.py b/src/calibre/library/server/opds.py index 5f6180e68a..04300ea0e3 100644 --- a/src/calibre/library/server/opds.py +++ b/src/calibre/library/server/opds.py @@ -180,9 +180,12 @@ def ACQUISITION_ENTRY(item, version, db, updated, CFM, CKEYS, prefix): if val: datatype = CFM[key]['datatype'] if datatype == 'text' and CFM[key]['is_multiple']: - extra.append('%s: %s
'%(xml(name), xml(format_tag_string(val, ',', - ignore_max=True, - no_tag_count=True)))) + extra.append('%s: %s
'% + (xml(name), + xml(format_tag_string(val, + CFM[key]['is_multiple']['ui_to_list'], + ignore_max=True, no_tag_count=True, + joinval=CFM[key]['is_multiple']['list_to_ui'])))) elif datatype == 'comments': extra.append('%s: %s
'%(xml(name), comments_to_html(unicode(val)))) else: diff --git a/src/calibre/library/server/utils.py b/src/calibre/library/server/utils.py index e58dd2f19b..53c6cdbd9d 100644 --- a/src/calibre/library/server/utils.py +++ b/src/calibre/library/server/utils.py @@ -68,7 +68,7 @@ def strftime(fmt='%Y/%m/%d %H:%M:%S', dt=None): except: return _strftime(fmt, nowf().timetuple()) -def format_tag_string(tags, sep, ignore_max=False, no_tag_count=False): +def format_tag_string(tags, sep, ignore_max=False, no_tag_count=False, joinval=', '): MAX = sys.maxint if ignore_max else tweaks['max_content_server_tags_shown'] if tags: tlist = [t.strip() for t in tags.split(sep)] @@ -78,10 +78,10 @@ def format_tag_string(tags, sep, ignore_max=False, no_tag_count=False): if len(tlist) > MAX: tlist = tlist[:MAX]+['...'] if no_tag_count: - return ', '.join(tlist) if tlist else '' + return joinval.join(tlist) if tlist else '' else: return u'%s:&:%s'%(tweaks['max_content_server_tags_shown'], - ', '.join(tlist)) if tlist else '' + joinval.join(tlist)) if tlist else '' def quote(s): if isinstance(s, unicode): diff --git a/src/calibre/library/server/xml.py b/src/calibre/library/server/xml.py index 14955dc541..18ddf6bb43 100644 --- a/src/calibre/library/server/xml.py +++ b/src/calibre/library/server/xml.py @@ -121,8 +121,12 @@ class XMLServer(object): name = CFM[key]['name'] custcols.append(k) if datatype == 'text' and CFM[key]['is_multiple']: - kwargs[k] = concat('#T#'+name, format_tag_string(val,',', - ignore_max=True)) + kwargs[k] = \ + concat('#T#'+name, + format_tag_string(val, + CFM[key]['is_multiple']['ui_to_list'], + ignore_max=True, + joinval=CFM[key]['is_multiple']['list_to_ui'])) else: kwargs[k] = concat(name, val) kwargs['custcols'] = ','.join(custcols)