diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py
index a6fcceade0..7d964c3a14 100644
--- a/src/calibre/gui2/library.py
+++ b/src/calibre/gui2/library.py
@@ -414,8 +414,11 @@ class BooksModel(QAbstractTableModel):
- def get_preferred_formats(self, rows, formats, paths=False, set_metadata=False):
+ def get_preferred_formats(self, rows, formats, paths=False,
+ set_metadata=False, specific_format=None):
ans = []
+ if specific_format is not None:
+ formats = [specific_format.lower()]
for row in (row.row() for row in rows):
format = None
fmts = self.db.formats(row)
diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py
index 611b520ef2..84e4be699c 100644
--- a/src/calibre/gui2/main.py
+++ b/src/calibre/gui2/main.py
@@ -156,6 +156,9 @@ class Main(MainWindow, Ui_MainWindow):
sm.addAction(QIcon(':/images/sd.svg'), _('Send to storage card'))
sm.addAction(QIcon(':/images/reader.svg'), _('Send to main memory')+' '+_('and delete from library'))
sm.addAction(QIcon(':/images/sd.svg'), _('Send to storage card')+' '+_('and delete from library'))
+ sm.addAction(self.action_send_specific_format_to_device)
+ self.connect(self.action_send_specific_format_to_device,
+ SIGNAL('triggered()'), self.send_specific_format_to_device)
sm.addSeparator()
sm.addAction(_('Send to storage card by default'))
sm.actions()[-1].setCheckable(True)
@@ -893,8 +896,16 @@ class Main(MainWindow, Ui_MainWindow):
self.upload_books(files, names, metadata, on_card=on_card, memory=[[f.name for f in files], remove])
self.status_bar.showMessage(_('Sending news to device.'), 5000)
+ def send_specific_format_to_device(self):
+ d = ChooseFormatDialog(self, _('Choose format to send to device'),
+ self.device_manager.device_class.FORMATS)
+ d.exec_()
+ fmt = d.format().lower()
+ on_card = config['send_to_storage_card_by_default']
+ self.sync_to_device(on_card, False, specific_format=fmt)
+
- def sync_to_device(self, on_card, delete_from_library):
+ def sync_to_device(self, on_card, delete_from_library, specific_format=None):
rows = self.library_view.selectionModel().selectedRows()
if not self.device_manager or not rows or len(rows) == 0:
return
@@ -907,7 +918,8 @@ class Main(MainWindow, Ui_MainWindow):
metadata = iter(metadata)
_files = self.library_view.model().get_preferred_formats(rows,
self.device_manager.device_class.FORMATS,
- paths=True, set_metadata=True)
+ paths=True, set_metadata=True,
+ specific_format=specific_format)
files = [getattr(f, 'name', None) for f in _files]
bad, good, gf, names, remove_ids = [], [], [], [], []
for f in files:
diff --git a/src/calibre/gui2/main.ui b/src/calibre/gui2/main.ui
index 323b1bf170..ad8c450d1a 100644
--- a/src/calibre/gui2/main.ui
+++ b/src/calibre/gui2/main.ui
@@ -656,6 +656,15 @@
Books with the same tags
+
+
+
+ :/images/book.svg:/images/book.svg
+
+
+ Send specific format to device
+
+