summaryrefslogtreecommitdiff
authoreilers <eilers>2004-10-26 11:18:23 (UTC)
committer eilers <eilers>2004-10-26 11:18:23 (UTC)
commit8d8b23bff18b8afd42840ef1d4574ef3ea9f8cee (patch) (side-by-side diff)
tree04505b36b73f00bcd31666d30bc7cd80883729e6
parentcd3245ade209b4672ab5c51003aa66b5908c67a1 (diff)
downloadopie-8d8b23bff18b8afd42840ef1d4574ef3ea9f8cee.zip
opie-8d8b23bff18b8afd42840ef1d4574ef3ea9f8cee.tar.gz
opie-8d8b23bff18b8afd42840ef1d4574ef3ea9f8cee.tar.bz2
Protect against error in database format. Recover to old if database was
unreadable ..
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/tools/pimconverter/converter.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/noncore/tools/pimconverter/converter.cpp b/noncore/tools/pimconverter/converter.cpp
index e8bd475..d92f382 100644
--- a/noncore/tools/pimconverter/converter.cpp
+++ b/noncore/tools/pimconverter/converter.cpp
@@ -204,128 +204,142 @@ void Converter::start_conversion(){
case DATEBOOK:
delete static_cast<ODateBookAccess*> (sourceDB);
delete static_cast<ODateBookAccess*> (destDB);
break;
default:
owarn << "Unknown database selected (" << m_selectedDatabase << ")" << oendl;
return;
}
owarn << "Conversion is finished and needed " << t.elapsed() << " ms !" << oendl;
}
void Converter::closeEvent( QCloseEvent *e )
{
/* Due to the fact that we don't have multitasking here, this
* critical handling don't make sense, but the future..
*/
if ( m_criticalState ){
e->ignore();
return;
}
e->accept();
}
bool Converter::sqliteMoveAndConvert( const QString& name, const QString& src, const QString &dest )
{
QMessageBox::information( this, tr( "Pim-Converter" ),
tr( "<qt>Starting to convert the database for %1</qt>" ).arg( name ) );
bool error = false;
QString cmd;
if (!QFile::exists( src ) ) {
cmd = tr( "No SQLite2 database could be found!" );
error = true;
}
if( QFile::exists( dest ) ) {
cmd = tr( "The database is already converted!" );
error = true;
}
if ( error ){
QMessageBox::critical( this, tr("Pim-Converter"),
- tr("<qt>Conversion not possible: \n"
+ tr("<qt>Conversion not possible: <br>"
"Problem: %1</qt>").arg(cmd) );
return error;
}
/*
* Move it over
*/
cmd = "mv " + Global::shellQuote(src) + " " + Global::shellQuote(dest);
if( ::system( cmd ) != 0 ){
error = true;
}
/*
* Convert it
*/
if ( !error ){
cmd = "sqlite " + Global::shellQuote(dest) + " .dump | sqlite3 " + Global::shellQuote(src);
if ( ::system( cmd ) != 0 ){
error = true;
}
}
+
+ /*
+ * Check whether conversion really worked. If not, move old database back to recover it
+ */
+ if ( !QFile::exists( src ) ){
+ cmd = "mv " + Global::shellQuote(dest) + " " + Global::shellQuote(src);
+ if ( ::system( cmd ) != 0 ){
+ }
+ error = true;
+ cmd = "Database-Format is not V2!?";
+ }
+
if ( error ){
QMessageBox::critical( this, tr("Pim-Converter"),
- tr("<qt>An internal error occurred: "
- "Converting the database was impossible! "
- "Command: '%1' </qt>").arg(cmd) );
+ tr("<qt>An internal error occurred: <br>"
+ "Converting the database was impossible! <br>"
+ "Command/Reason: '%1' </qt>").arg(cmd) );
}
+
+
}
void Converter::start_upgrade()
{
odebug << "Start upgrading" << oendl;
switch( QMessageBox::warning( this, tr("Pim-Converter"),
tr("<qt>Are you really sure that you "
"want to convert your database from "
"sqlite V2 to sqlite V3?</qt>"),
QMessageBox::Ok | QMessageBox::Default,
QMessageBox::Abort | QMessageBox::Escape )) {
case QMessageBox::Abort: // Abort clicked or Escape pressed
// abort
return;
break;
}
odebug << "Checking whether sqlite is installed" << oendl;
if ( system( "which sqlite" ) != 0 ){
QMessageBox::critical( this, tr("Pim-Converter"),
tr("<qt>An internal error occurred: "
"sqlite was not accessible! "
"Please correct the PATH or install "
"this packages!</qt>") );
return;
}
if ( system( "which sqlite3" ) != 0 ){
QMessageBox::critical( this, tr("Pim-Converter"),
tr("<qt>An internal error occurred: "
"sqlite3 was not accessible! "
"Please correct the PATH or install "
"this packages!</qt>") );
return;
}
QString src, dest;
bool error = false;
src = Global::applicationFileName("addressbook", "addressbook.db" );
dest = Global::applicationFileName("addressbook", "addressbook.db_v2" );
error = sqliteMoveAndConvert( "Addressbook", src, dest );
src = Global::applicationFileName("datebook", "datebook.db" );
dest = Global::applicationFileName("datebook", "datebook.db_v2" );
error = sqliteMoveAndConvert( "Datebook", src, dest );