Show progress when moving library to a new location

This commit is contained in:
Kovid Goyal 2008-09-20 10:59:55 -07:00
parent f277f2b870
commit 1961b39387
4 changed files with 36 additions and 4 deletions

View File

@ -147,6 +147,13 @@ def fix_opf(opf, orig_file, files, anchor_map):
ids = [] ids = []
for f in files: for f in files:
ids.append(opf.manifest.add_item(f)) ids.append(opf.manifest.add_item(f))
index = None
for i, item in enumerate(opf.spine):
if item.id == orig.id:
index = i
break
def split(pathtoopf, opts): def split(pathtoopf, opts):

View File

@ -142,6 +142,9 @@ class ResourceCollection(object):
def remove(self, resource): def remove(self, resource):
self._resources.remove(resource) self._resources.remove(resource)
def replace(self, start, end, items):
pass
@staticmethod @staticmethod
def from_directory_contents(top, topdown=True): def from_directory_contents(top, topdown=True):
collection = ResourceCollection() collection = ResourceCollection()

View File

@ -1158,10 +1158,16 @@ class Main(MainWindow, Ui_MainWindow):
newloc = d.database_location newloc = d.database_location
if not os.path.exists(os.path.join(newloc, 'metadata.db')): if not os.path.exists(os.path.join(newloc, 'metadata.db')):
if os.access(self.library_path, os.R_OK): if os.access(self.library_path, os.R_OK):
from PyQt4.QtGui import QProgressDialog
pd = QProgressDialog('', '', 0, 100, self)
pd.setWindowModality(Qt.ApplicationModal)
pd.setCancelButton(None)
pd.setWindowTitle(_('Copying database'))
pd.show()
self.status_bar.showMessage(_('Copying library to ')+newloc) self.status_bar.showMessage(_('Copying library to ')+newloc)
self.setCursor(Qt.BusyCursor) self.setCursor(Qt.BusyCursor)
self.library_view.setEnabled(False) self.library_view.setEnabled(False)
self.library_view.model().db.move_library_to(newloc) self.library_view.model().db.move_library_to(newloc, pd)
else: else:
try: try:
db = LibraryDatabase2(newloc) db = LibraryDatabase2(newloc)

View File

@ -908,11 +908,21 @@ class LibraryDatabase2(LibraryDatabase):
self.data.books_added([id], self.conn) self.data.books_added([id], self.conn)
self.notify('add', [id]) self.notify('add', [id])
def move_library_to(self, newloc): def move_library_to(self, newloc, progress=None):
header = _(u'<p>Copying books to %s<br><center>')%newloc
books = self.conn.execute('SELECT id, path, title FROM books').fetchall()
if progress is not None:
progress.setValue(0)
progress.setLabelText(header)
QCoreApplication.processEvents()
progress.setAutoReset(False)
progress.setRange(0, len(books))
if not os.path.exists(newloc): if not os.path.exists(newloc):
os.makedirs(newloc) os.makedirs(newloc)
old_dirs = set([]) old_dirs = set([])
for book in self.conn.execute('SELECT id, path FROM books').fetchall(): for i, book in enumerate(books):
if progress is not None:
progress.setLabelText(header+_(u'Copying <b>%s</b>')%book[2])
path = book[1] path = book[1]
if not path: if not path:
continue continue
@ -921,8 +931,11 @@ class LibraryDatabase2(LibraryDatabase):
tdir = os.path.join(newloc, dir) tdir = os.path.join(newloc, dir)
if os.path.exists(tdir): if os.path.exists(tdir):
shutil.rmtree(tdir) shutil.rmtree(tdir)
shutil.copytree(srcdir, tdir) if os.path.exists(srcdir):
shutil.copytree(srcdir, tdir)
old_dirs.add(srcdir) old_dirs.add(srcdir)
if progress is not None:
progress.setValue(i+1)
dbpath = os.path.join(newloc, os.path.basename(self.dbpath)) dbpath = os.path.join(newloc, os.path.basename(self.dbpath))
shutil.copyfile(self.dbpath, dbpath) shutil.copyfile(self.dbpath, dbpath)
@ -936,6 +949,9 @@ class LibraryDatabase2(LibraryDatabase):
shutil.rmtree(dir) shutil.rmtree(dir)
except: except:
pass pass
if progress is not None:
progress.reset()
progress.hide()
def migrate_old(self, db, progress): def migrate_old(self, db, progress):