Fix #1168231 (enhancement Choose Library by Path would be so much easier to work with if...)

This commit is contained in:
Kovid Goyal 2013-04-12 12:52:54 +05:30
parent 218d7a6810
commit cdc69fcfc1

View File

@ -10,8 +10,7 @@ from functools import partial
from threading import Thread from threading import Thread
from contextlib import closing from contextlib import closing
from PyQt4.Qt import (QToolButton, QDialog, QGridLayout, QIcon, QLabel, from PyQt4.Qt import (QToolButton, QDialog, QGridLayout, QIcon, QLabel, QDialogButtonBox)
QCheckBox, QDialogButtonBox)
from calibre.gui2.actions import InterfaceAction from calibre.gui2.actions import InterfaceAction
from calibre.gui2 import (error_dialog, Dispatcher, warning_dialog, gprefs, from calibre.gui2 import (error_dialog, Dispatcher, warning_dialog, gprefs,
@ -71,8 +70,10 @@ class Worker(Thread): # {{{
mi.timestamp = now() mi.timestamp = now()
self.progress(i, mi.title) self.progress(i, mi.title)
fmts = self.db.formats(x, index_is_id=True) fmts = self.db.formats(x, index_is_id=True)
if not fmts: fmts = [] if not fmts:
else: fmts = fmts.split(',') fmts = []
else:
fmts = fmts.split(',')
paths = [] paths = []
for fmt in fmts: for fmt in fmts:
p = self.db.format(x, fmt, index_is_id=True, p = self.db.format(x, fmt, index_is_id=True,
@ -146,12 +147,19 @@ class ChooseLibrary(QDialog): # {{{
b.setToolTip(_('Browse for library')) b.setToolTip(_('Browse for library'))
b.clicked.connect(self.browse) b.clicked.connect(self.browse)
l.addWidget(b, 0, 2) l.addWidget(b, 0, 2)
self.c = c = QCheckBox(_('&Delete after copy')) self.bb = bb = QDialogButtonBox(QDialogButtonBox.Cancel)
l.addWidget(c, 1, 0, 1, 3)
self.bb = bb = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
bb.accepted.connect(self.accept) bb.accepted.connect(self.accept)
bb.rejected.connect(self.reject) bb.rejected.connect(self.reject)
l.addWidget(bb, 2, 0, 1, 3) self.delete_after_copy = False
b = bb.addButton(_('&Copy'), bb.AcceptRole)
b.setIcon(QIcon(I('edit-copy.png')))
b.setToolTip(_('Copy to the specified library'))
b2 = bb.addButton(_('&Move'), bb.AcceptRole)
b2.clicked.connect(lambda: setattr(self, 'delete_after_copy', True))
b2.setIcon(QIcon(I('edit-cut.png')))
b2.setToolTip(_('Copy to the specified library and delete from the current library'))
b.setDefault(True)
l.addWidget(bb, 1, 0, 1, 3)
le.setMinimumWidth(350) le.setMinimumWidth(350)
self.resize(self.sizeHint()) self.resize(self.sizeHint())
@ -163,7 +171,7 @@ class ChooseLibrary(QDialog): # {{{
@property @property
def args(self): def args(self):
return (unicode(self.le.text()), self.c.isChecked()) return (unicode(self.le.text()), self.delete_after_copy)
# }}} # }}}
class CopyToLibraryAction(InterfaceAction): class CopyToLibraryAction(InterfaceAction):
@ -214,6 +222,8 @@ class CopyToLibraryAction(InterfaceAction):
d = ChooseLibrary(self.gui) d = ChooseLibrary(self.gui)
if d.exec_() == d.Accepted: if d.exec_() == d.Accepted:
path, delete_after = d.args path, delete_after = d.args
if not path:
return
db = self.gui.library_view.model().db db = self.gui.library_view.model().db
current = os.path.normcase(os.path.abspath(db.library_path)) current = os.path.normcase(os.path.abspath(db.library_path))
if current == os.path.normcase(os.path.abspath(path)): if current == os.path.normcase(os.path.abspath(path)):