From e7a465ce6e2a7353c51c2ec1b1f0d8b7148c675e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 30 Jan 2008 16:46:55 +0000 Subject: [PATCH] Add compact database button to config dialog --- src/libprs500/gui2/__init__.py | 6 +++ src/libprs500/gui2/dialogs/config.py | 25 ++++++++++-- src/libprs500/gui2/dialogs/config.ui | 57 ++++++++++++++++++++++++---- src/libprs500/gui2/main.py | 2 +- src/libprs500/library/database.py | 6 +++ 5 files changed, 85 insertions(+), 11 deletions(-) diff --git a/src/libprs500/gui2/__init__.py b/src/libprs500/gui2/__init__.py index 9db9aeba35..5ec0f11e89 100644 --- a/src/libprs500/gui2/__init__.py +++ b/src/libprs500/gui2/__init__.py @@ -53,6 +53,12 @@ def question_dialog(parent, title, msg): d.setIconPixmap(QPixmap(':/images/dialog_information.svg')) return d +def info_dialog(parent, title, msg): + d = QMessageBox(QMessageBox.Information, title, msg, QMessageBox.NoButton, + parent) + d.setIconPixmap(QPixmap(':/images/dialog_information.svg')) + return d + def qstring_to_unicode(q): return unicode(q) diff --git a/src/libprs500/gui2/dialogs/config.py b/src/libprs500/gui2/dialogs/config.py index 89382450d1..7a843579a8 100644 --- a/src/libprs500/gui2/dialogs/config.py +++ b/src/libprs500/gui2/dialogs/config.py @@ -14,8 +14,8 @@ ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os -from PyQt4.QtGui import QDialog -from PyQt4.QtCore import QSettings, QVariant, SIGNAL, QStringList +from PyQt4.QtGui import QDialog, QMessageBox +from PyQt4.QtCore import QSettings, QVariant, SIGNAL, QStringList, QTimer from libprs500 import islinux from libprs500.gui2.dialogs.config_ui import Ui_Dialog @@ -23,11 +23,12 @@ from libprs500.gui2 import qstring_to_unicode, choose_dir, error_dialog class ConfigDialog(QDialog, Ui_Dialog): - def __init__(self, window): + def __init__(self, window, db): QDialog.__init__(self, window) Ui_Dialog.__init__(self) self.setupUi(self) + self.db = db settings = QSettings() path = qstring_to_unicode(\ settings.value("database path", @@ -35,6 +36,7 @@ class ConfigDialog(QDialog, Ui_Dialog): self.location.setText(os.path.dirname(path)) self.connect(self.browse_button, SIGNAL('clicked(bool)'), self.browse) + self.connect(self.compact_button, SIGNAL('clicked(bool)'), self.compact) dirs = settings.value('frequently used directories', QVariant(QStringList())).toStringList() rn = bool(settings.value('use roman numerals for series number', @@ -51,6 +53,10 @@ class ConfigDialog(QDialog, Ui_Dialog): if not islinux: self.dirs_box.setVisible(False) + def compact(self, toggled): + d = Vacuum(self, self.db) + d.exec_() + def browse(self): dir = choose_dir(self, 'database location dialog', 'Select database location') if dir: @@ -82,3 +88,16 @@ class ConfigDialog(QDialog, Ui_Dialog): self.directories = [qstring_to_unicode(self.directory_list.item(i).text()) for i in range(self.directory_list.count())] settings.setValue('frequently used directories', QVariant(self.directories)) QDialog.accept(self) + +class Vacuum(QMessageBox): + + def __init__(self, parent, db): + self.db = db + QMessageBox.__init__(self, QMessageBox.Information, 'Compacting...', 'Compacting database. This may take a while.', + QMessageBox.NoButton, parent) + QTimer.singleShot(200, self.vacuum) + + def vacuum(self): + self.db.vacuum() + self.accept() + \ No newline at end of file diff --git a/src/libprs500/gui2/dialogs/config.ui b/src/libprs500/gui2/dialogs/config.ui index 25fc0890c3..d6d14796c6 100644 --- a/src/libprs500/gui2/dialogs/config.ui +++ b/src/libprs500/gui2/dialogs/config.ui @@ -19,8 +19,8 @@ - - + + @@ -54,7 +54,7 @@ - + Use &Roman numerals for series number @@ -64,7 +64,7 @@ - + @@ -97,13 +97,16 @@ - + &Priority for conversion jobs: + + priority + @@ -111,7 +114,47 @@ - + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Free unused diskspace from the database + + + &Compact database + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + Frequently used directories @@ -206,7 +249,7 @@ - + Qt::Vertical diff --git a/src/libprs500/gui2/main.py b/src/libprs500/gui2/main.py index b2f6899d0a..d10585c5c2 100644 --- a/src/libprs500/gui2/main.py +++ b/src/libprs500/gui2/main.py @@ -676,7 +676,7 @@ class Main(MainWindow, Ui_MainWindow): d = error_dialog(self, _('Cannot configure'), _('Cannot configure while there are running jobs.')) d.exec_() return - d = ConfigDialog(self) + d = ConfigDialog(self, self.library_view.model().db) d.exec_() if d.result() == d.Accepted: if os.path.dirname(self.database_path) != d.database_location: diff --git a/src/libprs500/library/database.py b/src/libprs500/library/database.py index dcb7bcdef3..397b1f7a94 100644 --- a/src/libprs500/library/database.py +++ b/src/libprs500/library/database.py @@ -1277,6 +1277,10 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; mi.libprs_id = id return mi + def vacuum(self): + self.conn.execute('VACUUM;') + self.conn.commit() + def export_to_dir(self, dir, indices, byauthor=False): if not os.path.exists(dir): raise IOError('Target directory does not exist: '+dir) @@ -1327,6 +1331,8 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; print 'Error setting metadata for book:', mi.title traceback.print_exc() f.close() + + class SearchToken(object):