20#include <kexidb/global.h>
21#include "sqlitevacuum.h"
23#include <kstandarddirs.h>
27#include <tdetempfile.h>
28#include <tdemessagebox.h>
29#include <tdeio/global.h>
31#include <tqfileinfo.h>
33#include <tqapplication.h>
39SQLiteVacuum::SQLiteVacuum( const TQString& filePath)
48SQLiteVacuum::~SQLiteVacuum()
58 const TQString ksqlite_app = TDEStandardDirs::findExe( "ksqlite" );
59 if (ksqlite_app.isEmpty()) {
63 TQFileInfo fi(m_filePath);
64 if (!fi.isReadable()) {
65 KexiDBDrvWarn << "SQLiteVacuum::run(): No such file" << m_filePath << endl;
68 const uint origSize = fi.size();
71 args << ksqlite_app << "-verbose-vacuum" << m_filePath << "vacuum";
72 m_process = new TQProcess(args, this, "process");
73 m_process->setWorkingDirectory( TQFileInfo(m_filePath).dir( true) );
74 connect( m_process, TQ_SIGNAL(readyReadStdout()), this, TQ_SLOT(readFromStdout()) );
75 connect( m_process, TQ_SIGNAL(processExited()), this, TQ_SLOT(processExited()) );
76 if (!m_process->start()) {
80 m_dlg = new KProgressDialog(0, 0, i18n( "Compacting database"),
81 "<qt>"+i18n( "Compacting database \"%1\"...")
82 .arg( "<nobr>"+TQDir::convertSeparators(TQFileInfo(m_filePath).fileName())+ "</nobr>")
85 m_dlg->resize(300, m_dlg->height());
86 connect(m_dlg, TQ_SIGNAL(cancelClicked()), this, TQ_SLOT(cancelClicked()));
87 m_dlg->setMinimumDuration(1000);
88 m_dlg->setAutoClose( true);
89 m_dlg->progressBar()->setTotalSteps(100);
91 while (m_process->isRunning()) {
97 if (m_result == true) {
98 const uint newSize = TQFileInfo(m_filePath).size();
99 const uint decrease = 100-100*newSize/origSize;
100 KMessageBox::information(0, i18n( "The database has been compacted. Current size decreased by %1% to %2.")
101 .arg(decrease).arg(TDEIO::convertSize(newSize)));
106void SQLiteVacuum::readFromStdout()
109 TQString s( m_process->readLineStdout() );
112 m_dlg->progressBar()->setProgress(m_percent);
114 if (s.startsWith( "VACUUM: ")) {
116 m_dlg->progressBar()->setProgress(m_percent);
118 if (s.mid(8,4)== "100%") {
120 m_dlg->setAllowCancel( false);
121 m_dlg->setCursor(TQCursor(TQt::WaitCursor));
123 else if (s.mid(9,1)== "%") {
124 m_percent = s.mid(8,1).toInt();
126 else if (s.mid(10,1)== "%") {
127 m_percent = s.mid(8,2).toInt();
129 m_process->writeToStdin(TQString( " "));
134void SQLiteVacuum::processExited()
142void SQLiteVacuum::cancelClicked()
144 if (!m_process->normalExit()) {
145 m_process->writeToStdin(TQString( "q"));
146 m_result = cancelled;
150#include "sqlitevacuum.moc"
3-state logical type with three values: true, false and cancelled and convenient operators.
|