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):