diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py
index 7181c16329..fed22f87e2 100644
--- a/src/calibre/gui2/__init__.py
+++ b/src/calibre/gui2/__init__.py
@@ -89,6 +89,8 @@ def _config():
help=_('Maximum number of waiting worker processes'))
c.add_opt('get_social_metadata', default=True,
help=_('Download social metadata (tags/rating/etc.)'))
+ c.add_opt('overwrite_author_title_metadata', default=True,
+ help=_('Overwrite author and title with new metadata'))
c.add_opt('enforce_cpu_limit', default=True,
help=_('Limit max simultaneous jobs to number of CPUs'))
diff --git a/src/calibre/gui2/dialogs/config/__init__.py b/src/calibre/gui2/dialogs/config/__init__.py
index 156faec7ce..88697e55bb 100644
--- a/src/calibre/gui2/dialogs/config/__init__.py
+++ b/src/calibre/gui2/dialogs/config/__init__.py
@@ -458,6 +458,7 @@ class ConfigDialog(ResizableDialog, Ui_Dialog):
self.connect(self.button_open_config_dir, SIGNAL('clicked()'),
self.open_config_dir)
self.opt_get_social_metadata.setChecked(config['get_social_metadata'])
+ self.opt_overwrite_author_title_metadata.setChecked(config['overwrite_author_title_metadata'])
self.opt_enforce_cpu_limit.setChecked(config['enforce_cpu_limit'])
self.device_detection_button.clicked.connect(self.debug_device_detection)
@@ -751,6 +752,7 @@ class ConfigDialog(ResizableDialog, Ui_Dialog):
config['upload_news_to_device'] = self.sync_news.isChecked()
config['search_as_you_type'] = self.search_as_you_type.isChecked()
config['get_social_metadata'] = self.opt_get_social_metadata.isChecked()
+ config['overwrite_author_title_metadata'] = self.opt_overwrite_author_title_metadata.isChecked()
config['enforce_cpu_limit'] = bool(self.opt_enforce_cpu_limit.isChecked())
fmts = []
for i in range(self.viewer.count()):
diff --git a/src/calibre/gui2/dialogs/config/config.ui b/src/calibre/gui2/dialogs/config/config.ui
index b9306b0f10..6da5362248 100644
--- a/src/calibre/gui2/dialogs/config/config.ui
+++ b/src/calibre/gui2/dialogs/config/config.ui
@@ -171,6 +171,13 @@
+ -
+
+
+ Overwrite & author/title by default when fetching metadata
+
+
+
-
-
diff --git a/src/calibre/gui2/dialogs/fetch_metadata.py b/src/calibre/gui2/dialogs/fetch_metadata.py
index b021a2470d..5a0957be31 100644
--- a/src/calibre/gui2/dialogs/fetch_metadata.py
+++ b/src/calibre/gui2/dialogs/fetch_metadata.py
@@ -119,6 +119,7 @@ class FetchMetadata(QDialog, Ui_FetchMetadata):
self.matches.setMouseTracking(True)
self.fetch_metadata()
self.opt_get_social_metadata.setChecked(config['get_social_metadata'])
+ self.opt_overwrite_author_title_metadata.setChecked(config['overwrite_author_title_metadata'])
def show_summary(self, current, *args):
@@ -149,7 +150,8 @@ class FetchMetadata(QDialog, Ui_FetchMetadata):
self.fetcher.start()
self.pi.start(_('Finding metadata...'))
self._hangcheck = QTimer(self)
- self.connect(self._hangcheck, SIGNAL('timeout()'), self.hangcheck)
+ self.connect(self._hangcheck, SIGNAL('timeout()'), self.hangcheck,
+ Qt.QueuedConnection)
self.start_time = time.time()
self._hangcheck.start(100)
diff --git a/src/calibre/gui2/dialogs/fetch_metadata.ui b/src/calibre/gui2/dialogs/fetch_metadata.ui
index fe97b32f28..f14d402e11 100644
--- a/src/calibre/gui2/dialogs/fetch_metadata.ui
+++ b/src/calibre/gui2/dialogs/fetch_metadata.ui
@@ -116,6 +116,13 @@
+ -
+
+
+ Overwrite &author/title with author/title of selected book
+
+
+
-
diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py
index 89b7c92125..846851fd21 100644
--- a/src/calibre/gui2/dialogs/metadata_single.py
+++ b/src/calibre/gui2/dialogs/metadata_single.py
@@ -574,9 +574,10 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog):
det_msg=det, show=True)
else:
book.tags = []
- self.title.setText(book.title)
- self.authors.setText(authors_to_string(book.authors))
- if book.author_sort: self.author_sort.setText(book.author_sort)
+ if d.opt_overwrite_author_title_metadata.isChecked():
+ self.title.setText(book.title)
+ self.authors.setText(authors_to_string(book.authors))
+ if book.author_sort: self.author_sort.setText(book.author_sort)
if book.publisher: self.publisher.setEditText(book.publisher)
if book.isbn: self.isbn.setText(book.isbn)
if book.pubdate:
diff --git a/src/calibre/gui2/metadata.py b/src/calibre/gui2/metadata.py
index ecdca29422..d63e9648cc 100644
--- a/src/calibre/gui2/metadata.py
+++ b/src/calibre/gui2/metadata.py
@@ -12,6 +12,7 @@ from Queue import Queue, Empty
from calibre.ebooks.metadata.fetch import search, get_social_metadata
+from calibre.gui2 import config
from calibre.ebooks.metadata.library_thing import cover_from_isbn
from calibre.customize.ui import get_isbndb_key
@@ -98,6 +99,10 @@ class DownloadMetadata(Thread):
self.fetched_metadata[id] = fmi
if fmi.isbn and self.get_covers:
self.worker.jobs.put(fmi.isbn)
+ if (not config['overwrite_author_title_metadata']):
+ fmi.authors = mi.authors
+ fmi.author_sort = mi.author_sort
+ fmi.title = mi.title
mi.smart_update(fmi)
if mi.isbn and self.get_social_metadata:
self.social_metadata_exceptions = get_social_metadata(mi)