diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index b83e0f5177..82e5127b59 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -460,6 +460,7 @@ def serialize_user_metadata(metadata_elem, all_user_metadata, tail='\n'+(' '*8)) if fm.get('is_multiple'): # migrate is_multiple back to a character fm = copy.copy(fm) + fm['is_multiple2'] = fm.get('is_multiple', {}) dt = fm.get('datatype', None) if dt == 'composite': fm['is_multiple'] = ',' @@ -593,17 +594,25 @@ class OPF(object): # {{{ fm = elem.get('content') try: fm = json.loads(fm, object_hook=from_json) - im = fm.get('is_multiple', None) - if im and not isinstance(im, dict): - # Must migrate the is_multiple from char to dict - dt = fm.get('datatype', None) - if dt == 'composite': - im = {'cache_to_list': ',', 'ui_to_list': ',', 'list_to_ui': ', '} - elif fm.get('display', {}).get('is_names', False): - im = {'cache_to_list': '|', 'ui_to_list': '&', 'list_to_ui': ', '} - else: - im = {'cache_to_list': '|', 'ui_to_list': ',', 'list_to_ui': ', '} + im = fm.get('is_multiple2', None) + if im: fm['is_multiple'] = im + del fm['is_multiple2'] + else: + # Must migrate the is_multiple from char to dict + im = fm.get('is_multiple', None) + if im: + dt = fm.get('datatype', None) + if dt == 'composite': + im = {'cache_to_list': ',', 'ui_to_list': ',', + 'list_to_ui': ', '} + elif fm.get('display', {}).get('is_names', False): + im = {'cache_to_list': '|', 'ui_to_list': '&', + 'list_to_ui': ', '} + else: + im = {'cache_to_list': '|', 'ui_to_list': ',', + 'list_to_ui': ', '} + fm['is_multiple'] = im temp.set_user_metadata(name, fm) except: prints('Failed to read user metadata:', name)