diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index 7a8e4ea8d0..fa20658c12 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -429,10 +429,12 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): old_extensions.add(ext) for ext in new_extensions: self.db.add_format(self.row, ext, open(paths[ext], 'rb'), notify=False) - db_extensions = set([f.lower() for f in self.db.formats(self.row).split(',')]) + dbfmts = self.db.formats(self.row) + db_extensions = set([f.lower() for f in (dbfmts.split(',') if dbfmts + else [])]) extensions = new_extensions.union(old_extensions) for ext in db_extensions: - if ext not in extensions: + if ext not in extensions and ext in self.original_formats: self.db.remove_format(self.row, ext, notify=False) def show_format(self, item, *args): @@ -576,6 +578,7 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): self.orig_date = qt_to_dt(self.date.date()) exts = self.db.formats(row) + self.original_formats = [] if exts: exts = exts.split(',') for ext in exts: @@ -586,6 +589,7 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): if size is None: continue Format(self.formats, ext, size, timestamp=timestamp) + self.original_formats.append(ext.lower()) self.initialize_combos() diff --git a/src/calibre/gui2/metadata/basic_widgets.py b/src/calibre/gui2/metadata/basic_widgets.py index 590a8be3bb..d3fa5958ab 100644 --- a/src/calibre/gui2/metadata/basic_widgets.py +++ b/src/calibre/gui2/metadata/basic_widgets.py @@ -472,6 +472,7 @@ class FormatsManager(QWidget): # {{{ def initialize(self, db, id_): self.changed = False exts = db.formats(id_, index_is_id=True) + self.original_val = set([]) if exts: exts = exts.split(',') for ext in exts: @@ -482,6 +483,7 @@ class FormatsManager(QWidget): # {{{ if size is None: continue Format(self.formats, ext, size, timestamp=timestamp) + self.original_val.add(ext.lower()) def commit(self, db, id_): if not self.changed: @@ -500,11 +502,12 @@ class FormatsManager(QWidget): # {{{ for ext in new_extensions: db.add_format(id_, ext, open(paths[ext], 'rb'), notify=False, index_is_id=True) - db_extensions = set([f.lower() for f in db.formats(id_, - index_is_id=True).split(',')]) + dbfmts = db.formats(id_, index_is_id=True) + db_extensions = set([f.lower() for f in (dbfmts.split(',') if dbfmts + else [])]) extensions = new_extensions.union(old_extensions) for ext in db_extensions: - if ext not in extensions: + if ext not in extensions and ext in self.original_val: db.remove_format(id_, ext, notify=False, index_is_id=True) self.changed = False