/media/hdb5/canorusNightlyBuildSystem/trunk/src/core/autorecovery.cpp

Go to the documentation of this file.
00001 
00008 #include "core/autorecovery.h"
00009 
00010 #include <QSet>
00011 #include <QTimer>
00012 #include <QFile>
00013 #include <QMessageBox>
00014 #include "export/canorusmlexport.h"
00015 #include "import/canorusmlimport.h"
00016 #include "canorus.h"
00017 #include "core/settings.h"
00018 
00038 CAAutoRecovery::CAAutoRecovery() {
00039         _autoRecoveryTimer = new QTimer(this);
00040         _autoRecoveryTimer->setSingleShot( false );
00041         connect( _autoRecoveryTimer, SIGNAL(timeout()), this, SLOT(saveRecovery()) );
00042         updateTimer(); // reads interval from settings and starts the timer
00043 }
00044 
00045 CAAutoRecovery::~CAAutoRecovery() {
00046         delete _autoRecoveryTimer;
00047 }
00048 
00052 void CAAutoRecovery::updateTimer() {
00053         _autoRecoveryTimer->stop();
00054         _autoRecoveryTimer->setInterval( CACanorus::settings()->autoRecoveryInterval()*60000 );
00055         if ( CACanorus::settings()->autoRecoveryInterval() )
00056                 _autoRecoveryTimer->start();
00057 }
00058 
00062 void CAAutoRecovery::saveRecovery() {
00063         QSet<CADocument*> documents;
00064         for (int i=0; i<CACanorus::mainWinCount(); i++)
00065                 documents << CACanorus::mainWinAt(i)->document();
00066         
00067         int c=0;
00068         for (QSet<CADocument*>::const_iterator i=documents.constBegin(); i!=documents.constEnd(); i++, c++) {
00069                 CACanorusMLExport save;
00070                 save.setStreamToFile( CACanorus::settingsPath()+"/recovery"+QString::number(c) );
00071                 save.exportDocument( *i );
00072                 save.wait();
00073         }
00074         
00075         while ( QFile::exists(CACanorus::settingsPath()+"/recovery"+QString::number(c)) ) {
00076                 QFile::remove(CACanorus::settingsPath()+"/recovery"+QString::number(c));
00077                 c++;
00078         }
00079 }
00080 
00085 void CAAutoRecovery::cleanupRecovery() {
00086         for ( int i=0; QFile::exists(CACanorus::settingsPath()+"/recovery"+QString::number(i)); i++ ) {
00087                 QFile::remove(CACanorus::settingsPath()+"/recovery"+QString::number(i));
00088         }
00089 }
00090 
00095 void CAAutoRecovery::openRecovery() {
00096         QString documents;
00097         for ( int i=0; QFile::exists(CACanorus::settingsPath()+"/recovery"+QString::number(i)); i++ ) {
00098                 CACanorusMLImport open;
00099                 open.setStreamFromFile( CACanorus::settingsPath()+"/recovery"+QString::number(i) );
00100                 open.importDocument();
00101                 open.wait();
00102                 if ( open.importedDocument() ) {
00103                         CAMainWin *mainWin = new CAMainWin();
00104                         documents.append( tr("- Document %1 last modified on %2.").arg(open.importedDocument()->title()).arg(open.importedDocument()->dateLastModified().toString()) + "\n" );
00105                         mainWin->openDocument( open.importedDocument() );
00106                         mainWin->show();
00107                 }
00108         }
00109         
00110         cleanupRecovery();
00111         
00112         if (!documents.isEmpty()) {
00113                 QMessageBox::information(
00114                                 CACanorus::mainWinAt( CACanorus::mainWinCount()-1 ),
00115                                 tr("Document recovery"),
00116                                 tr("Previous session of Canorus was unexpectedly closed.\n\n\
00117 The following documents were successfully recovered:\n%1").arg(documents)
00118                 );
00119         }
00120 }

Generated on Sat Feb 9 13:06:25 2008 for Canorus by  doxygen 1.5.3